[JBoss Transactions Development] - Asynchronicity and transaction context propagation
by chtimi2
This question is more general than specifically about JBoss TM, but I thought the developers of JBoss TM might have an idea about it. It is about whether propagating the transaction context between different threads in asynchronous invocations is possible or not. It is hard to find specific information about this topic, some technologies say specifically that they don't implement it but they never say why.
To give some context i'm studying the integration of QoS (Quality of Service) into a component-model based framework.
The components expose used and provided services, produced and consumed events, and used and provided parameters. They live inside a light container (the component manager) that manages their lifecycle and plugs the QoS into service/event/parameter invocations by AOP.
The QoS include transactional behaviour and asynchronicity (we already have implemented Asynchronous Method Invocation and Asynchronous Method Dispatch), so i have to see if they are "orthogonal" or if they restrict each other, both in current technologies and in what is theoretically possible (and if impossible why).
My question is: is there a fundamental, intrinsic incompatibility between asynchronicity and the propagation of the transaction context?
Even in the (relatively recent) EJB 3.1 spec, it is mentioned that for the new @Asynchronous methods, the transaction context will not be propagated from the caller to the callee (but they don't say why).
But is it really an absolute impossibility?
After all during a remote transactional invocation, the transaction context is propagated to a different thread (from the client thread to the server thread) by rmi , so the transaction context doesn't have to be strictly thread-local.
Of course the service that is invoked asynchronously would/might return before committing, but that is not always unacceptable (like caches replicate their changes asynchronously after a service call), and it wouldn't prevent it from sharing the same transaction context.
So if there is an impossibility it doesn't come from sharing the transactional context between threads but from asynchronicity. What do you think?
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255078#4255078
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255078
16 years, 6 months
[JBoss Microcontainer Development POJO Server] - Re: integration with the Papaki annotation indexer/repositor
by emuckenhuber
"alesj" wrote : "emuckenhuber" wrote : I guess it could also make sense to see if we can reuse this annotation index in MDR as well?
| |
| Yup.
| I guess AE really belongs into Papaki. At least the spi/api/interfaces.
| (and afair my code, it doesn't have any Deployers dependencies)
|
It most probably should be part of the AS integration, as we only add it to the DU we don't need the deployers to depend on it as well.
"alesj" wrote :
| "emuckenhuber" wrote :
| | Beside that we would need a better programmatic API for excluding resources from scanning. I think this is actually the most important piece we have to do, as not doing any annotation scanning at all would most probably be faster than indexing :)
| |
| | So we would need to create a ScanningMetaData when e.g. JBossEjbMetaData.isMetaDataComplete(). This then would exclude all non EE5 deployments from annotation scanning without a separate jboss-scanning.xml. As far as i can remember for servlet 3.0 we would need be able to exclude resources on .jar basis as well.
| This should all be a part of ScanningMetaData - some helper class; e.g. like BMDBuilder --> SMDBuilder.
| It would then be trivial to build ScanningMetaData and place it into DU.
|
| And then PapakiDeployer should take ScanningMetaData into an account while building AE.
Yeah something simple like that should be enough.
We could also add some simple deployers to the 5_x branch - at least generating a empty ScanningMetaData for isMetaDataComplete() does not require Papaki. This could speed up legacy deployments quite a bit, as we wouldn't process the already scanned annotations anyway.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255072#4255072
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255072
16 years, 6 months
[JBoss Microcontainer Development POJO Server] - Re: integration with the Papaki annotation indexer/repositor
by alesj
"emuckenhuber" wrote : I guess it could also make sense to see if we can reuse this annotation index in MDR as well?
|
Yup.
I guess AE really belongs into Papaki. At least the spi/api/interfaces.
(and afair my code, it doesn't have any Deployers dependencies)
"emuckenhuber" wrote :
| Beside that we would need a better programmatic API for excluding resources from scanning. I think this is actually the most important piece we have to do, as not doing any annotation scanning at all would most probably be faster than indexing :)
|
| So we would need to create a ScanningMetaData when e.g. JBossEjbMetaData.isMetaDataComplete(). This then would exclude all non EE5 deployments from annotation scanning without a separate jboss-scanning.xml. As far as i can remember for servlet 3.0 we would need be able to exclude resources on .jar basis as well.
This should all be a part of ScanningMetaData - some helper class; e.g. like BMDBuilder --> SMDBuilder.
It would then be trivial to build ScanningMetaData and place it into DU.
And then PapakiDeployer should take ScanningMetaData into an account while building AE.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255063#4255063
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255063
16 years, 6 months
[JBoss Microcontainer Development POJO Server] - Re: Servlet 3.0 annotation processing requirements
by remy.maucherat@jboss.com
"alesj" wrote : "remy.maucherat(a)jboss.com" wrote :
| | a) Per JAR annotation scanning. Due to the fact that the order impacts
| | annotations, the deployer should produce a set of attachements keyed by
| | JAR name for web annotations (like what happens for the web fragments,
| | so that way I can merge the fragment metadata for a given jar, then
| | merge the annotation metadata, then move to the next jar in the order).
| |
| This one doesn't look hard to do.
| As we do deployer per all deployment units.
| Meaning all you need to do is create 2 new deployers:
| * one that would collect the fragment info
| * the second one that would apply it
|
I am doing the fragment merging in MergedJBossWebMetaDataDeployer. However, I don't see any annotation meta data keyed per jar at the moment ;) I think I could use a hand there.
"alesj" wrote :
| "remy.maucherat(a)jboss.com" wrote :
| | b) The ServletContainerInitializer feature. I have no idea how to handle
| | the @HandlesTypes annotation (reminder: the annotation contains a list
| | of classes, and I need to build a set of Class that are in the webapp
| | that implment, extend, or are annotated by any item in the list of
| | classes).
| |
| Yeah, this one sounds pita. Another performance bottleneck on the horizon.
|
| I see 3 ways of doing this:
| * part of generic scanning (== preparing info for any resource); hence only a single scan
| * on-demand checking (+ some caching); can be done now, but it's slow
| * another new Jesper's Papaki project for class info (need to check if this could be part of Reflect)
|
I am in complete agreement that HandlesTypes is the biggest Servlet 3.0 issue. Since a scan is already done somewhere, it's probably best for speed if it can also handle the HandlesTypes requirement. I don't know if the first or third option would work best here though.
That feature is designed for things like easy webservices integration.
"alesj" wrote :
| "remy.maucherat(a)jboss.com" wrote :
| | c) The access control annotations were added to Servlet 3.0, and classes that extend HttpServlet can have these annotations as method level annotations (on doGet, doPost, etc; actually all the doXXX methods defined in HttpServlet).
| |
| Easy. Simple AnnotationEnv usage.
Hum, ok. I could use some help too. My question could be if I should continue using the current stuff. There is the AnnotationMetaDataDeployer, which uses a creator from the metadata-web project. This could be extended, but Alexey told me to not touch it, since this was dead stuff. So I'm totally confused.
This is far less urgent than item a). At the moment, Catalina processes these annotations just fine.
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255018#4255018
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255018
16 years, 6 months
[JBoss Microcontainer Development] - Potential deadlock in ClassLoaderManager
by thomas.diesler@jboss.com
This code intermittently deadlocks
ClassLoaderManager:126
| synchronized (toTaskList)
| {
| toTaskList.add(0, threadTask);
| loadTask.nextEvent();
| toTaskList.notify();
| }
|
I sometimes see this when running the JBoss OSGi HttpServiceTestCase. The Apache HttpService impl seems to load classes from its own thread.
| "Jetty HTTP Service Launcher" prio=10 tid=0x821f8c00 nid=0x4447 runnable [0x81bfa000]
| java.lang.Thread.State: RUNNABLE
| at java.util.Collections$SynchronizedList.add(Collections.java:1822)
| - locked <0x95a17ae8> (a java.util.Collections$SynchronizedList)
| at org.jboss.classloader.spi.base.ClassLoaderManager.unregisterLoaderThread(ClassLoaderManager.java:128)
| - locked <0x95a17ae8> (a java.util.Collections$SynchronizedList)
| - locked <0x95a17ae8> (a java.util.Collections$SynchronizedList)
| at org.jboss.classloader.spi.base.BaseClassLoader.unlock(BaseClassLoader.java:1082)
| - locked <0x950741b0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:808)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x950741b0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x950741b0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.Class.forName0(Native Method)
| at java.lang.Class.forName(Class.java:247)
| at org.jboss.classloader.plugins.loader.ClassLoaderToLoaderAdapter.loadClass(ClassLoaderToLoaderAdapter.java:172)
| at org.jboss.classloader.spi.ClassLoaderDomain.loadClassFromParent(ClassLoaderDomain.java:352)
| at org.jboss.classloader.spi.ClassLoaderDomain.loadClassBefore(ClassLoaderDomain.java:307)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:251)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.defineClass1(Native Method)
| at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
| at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:63)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:575)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:534)
| at java.security.AccessController.doPrivileged(Native Method)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:533)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:510)
| at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
| at org.jboss.classloader.spi.filter.FilteredDelegateLoader.loadClass(FilteredDelegateLoader.java:131)
| at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
| at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)
| at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.defineClass1(Native Method)
| at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
| at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:63)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:575)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:534)
| at java.security.AccessController.doPrivileged(Native Method)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:533)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:510)
| at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
| at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
| at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)
| at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x95409ce8> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.apache.felix.http.jetty.Activator.initializeHTTP(Activator.java:403)
| at org.apache.felix.http.jetty.Activator.initializeJetty(Activator.java:373)
| at org.apache.felix.http.jetty.Activator.startJetty(Activator.java:205)
| at org.apache.felix.http.jetty.Activator.run(Activator.java:248)
| at java.lang.Thread.run(Thread.java:619)
|
| "HDScanner" prio=10 tid=0x81940400 nid=0x4446 waiting on condition [0x81f5c000]
| java.lang.Thread.State: TIMED_WAITING (parking)
| at sun.misc.Unsafe.park(Native Method)
| - parking to wait for <0x953b61b0> (a java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject)
| at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:198)
| at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:1963)
| at java.util.concurrent.DelayQueue.take(DelayQueue.java:164)
| at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:583)
| at java.util.concurrent.ScheduledThreadPoolExecutor$DelayedWorkQueue.take(ScheduledThreadPoolExecutor.java:576)
| at java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
| at java.lang.Thread.run(Thread.java:619)
|
| "JBoss System Threads(1)-1" daemon prio=10 tid=0x82aac000 nid=0x4445 runnable [0x81fad000]
| java.lang.Thread.State: RUNNABLE
| at java.net.PlainSocketImpl.socketAccept(Native Method)
| at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
| - locked <0x95341158> (a java.net.SocksSocketImpl)
| at java.net.ServerSocket.implAccept(ServerSocket.java:453)
| at java.net.ServerSocket.accept(ServerSocket.java:421)
| at org.jnp.server.Main$AcceptHandler.run(Main.java:597)
| at org.jboss.util.threadpool.RunnableTaskWrapper.run(RunnableTaskWrapper.java:147)
| at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
| at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
| at java.lang.Thread.run(Thread.java:619)
|
| "GC Daemon" daemon prio=10 tid=0x82143c00 nid=0x4444 in Object.wait() [0x81ffe000]
| java.lang.Thread.State: TIMED_WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x9505fda8> (a sun.misc.GC$LatencyLock)
| at sun.misc.GC$Daemon.run(GC.java:100)
| - locked <0x9505fda8> (a sun.misc.GC$LatencyLock)
|
| "RMI Reaper" prio=10 tid=0x815f7800 nid=0x4443 in Object.wait() [0x8299b000]
| java.lang.Thread.State: WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x9505e188> (a java.lang.ref.ReferenceQueue$Lock)
| at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
| - locked <0x9505e188> (a java.lang.ref.ReferenceQueue$Lock)
| at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
| at sun.rmi.transport.ObjectTable$Reaper.run(ObjectTable.java:333)
| at java.lang.Thread.run(Thread.java:619)
|
| "RMI TCP Accept-1098" daemon prio=10 tid=0x81ac7000 nid=0x4442 runnable [0x829ec000]
| java.lang.Thread.State: RUNNABLE
| at java.net.PlainSocketImpl.socketAccept(Native Method)
| at java.net.PlainSocketImpl.accept(PlainSocketImpl.java:390)
| - locked <0x94e78438> (a java.net.SocksSocketImpl)
| at java.net.ServerSocket.implAccept(ServerSocket.java:453)
| at java.net.ServerSocket.accept(ServerSocket.java:421)
| at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.executeAcceptLoop(TCPTransport.java:369)
| at sun.rmi.transport.tcp.TCPTransport$AcceptLoop.run(TCPTransport.java:341)
| at java.lang.Thread.run(Thread.java:619)
|
| "Timer-Log4jService" daemon prio=10 tid=0x8142d400 nid=0x4441 in Object.wait() [0x82d9c000]
| java.lang.Thread.State: TIMED_WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x94e77e20> (a java.util.TaskQueue)
| at java.util.TimerThread.mainLoop(Timer.java:509)
| - locked <0x94e77e20> (a java.util.TaskQueue)
| at java.util.TimerThread.run(Timer.java:462)
|
| "ZipFile Lock Reaper" daemon prio=10 tid=0x82ebb800 nid=0x443f in Object.wait() [0x82dfe000]
| java.lang.Thread.State: TIMED_WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x946c7a10> (a java.util.TaskQueue)
| at java.util.TimerThread.mainLoop(Timer.java:509)
| - locked <0x946c7a10> (a java.util.TaskQueue)
| at java.util.TimerThread.run(Timer.java:462)
|
| "Thread-2" prio=10 tid=0x83113800 nid=0x443e in Object.wait() [0x833b2000]
| java.lang.Thread.State: WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x942aa6e0> (a java.util.Collections$SynchronizedList)
| at java.lang.Object.wait(Object.java:485)
| at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:205)
| - locked <0x942aa6e0> (a java.util.Collections$SynchronizedList)
| at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.defineClass1(Native Method)
| at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
| at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:63)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:575)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:534)
| at java.security.AccessController.doPrivileged(Native Method)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:533)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:510)
| at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
| at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
| at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)
| at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.defineClass1(Native Method)
| at java.lang.ClassLoader.defineClass(ClassLoader.java:621)
| at org.jboss.classloader.spi.base.BaseClassLoader.access$200(BaseClassLoader.java:63)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:575)
| at org.jboss.classloader.spi.base.BaseClassLoader$2.run(BaseClassLoader.java:534)
| at java.security.AccessController.doPrivileged(Native Method)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:533)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassLocally(BaseClassLoader.java:510)
| at org.jboss.classloader.spi.base.BaseDelegateLoader.loadClass(BaseDelegateLoader.java:134)
| at org.jboss.classloader.spi.base.ClassLoadingTask$ThreadTask.run(ClassLoadingTask.java:452)
| at org.jboss.classloader.spi.base.ClassLoaderManager.nextTask(ClassLoaderManager.java:251)
| at org.jboss.classloader.spi.base.ClassLoaderManager.process(ClassLoaderManager.java:150)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:265)
| at org.jboss.osgi.plugins.facade.classloading.OSGiClassLoaderDomain.loadClass(OSGiClassLoaderDomain.java:84)
| at org.jboss.classloader.spi.base.BaseClassLoaderDomain.loadClass(BaseClassLoaderDomain.java:1119)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClassFromDomain(BaseClassLoader.java:801)
| at org.jboss.classloader.spi.base.BaseClassLoader.loadClass(BaseClassLoader.java:444)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
| at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
| - locked <0x957501c0> (a org.jboss.classloader.spi.base.BaseClassLoader)
| at org.jboss.osgi.webconsole.internal.WebConsoleActivator.start(WebConsoleActivator.java:41)
| at org.jboss.osgi.plugins.facade.bundle.OSGiBundleState.startInternal(OSGiBundleState.java:300)
| at org.jboss.osgi.plugins.deployers.bundle.OSGiBundleActivatorDeployer.deploy(OSGiBundleActivatorDeployer.java:49)
| at org.jboss.osgi.plugins.deployers.bundle.OSGiBundleActivatorDeployer.deploy(OSGiBundleActivatorDeployer.java:1)
| at org.jboss.deployers.spi.deployer.helpers.AbstractSimpleRealDeployer.internalDeploy(AbstractSimpleRealDeployer.java:62)
| at org.jboss.deployers.spi.deployer.helpers.AbstractRealDeployer.deploy(AbstractRealDeployer.java:50)
| at org.jboss.deployers.plugins.deployers.DeployerWrapper.deploy(DeployerWrapper.java:171)
| at org.jboss.deployers.plugins.deployers.DeployersImpl.doDeploy(DeployersImpl.java:1440)
| at org.jboss.deployers.plugins.deployers.DeployersImpl.doInstallParentFirst(DeployersImpl.java:1158)
| at org.jboss.deployers.plugins.deployers.DeployersImpl.install(DeployersImpl.java:1099)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985)
| at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:823)
| at org.jboss.dependency.plugins.AbstractController.change(AbstractController.java:553)
| at org.jboss.deployers.plugins.deployers.DeployersImpl.change(DeployersImpl.java:643)
| at org.jboss.osgi.plugins.deployers.bundle.OSGiDeployersWrapper.change(OSGiDeployersWrapper.java:171)
| at org.jboss.deployers.plugins.main.MainDeployerImpl.change(MainDeployerImpl.java:755)
| at org.jboss.osgi.plugins.deployers.bundle.OSGiDeployersWrapper.afterDeployersProcess(OSGiDeployersWrapper.java:157)
| at org.jboss.osgi.plugins.deployers.bundle.OSGiDeployersWrapper.process(OSGiDeployersWrapper.java:102)
| at org.jboss.deployers.plugins.main.MainDeployerImpl.process(MainDeployerImpl.java:702)
| at org.jboss.system.server.profileservice.repository.MainDeployerAdapter.process(MainDeployerAdapter.java:117)
| at org.jboss.system.server.profileservice.repository.ProfileDeployAction.install(ProfileDeployAction.java:70)
| at org.jboss.system.server.profileservice.repository.AbstractProfileAction.install(AbstractProfileAction.java:53)
| at org.jboss.system.server.profileservice.repository.AbstractProfileService.install(AbstractProfileService.java:403)
| at org.jboss.dependency.plugins.AbstractControllerContext.install(AbstractControllerContext.java:348)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:1633)
| at org.jboss.dependency.plugins.AbstractController.incrementState(AbstractController.java:935)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:1083)
| at org.jboss.dependency.plugins.AbstractController.resolveContexts(AbstractController.java:985)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:775)
| at org.jboss.dependency.plugins.AbstractController.install(AbstractController.java:540)
| at org.jboss.system.server.profileservice.repository.AbstractProfileService.registerProfile(AbstractProfileService.java:308)
| at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:258)
| at org.jboss.system.server.profileservice.ProfileServiceBootstrap.start(ProfileServiceBootstrap.java:97)
| at org.jboss.bootstrap.impl.base.server.AbstractServer.startBootstraps(AbstractServer.java:851)
| at org.jboss.bootstrap.impl.base.server.AbstractServer$StartServerTask.run(AbstractServer.java:432)
| - locked <0x945cba98> (a org.jboss.bootstrap.impl.as.server.JBossASServerImpl)
| at java.lang.Thread.run(Thread.java:619)
|
| "DestroyJavaVM" prio=10 tid=0xb7407000 nid=0x4430 waiting on condition [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "main" prio=10 tid=0xb74eac00 nid=0x443d in Object.wait() [0x8349c000]
| java.lang.Thread.State: WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x945ef6d8> (a java.lang.Thread)
| at java.lang.Thread.join(Thread.java:1143)
| - locked <0x945ef6d8> (a java.lang.Thread)
| at java.lang.Thread.join(Thread.java:1196)
| at org.jboss.bootstrap.impl.base.server.AbstractServer.start(AbstractServer.java:357)
| at org.jboss.bootstrap.impl.mc.server.AbstractMCServerBase.start(AbstractMCServerBase.java:238)
| at org.jboss.Main.boot(Main.java:386)
| at org.jboss.Main$1.run(Main.java:715)
| at java.lang.Thread.run(Thread.java:619)
|
| "Low Memory Detector" daemon prio=10 tid=0xb74b1400 nid=0x443b runnable [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "CompilerThread1" daemon prio=10 tid=0xb74af400 nid=0x443a waiting on condition [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "CompilerThread0" daemon prio=10 tid=0xb74adc00 nid=0x4439 waiting on condition [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "JDWP Event Helper Thread" daemon prio=10 tid=0xb74ac000 nid=0x4438 runnable [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "JDWP Transport Listener: dt_socket" daemon prio=10 tid=0xb74a9c00 nid=0x4437 runnable [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "Signal Dispatcher" daemon prio=10 tid=0xb74a2000 nid=0x4436 waiting on condition [0x00000000]
| java.lang.Thread.State: RUNNABLE
|
| "Finalizer" daemon prio=10 tid=0xb7493000 nid=0x4435 in Object.wait() [0x83b7d000]
| java.lang.Thread.State: WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x944aa858> (a java.lang.ref.ReferenceQueue$Lock)
| at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
| - locked <0x944aa858> (a java.lang.ref.ReferenceQueue$Lock)
| at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
| at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)
|
| "Reference Handler" daemon prio=10 tid=0xb7491c00 nid=0x4434 in Object.wait() [0x837b4000]
| java.lang.Thread.State: WAITING (on object monitor)
| at java.lang.Object.wait(Native Method)
| - waiting on <0x944aa810> (a java.lang.ref.Reference$Lock)
| at java.lang.Object.wait(Object.java:485)
| at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
| - locked <0x944aa810> (a java.lang.ref.Reference$Lock)
|
| "VM Thread" prio=10 tid=0xb748dc00 nid=0x4433 runnable
|
| "GC task thread#0 (ParallelGC)" prio=10 tid=0xb740e800 nid=0x4431 runnable
|
| "GC task thread#1 (ParallelGC)" prio=10 tid=0xb740fc00 nid=0x4432 runnable
|
| "VM Periodic Task Thread" prio=10 tid=0xb74b3000 nid=0x443c waiting on condition
|
| JNI global references: 4868
|
| Heap
| PSYoungGen total 24896K, used 12027K [0xb07f0000, 0xb2580000, 0xb40d0000)
| eden space 21440K, 56% used [0xb07f0000,0xb13aad78,0xb1ce0000)
| from space 3456K, 0% used [0xb2220000,0xb2224000,0xb2580000)
| to space 4416K, 0% used [0xb1ce0000,0xb1ce0000,0xb2130000)
| PSOldGen total 116544K, used 26148K [0x940d0000, 0x9b2a0000, 0xb07f0000)
| object space 116544K, 22% used [0x940d0000,0x95a59090,0x9b2a0000)
| PSPermGen total 36736K, used 19572K [0x840d0000, 0x864b0000, 0x940d0000)
| object space 36736K, 53% used [0x840d0000,0x853ed3b0,0x864b0000)
|
|
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255010#4255010
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255010
16 years, 6 months
[JBoss Microcontainer Development] - Re: Module adds invalid delegates
by thomas.diesler@jboss.com
I changed the code such that it adds FilteredDelegateLoaders
| // Only add a the delegate if this is not a self-dependency
| if (iDependOnModule != module)
| {
| // If we are connecting to another module we collect the imported package names per delegate
| if (requirement instanceof PackageRequirement)
| {
| ClassLoaderPolicy policy = delegate.getPolicy();
| List<String> packageNames = delegateToRequiredPackages.get(policy);
| if (packageNames == null)
| {
| packageNames = new ArrayList<String>();
| delegateToRequiredPackages.put(policy, packageNames);
| }
|
| PackageRequirement packageRequirement = (PackageRequirement)requirement;
| packageNames.add(packageRequirement.getName());
| }
| else
| {
| delegates.add(delegate);
| }
| }
|
|
| // Add FilteredDelegateLoaders for all collected package requirements
| for (Entry<ClassLoaderPolicy, List<String>> entry : delegateToRequiredPackages.entrySet())
| {
| PackageClassFilter filter = PackageClassFilter.createPackageClassFilter(entry.getValue());
| delegates.add(new FilteredDelegateLoader(entry.getKey(), filter));
| }
|
For this I needed to change the visibility of DelegateLoader.getPolicy() to public
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255008#4255008
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255008
16 years, 6 months
[JBoss Microcontainer Development] - Module adds invalid delegates
by thomas.diesler@jboss.com
https://jira.jboss.org/jira/browse/JBOSGI-151
Consider this use case
ExportImportPackageUnitTestCase.testSelfImportPackage
| //Bundle-Name: BundleB
| //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleB
| //Export-Package: org.jboss.test.osgi.classloader.support.b
| //Import-Package: org.jboss.test.osgi.classloader.support.a
|
| //Bundle-Name: BundleA
| //Bundle-Version: 1.0.0
| //Bundle-SymbolicName: org.jboss.test.osgi.classloader.bundleA
| //Export-Package: org.jboss.test.osgi.classloader.support.a, org.jboss.test.osgi.classloader.support.b
| //Import-Package: org.jboss.test.osgi.classloader.support.a, org.jboss.test.osgi.classloader.support.b
|
BundleB imports PackageA from BundleA, but *not* PackageB.
Classes in PackageB are expected to get loaded from the bundle that the class load is initiated from.
| bundleB.start();
| assertEquals("Bundle ACTIVE", Bundle.ACTIVE, bundleB.getState());
|
| // BundleA is expected to resolve when BundleB gets started
| assertEquals("Bundle RESOLVED", Bundle.RESOLVED, bundleA.getState());
| assertLoadClass(bundleA, A.class, bundleA);
| assertLoadClass(bundleA, B.class, bundleA);
|
| // BundleB imports A from BundleA
| assertLoadClass(bundleB, A.class, bundleA);
|
| // BundleB does not import B
| assertLoadClass(bundleB, B.class, bundleB);
|
---------------------
The code in Module.addDelegates(...) incorrectly adds the DelegateLoader from the dependent module irrespectively of the packages that are actually being imported. this effectively makes makes all the packages from BundleA visible to BundleB
| Module other = item.getModule();
| DelegateLoader delegate = iDependOnModule.getDelegateLoader(other, requirement);
|
| // Check for re-export by the module
| if (requirement.wantReExports())
| addDelegates(iDependOnModule, delegates, dynamic, visited, true);
|
| // We want a module's re-exports (i.e. part of its imports) before the module itself
| if (delegate != null)
| delegates.add(delegate);
|
View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4255007#4255007
Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4255007
16 years, 6 months