2015-08-21 10 views
6

Ich bekomme eine NullPointerException auf der Konsole meines Tomcat bei meiner ersten Verbindung mit der Datenbank mit createEntityManager(). Ich verwende:NullPointer im Protokoll während der ersten Verbindung zur Datenbank

  • Apache Tomcat 8.0.24
  • Eclipselink 2.6.1-RC1 (indirekt verwendet von JPA)
  • SQLite jdbc 3.8.10.1

Die Log-Nachricht ist die folgende :

[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 

Meine Anwendung scheint gut zu funktionieren - ich über die Warnung zu kümmern haben über die NullPointerException? Oder muss ich mich um die info kümmern?

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". 

EDIT: Dank der @baumato zu helfen und die Einstellung <property name="eclipselink.target-database" value="Database" /> die Informationen über Nicht in der Lage zu erkennen, ... zeigen nicht mehr auf. Die detaillierte Nullpointer ist jetzt:

[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 
+0

Sie stoßen auf das gleiche Problem mit der Zielserver-Plattform http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_target_server.htm – Chris

+0

Was meinst du damit? Die Zielserver-Plattform wäre der Standard ('TargetServer.None'), seit ich Tomcat benutze. –

+0

Versuchen Sie es einzustellen.Die 'Ausnahme' tritt auf, wenn keine Ziel-Server-Klasse gefunden werden kann, die sie abfängt, protokolliert und ignoriert. – Chris

Antwort

5

Diese Ausnahme nicht über Datenbank-Plattform, sondern um Anwendungsserver-Plattform. Es ist nicht fatal. Session # init() Methode ist folgend:

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); 
    } 

So null als erkannte Serverplattform verwendet wird und Eclipse wird prüfen, dass die derzeitige Anwendungsserver-Plattform nicht Multitenancy Unterstützung hat (die Apache Tomcat nicht hat). Dieser Code im SessionManager bezieht sich auf die neue WebLogic-Funktion und Sie können sie einfach ignorieren. 2.7.0 wirft ServerPlatformException anstelle von NPE, aber diese Änderung wurde nicht nach 2.6.1 bakportiert.

Wenn Sie Apache Tomcat Plattformerkennung hinzufügen möchten, öffnen Sie bitte enhancement request auf Eclipselink Bugzilla und stimmen Sie dafür ab, um ihm eine Priorität zu geben.

+0

Das ist wirklich schlechter Code in EclipseLink 2.6.1. NPE, keine Nachricht. EclipseLink ruft diese Methode an drei Stellen auf, möglicherweise mit null, und gibt keinen Hinweis darauf, was falsch ist. public static ServerPlatform createServerPlatform (DatabaseSession Sitzung, String platformClass, Classloader loader) { if (platformClass == null) { throw new Nullpointer(); } – dmatej

+0

Das gleiche Problem ist in Glassfish und Payara. Das Problem ist, dass NPE vor dem Parsen von persistence.xml geworfen wird, so dass es hier keine Möglichkeit gibt, es zu lösen. Ich werde es in Bugzilla melden. – dmatej

+0

OK, danke. Bitte senden Sie mir eine Fehlernummer an [email protected] Ich werde prüfen, was wir damit machen können. –

2

Ich würde vorschlagen, folgende Eigenschaften im Eigenschaften-Abschnitt Ihrer persistence.xml hinzuzufügen detaillierte Debug-Informationen zu bekommen:

<property name="eclipselink.logging.level" value="ALL" /> 
<property name="eclipselink.logging.level.sql" value="FINE"/> 
<property name="eclipselink.logging.parameters" value="true" /> 
<property name="eclipselink.logging.connection" value="true" /> 
<property name="eclipselink.logging.session" value="true" /> 
<property name="eclipselink.logging.thread" value="true" /> 
<property name="eclipselink.logging.timestamp" value="true" /> 

Und wie die Info-Meldung Staaten, versuchen zum Einstellen der Eigenschaft:

Da "Auto" die Standardeinstellung ist, kann dies nicht helfen. Setzen Sie die Zieldatenbank auf "Database". Dies verwendet eine generische Datenbank, wenn Ihre Zieldatenbank nicht aufgelistet ist und Ihr JDBC-Treiber die für Auto erforderlichen Metadaten nicht unterstützt. Mehr unter: http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_target_database.htm#sthash.y1lrDjUn.dpuf)

<property name="eclipselink.target-database" value="Database" /> 
+0

Vielen Dank. Die Eigenschaft 'target-database' wurde auf" Database "gesetzt, wie Sie vorgeschlagen haben und die ich bereits in meinem ursprünglichen Post aktualisiert habe, hat die Info-Nachricht über die Plattform entfernt. Ich habe die detaillierte NullPointerException hinzugefügt - wäre toll, wenn Sie noch einmal helfen können. –

Verwandte Themen