[ 
https://issues.apache.org/jira/browse/ARIES-1160?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Guillaume Nodet updated ARIES-1160:
-----------------------------------
    Fix Version/s:     (was: 1.0.1-SNAPSHOT)
                   jpa-container-1.0.1

> Hibernate JPA: EntityManagerFactoryManager failed to create 
> EntityManagerFactories by Bundle.RESOLVED
> -----------------------------------------------------------------------------------------------------
>
>                 Key: ARIES-1160
>                 URL: https://issues.apache.org/jira/browse/ARIES-1160
>             Project: Aries
>          Issue Type: Bug
>          Components: JPA
>    Affects Versions: 1.0
>         Environment: OSGi
>            Reporter: Andrei Shakirin
>            Assignee: Sergey Beryozkin
>             Fix For: jpa-container-1.0.1
>
>         Attachments: ARIES-1160-2.patch, aries-jpa-1.0.0-ARIES-1160.patch, 
> org.apache.aries.jpa.container.patch
>
>
> Use case: persistence bundle is deployed in OSGi using Hibernate persistence 
> provider. Bundle contains blueprint configuration injecting EntityManager and 
> activates transaction management:
> {code}
> <blueprint  xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0";
>             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
>             xmlns:jpa="http://aries.apache.org/xmlns/jpa/v1.0.0";
>             xmlns:tx="http://aries.apache.org/xmlns/transactions/v1.0.0";>
>   <bean id="addressDao" 
> class="de.conrad.ccp.basit.customer.ecom.dao.impl.AddressDaoImpl"> 
>       <jpa:context unitname="ecom" property="entityManager"/>
>       <tx:transaction method="*" value="Required"/>
>   </bean>
>   
>   <service ref="addressDao" 
> interface="de.conrad.ccp.basit.entity.customer.ecom.dao.AddressDao" />
>   
> </blueprint>
> {code}
> Effect: bundle waiting for EntityManager service. The reason of problem is 
> runtime exception by 
> providerService.createContainerEntityManagerFactory(mpui.getPersistenceUnitInfo(),
>  mpui.getContainerProperties()).
> Exception is unfortunately not logged by Aries. The stack trace is following:
> {code}
> java.lang.IllegalStateException: The bundle 
> de.conrad.poc.customerservice-ecom/0.0.1.SNAPSHOT is not started.
>         at 
> org.apache.aries.jpa.container.unit.impl.JndiDataSource.getDs(JndiDataSource.java:61)
>         at 
> org.apache.aries.jpa.container.unit.impl.DelayedLookupDataSource.getConnection(DelayedLookupDataSource.java:36)
>         at 
> org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:70)
>         at 
> org.hibernate.engine.jdbc.internal.JdbcServicesImpl$ConnectionProviderJdbcConnectionAccess.obtainConnection(JdbcServicesImpl.java:242)
>         at 
> org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:117)
>         at 
> org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:76)
>         at 
> org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:160)
>         at 
> org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:132)
>         at 
> org.hibernate.cfg.Configuration.buildTypeRegistrations(Configuration.java:1825)
>         at 
> org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1783)
>         at 
> org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:96)
>         at 
> org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
>         at 
> org.hibernate.osgi.OsgiPersistenceProvider.createContainerEntityManagerFactory(OsgiPersistenceProvider.java:99)
>         at 
> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.createEntityManagerFactories(EntityManagerFactoryManager.java:330)
>         at 
> org.apache.aries.jpa.container.impl.EntityManagerFactoryManager.bundleStateChange(EntityManagerFactoryManager.java:175)
>         at 
> org.apache.aries.jpa.container.impl.PersistenceBundleManager.addingService(PersistenceBundleManager.java:197)
> {code}
> The problem is that call of createEntityManagerFactories() in 
> EntityManagerFactoryManager.bundleStateChange() is made by BUNDLE.RESOLVED 
> event.
> The lookup of data source is failed, because the bundle context is not yet 
> available (call by BUNDLE.RESOLVED event). The createEntityManagerFactory is 
> called again by Bundle.ACTIVE event, the problem is that emfs hash map is 
> already created, but it is empty.
> Therefore  STARTED/ACTIVE createEntityManagerFactories() is called, but makes 
> nothing.
> Attached patch contains two changes:
> a) log runtime exception throwing by 
> providerService.createContainerEntityManagerFactory
> b) adds check to empty hash map:
> if(((emfs == null) || emfs.isEmpty()) && !quiesce)
> The patch fixes the problem.
> Basically it should analyzed is call createEntityManagerFactories() really 
> necessary for Bundle.RESOLVED event. 



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to