Hi,

This question doesn't directly relate to Aries, but perhaps you have ideas what 
happens here on the base of your OSGi experience.
I use Aries together with Hybernate in Karaf container configured with Equinox 
OSGi implementation.

By load test I encounter a lot of threads in blocked status with following 
stack trace:

ArticlePAAThread id=25831 state=RUNNABLE
    at 
org.eclipse.osgi.container.ModuleRevisions.getCurrentRevision(ModuleRevisions.java:82)
    at org.eclipse.osgi.container.Module.getCurrentRevision(Module.java:226)
    at 
org.eclipse.osgi.internal.loader.sources.PackageSource.getBundleLoader(PackageSource.java:190)
    at 
org.eclipse.osgi.internal.loader.sources.PackageSource.isServiceAssignableTo(PackageSource.java:125)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.isAssignableTo(ServiceRegistrationImpl.java:655)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceReferenceImpl.isAssignableTo(ServiceReferenceImpl.java:169)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.isAssignableTo(ServiceRegistry.java:1143)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getServiceReferences(ServiceRegistry.java:318)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getServiceReference(ServiceRegistry.java:382)
    at 
org.eclipse.osgi.internal.framework.BundleContextImpl.getServiceReference(BundleContextImpl.java:561)
    at 
org.hibernate.osgi.OsgiJtaPlatform.retrieveTransactionManager(OsgiJtaPlatform.java:54)
    at 
org.hibernate.osgi.OsgiJtaPlatform.canRegisterSynchronization(OsgiJtaPlatform.java:72)
    at 
org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.attemptToRegisterJtaSync(TransactionCoordinatorImpl.java:247)
    at 
org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.pulse(TransactionCoordinatorImpl.java:284)
    at 
org.hibernate.ejb.AbstractEntityManagerImpl.joinTransaction(AbstractEntityManagerImpl.java:1212)
    at 
org.hibernate.ejb.AbstractEntityManagerImpl.postInit(AbstractEntityManagerImpl.java:178)
    at org.hibernate.ejb.EntityManagerImpl.<init>(EntityManagerImpl.java:89)
    at 
org.hibernate.ejb.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:193)
    at sun.reflect.GeneratedMethodAccessor137.invoke(Unknown Source)
    at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at 
org.apache.aries.jpa.container.quiesce.impl.QuiesceEMFHandler.invoke(QuiesceEMFHandler.java:58)
    at com.sun.proxy.$Proxy130.createEntityManager(Unknown Source)
    at 
org.apache.aries.jpa.container.context.transaction.impl.JTAPersistenceContextRegistry.getCurrentPersistenceContext(JTAPersistenceContextRegistry.java:152)
    at 
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManagerHandler.getPersistenceContext(JTAEntityManagerHandler.java:111)
    at 
org.apache.aries.jpa.container.context.transaction.impl.JTAEntityManagerHandler.invoke(JTAEntityManagerHandler.java:182)
    at com.sun.proxy.$Proxy131.unwrap(Unknown Source)
    at org.testdao.AbstractDao.getSession(AbstractDao.java:29)

The same happens by criteria search:
ArticlePAAThread id=2213 state=BLOCKED
    - waiting to lock <0x0c2ec250> (a java.lang.Object)
     owned by qtp537894753-24736 id=24736
    at 
org.eclipse.osgi.container.ModuleRevisions.getCurrentRevision(ModuleRevisions.java:82)
    at org.eclipse.osgi.container.Module.getCurrentRevision(Module.java:226)
    at 
org.eclipse.osgi.internal.loader.sources.PackageSource.getBundleLoader(PackageSource.java:190)
    at 
org.eclipse.osgi.internal.loader.sources.PackageSource.isServiceAssignableTo(PackageSource.java:128)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.isAssignableTo(ServiceRegistrationImpl.java:655)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceReferenceImpl.isAssignableTo(ServiceReferenceImpl.java:169)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.isAssignableTo(ServiceRegistry.java:1143)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getServiceReferences(ServiceRegistry.java:318)
    at 
org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getServiceReference(ServiceRegistry.java:382)
    at 
org.eclipse.osgi.internal.framework.BundleContextImpl.getServiceReference(BundleContextImpl.java:561)
    at 
org.hibernate.osgi.OsgiJtaPlatform.retrieveTransactionManager(OsgiJtaPlatform.java:54)
    at 
org.hibernate.engine.transaction.internal.jta.CMTTransaction.transactionManager(CMTTransaction.java:57)
    at 
org.hibernate.engine.transaction.internal.jta.CMTTransaction.getTransactionManager(CMTTransaction.java:61)
    at 
org.hibernate.engine.transaction.internal.jta.CMTTransaction.isActive(CMTTransaction.java:115)
    at 
org.hibernate.engine.transaction.internal.TransactionCoordinatorImpl.isTransactionInProgress(TransactionCoordinatorImpl.java:167)
    at org.hibernate.internal.SessionImpl.afterOperation(SessionImpl.java:476)
    at org.hibernate.internal.SessionImpl.list(SessionImpl.java:1595)
    at org.hibernate.internal.CriteriaImpl.list(CriteriaImpl.java:374)
    at org. dao.impl.MyDaoImpl.getPrice (MyDaoImpl.java:40)

Any idea why the 
org.eclipse.osgi.container.ModuleRevisions.getCurrentRevision(ModuleRevisions.java:82)
 blocks threads accessing DAO?
Are there any workarounds / things I can check?

By googling I found a bug in eclipse forum, but regarding Logging: 
https://bugs.eclipse.org/bugs/show_bug.cgi?id=502360 

Regards,
Andrei. 

Reply via email to