Return-Path: X-Original-To: archive-asf-public-internal@cust-asf2.ponee.io Delivered-To: archive-asf-public-internal@cust-asf2.ponee.io Received: from cust-asf.ponee.io (cust-asf.ponee.io [163.172.22.183]) by cust-asf2.ponee.io (Postfix) with ESMTP id 04542200BA8 for ; Mon, 24 Oct 2016 10:01:16 +0200 (CEST) Received: by cust-asf.ponee.io (Postfix) id 02C2E160AE1; Mon, 24 Oct 2016 08:01:16 +0000 (UTC) Delivered-To: archive-asf-public@cust-asf.ponee.io Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by cust-asf.ponee.io (Postfix) with SMTP id 228D4160B00 for ; Mon, 24 Oct 2016 10:01:14 +0200 (CEST) Received: (qmail 55997 invoked by uid 500); 24 Oct 2016 08:01:14 -0000 Mailing-List: contact dev-help@aries.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@aries.apache.org Delivered-To: mailing list dev@aries.apache.org Received: (qmail 55820 invoked by uid 99); 24 Oct 2016 08:01:14 -0000 Received: from arcas.apache.org (HELO arcas) (140.211.11.28) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 24 Oct 2016 08:01:14 +0000 Received: from arcas.apache.org (localhost [127.0.0.1]) by arcas (Postfix) with ESMTP id 00E882C0087 for ; Mon, 24 Oct 2016 08:01:14 +0000 (UTC) Date: Mon, 24 Oct 2016 08:01:14 +0000 (UTC) From: "Christian Schneider (JIRA)" To: dev@aries.apache.org Message-ID: In-Reply-To: References: Subject: [jira] [Commented] (ARIES-1615) Calling the method createAndCloseDummyEMF() causes NullPointerException MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit X-JIRA-FingerPrint: 30527f35849b9dde25b450d4833f0394 archived-at: Mon, 24 Oct 2016 08:01:16 -0000 [ https://issues.apache.org/jira/browse/ARIES-1615?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15601287#comment-15601287 ] Christian Schneider commented on ARIES-1615: -------------------------------------------- Not sure if we can avoid this. After all the DummyDataSource is not a working DataSource. createAndCloseDummyEMF() is mainly meant to let the PersistenceProvider call addTransformer so we can do the class enhancement. I would be glad about any better way to achieve that. The problem is that if we wait until the real DataSource is present then user code might already have accessed classes from the bundle and the enhancement will not be possible at that point. > Calling the method createAndCloseDummyEMF() causes NullPointerException > ----------------------------------------------------------------------- > > Key: ARIES-1615 > URL: https://issues.apache.org/jira/browse/ARIES-1615 > Project: Aries > Issue Type: Bug > Components: JPA > Affects Versions: jpa-2.4.0 > Environment: JPA: 2.4.0, EclipseLink: 2.6.3 > Reporter: Jens Offenbach > Assignee: Christian Schneider > Labels: jpa, jpa-container > Fix For: jpa-2.5.0 > > > In the current version of JPAContainer the method call {{createAndCloseDummyEMF}} throws the following {{NullPointerException}}: > {code} > [EL Warning]: 2016-09-20 14:59:39.373--ServerSession(1864482722)--Thread(Thread[Start Level: Equinox Container: 80090ef3-307f-0016-1904-9194b7ab7645,5,main])--java.lang.NullPointerException > [EL Severe]: 2016-09-20 14:59:39.373--ServerSession(1864482722)--Thread(Thread[Start Level: Equinox Container: 80090ef3-307f-0016-1904-9194b7ab7645,5,main])--java.lang.NullPointerException > at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeDirectNoSelect(DatabaseAccessor.java:892) > at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeNoSelect(DatabaseAccessor.java:964) > at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.basicExecuteCall(DatabaseAccessor.java:633) > at org.eclipse.persistence.internal.databaseaccess.DatabaseAccessor.executeCall(DatabaseAccessor.java:560) > at org.eclipse.persistence.internal.sessions.AbstractSession.basicExecuteCall(AbstractSession.java:2056) > at org.eclipse.persistence.sessions.server.ServerSession.executeCall(ServerSession.java:570) > at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:242) > at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeCall(DatasourceCallQueryMechanism.java:228) > at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelectCall(DatasourceCallQueryMechanism.java:271) > at org.eclipse.persistence.internal.queries.DatasourceCallQueryMechanism.executeNoSelect(DatasourceCallQueryMechanism.java:251) > at org.eclipse.persistence.queries.DataModifyQuery.executeDatabaseQuery(DataModifyQuery.java:85) > at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:904) > at org.eclipse.persistence.internal.sessions.AbstractSession.internalExecuteQuery(AbstractSession.java:3271) > at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1857) > at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1839) > at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1790) > at org.eclipse.persistence.internal.sessions.AbstractSession.priviledgedExecuteNonSelectingCall(AbstractSession.java:5079) > at org.eclipse.persistence.tools.schemaframework.DatabaseObjectDefinition.createOnDatabase(DatabaseObjectDefinition.java:202) > at org.eclipse.persistence.tools.schemaframework.SchemaManager.createObject(SchemaManager.java:223) > at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:171) > at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:148) > at org.eclipse.persistence.tools.schemaframework.TableCreator.createTables(TableCreator.java:140) > at org.eclipse.persistence.tools.schemaframework.SchemaManager.createDefaultTables(SchemaManager.java:1032) > at org.eclipse.persistence.internal.jpa.EntityManagerFactoryProvider.generateDefaultTables(EntityManagerFactoryProvider.java:109) > at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDLToDatabase(EntityManagerSetupImpl.java:4225) > at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:4153) > at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.writeDDL(EntityManagerSetupImpl.java:4053) > at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.deploy(EntityManagerSetupImpl.java:777) > at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getAbstractSession(EntityManagerFactoryDelegate.java:205) > at org.eclipse.persistence.internal.jpa.EntityManagerFactoryDelegate.getDatabaseSession(EntityManagerFactoryDelegate.java:183) > at org.eclipse.persistence.internal.jpa.EntityManagerFactoryImpl.getDatabaseSession(EntityManagerFactoryImpl.java:528) > at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactoryImpl(PersistenceProvider.java:385) > at org.eclipse.persistence.jpa.PersistenceProvider.createContainerEntityManagerFactory(PersistenceProvider.java:313) > at org.apache.aries.jpa.eclipselink.adapter.EclipseLinkPersistenceProvider.createContainerEntityManagerFactory(EclipseLinkPersistenceProvider.java:52) > at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.createAndCloseDummyEMF(PersistenceProviderTracker.java:105) > at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:85) > at org.apache.aries.jpa.container.impl.PersistenceProviderTracker.addingService(PersistenceProviderTracker.java:44) > at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:941) > at org.osgi.util.tracker.ServiceTracker$Tracked.customizerAdding(ServiceTracker.java:1) > at org.osgi.util.tracker.AbstractTracked.trackAdding(AbstractTracked.java:256) > at org.osgi.util.tracker.AbstractTracked.track(AbstractTracked.java:229) > at org.osgi.util.tracker.ServiceTracker$Tracked.serviceChanged(ServiceTracker.java:901) > at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:109) > at org.eclipse.osgi.internal.framework.BundleContextImpl.dispatchEvent(BundleContextImpl.java:914) > at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148) > at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:862) > at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:801) > at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:127) > at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:225) > at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:464) > at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:482) > at org.eclipse.osgi.internal.framework.BundleContextImpl.registerService(BundleContextImpl.java:998) > at org.apache.aries.jpa.eclipselink.adapter.Activator.handlePotentialEclipseLink(Activator.java:116) > at org.apache.aries.jpa.eclipselink.adapter.Activator.start(Activator.java:72) > at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:771) > at org.eclipse.osgi.internal.framework.BundleContextImpl$3.run(BundleContextImpl.java:1) > at java.security.AccessController.doPrivileged(Native Method) > at org.eclipse.osgi.internal.framework.BundleContextImpl.startActivator(BundleContextImpl.java:764) > at org.eclipse.osgi.internal.framework.BundleContextImpl.start(BundleContextImpl.java:721) > at org.eclipse.osgi.internal.framework.EquinoxBundle.startWorker0(EquinoxBundle.java:941) > at org.eclipse.osgi.internal.framework.EquinoxBundle$EquinoxModule.startWorker(EquinoxBundle.java:318) > at org.eclipse.osgi.container.Module.doStart(Module.java:571) > at org.eclipse.osgi.container.Module.start(Module.java:439) > at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1582) > at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.incStartLevel(ModuleContainer.java:1562) > at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.doContainerStartLevel(ModuleContainer.java:1533) > at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1476) > at org.eclipse.osgi.container.ModuleContainer$ContainerStartLevel.dispatchEvent(ModuleContainer.java:1) > at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230) > at org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340) > {code} > In the class {{DatabaseAccessor}} of EclipseLink the following code is called (line 1570): > {code} > statement = nativeConnection.prepareStatement(call.getSQLString()); > {code} > The {{nativeConnection}} is return by the class {{DummyDataSource}} and is a dynamic proxy using {{DummyHandler}} as InvocationHandler. Because the method {{prepareStatement}} returns an instance of the type {{java.sql.PreparedStatement}} the method {{proxyClasses}} gets called. This method now returns {{null}}, because the type {{PreparedStatement}} is not covered by the if-clauses. The following call (line: 892) > {code} > rowCount = ((PreparedStatement)statement).executeUpdate(); }} > {code} > in the class {{DatabaseAccessor}} now results in a {{NullPointerExcpetion}}. -- This message was sent by Atlassian JIRA (v6.3.4#6332)