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.