首次连接数据库时,NullPointer在日志中 [英] NullPointer in log during first connection to database
问题描述
我第一次连接数据库时,在tomcat的控制台上得到 NullPointerException
createEntityManager()
。我正在使用:
I get a NullPointerException
on the console of my tomcat at my first connection to the database with createEntityManager()
. I am using:
- apache tomcat 8.0.24
- eclipselink 2.6.1-RC1(间接由JPA使用)
- sqlite jdbc 3.8.10.1
日志消息如下:
[EL Warning]: connection: 2015-08-21 16:01:51.569--java.lang.NullPointerException
[EL Info]: 2015-08-21 16:01:51.585--ServerSession(29156874)--EclipseLink, version: Eclipse Persistence Services - 2.6.1.v20150605-31e8258
[EL Info]: connection: 2015-08-21 16:01:52.365--Not able to detect platform for vendor name [SQLite33.8.10.1]. Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform]. The database dialect used may not match with the database you are using. Please explicitly provide a platform using property "eclipselink.target-database".
[EL Info]: connection: 2015-08-21 16:01:52.505--ServerSession(29156874)--/file:/C:/eclipse_ee/workspaces/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/jeejpa/WEB-INF/classes/_training-jpa login successful
我的应用似乎工作正常 - 我是否必须关心 NullPointerException 的警告?或者我是否必须关心信息?
My application seems to work fine - do I have to care about the warning about the NullPointerException? Or do I have to care about the info?
Not able to detect platform for vendor name [SQLite33.8.10.1].
Defaulting to [org.eclipse.persistence.platform.database.DatabasePlatform].
The database dialect used may not match with the database you are using.
Please explicitly provide a platform using property "eclipselink.target-database".
编辑:
感谢@baumato的帮助和设置< property name =eclipselink.target-databasevalue =数据库/>
有关无法检测的信息... 不再出现了。详细的NullPointerException现在是:
Thanks to help of @baumato and the setting <property name="eclipselink.target-database" value="Database" />
the info about Not able to detect... doesn't show up any more. The detailed NullPointerException now is:
[EL Finest]: jpa: 2015-08-21 16:44:52.954--ServerSession(12993102)--Thread(Thread[http-nio-8443-exec-6,5,main])--Begin deploying Persistence Unit training-jpa; session /file:/C:/eclipse_ee/workspaces/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/jeejpa/WEB-INF/classes/_training-jpa; state Predeployed; factoryCount 1
[EL Finest]: jpa: 2015-08-21 16:44:52.964--ServerSession(12993102)--Thread(Thread[http-nio-8443-exec-6,5,main])--Bean Validation Factory was not initialized: [javax/validation/Validation].
[EL Warning]: connection: 2015-08-21 16:44:52.974--Thread(Thread[http-nio-8443-exec-6,5,main])--java.lang.NullPointerException
at org.eclipse.persistence.platform.server.ServerPlatformUtils.createServerPlatform(ServerPlatformUtils.java:99)
at org.eclipse.persistence.sessions.factories.SessionManager.init(SessionManager.java:77)
at org.eclipse.persistence.sessions.factories.SessionManager.<clinit>(SessionManager.java:71)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.addSessionToGlobalSessionManager(EntityManagerSetupImpl.java:907)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.initSession(EntityManagerSetupImpl.java:2671)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:675)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.createEntityManagerImpl(EntityManagerFactoryDelegate.java:305)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManagerImpl(EntityManagerFactoryImpl.java:337)
at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:303)
at de.training.beans.LoginBean.login(LoginBean.java:58)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at org.apache.el.parser.AstValue.invoke(AstValue.java:247)
at org.apache.el.MethodExpressionImpl.invoke(MethodExpressionImpl.java:267)
at com.sun.faces.facelets.el.TagMethodExpression.invoke(TagMethodExpression.java:105)
at javax.faces.component.MethodBindingMethodExpressionAdapter.invoke(MethodBindingMethodExpressionAdapter.java:87)
at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:102)
at javax.faces.component.UICommand.broadcast(UICommand.java:315)
at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:790)
at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:1282)
at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:81)
at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:101)
at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:198)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:654)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:291)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at de.training.filter.URILoggerFilter.doFilter(URILoggerFilter.java:24)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at de.training.filter.LoginFilter.doFilter(LoginFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:614)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:668)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1527)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1484)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)
[EL Finer]: 2015-08-21 16:44:52.974--Thread(Thread[http-nio-8443-exec-6,5,main])--initializing session manager
推荐答案
这个例外不是关于数据库平台而是关于应用服务器平台。这不是致命的。
SessionManager #init()方法执行以下操作:
This exception is not about database platform but about application server platform. It's not fatal. SessionManager#init() method does following:
String platformClass
= ServerPlatformUtils.detectServerPlatform(null);
try {
detectedPlatform
= ServerPlatformUtils.createServerPlatform(
null, platformClass,
SessionManager.class.getClassLoader());
} catch (NullPointerException npe) {
//some platforms may not be handling 'null' session well,
//so be defensive here and only log throwable here
detectedPlatform = null;
LOG.logThrowable(SessionLog.WARNING,
AbstractSessionLog.CONNECTION, npe);
}
所以 null 用作检测到的服务器平台和EclipseLink将考虑当前的应用程序服务器平台没有多租户支持(Apache Tomcat没有)。
SessionManager中的此代码与新的WebLogic功能相关,您可以忽略它。
2.7.0引发ServerPlatformException而不是NPE,但是这个更改没有被引入2.6.1。
So null is used as detected server platform and EclipseLink will consider that current application server platform does not have multitenancy support (which Apache Tomcat does not have). This code in SessionManager is related to new WebLogic feature and you may simply ignore it. 2.7.0 throws ServerPlatformException instead of NPE but this change was not bacported to 2.6.1.
如果你们想添加Apache Tomcat平台检测,请在Eclipselink Bugzilla上打开增强请求并投票给它优先。
If you guys would like to add Apache Tomcat platform detection, please open enhancement request on Eclipselink Bugzilla and vote for it to give it a priority.
这篇关于首次连接数据库时,NullPointer在日志中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!