[seam-issues] [JBoss JIRA] Issue Comment Edited: (SEAMCRON-15) CL issues on redeployment

Sebastian Sachtleben (JIRA) jira-events at lists.jboss.org
Fri Aug 19 08:54:18 EDT 2011


    [ https://issues.jboss.org/browse/SEAMCRON-15?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12622185#comment-12622185 ] 

Sebastian Sachtleben edited comment on SEAMCRON-15 at 8/19/11 8:53 AM:
-----------------------------------------------------------------------

I use currently the latest Seam Cron SNAPSHOT and getting on jboss as 7 while shutdown:

14:39:12,107 ERROR [org.jboss.weld.Bootstrap] (MSC service thread 1-7) Exception(s) thrown during observer of BeforeShutdown
14:39:12,107 ERROR [org.jboss.weld.Bootstrap] (MSC service thread 1-7) : java.lang.IllegalStateException: Singleton not set for ModuleClassLoader for Module "deployment.test.war:main" from Service Module Loader
	at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:71) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.weld.context.AbstractSharedContext.getBeanStore(AbstractSharedContext.java:54) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:94) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:693) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:264) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:234) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:88) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.BeforeShutdownImpl.fire(BeforeShutdownImpl.java:62) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.BeforeShutdownImpl.fire(BeforeShutdownImpl.java:50) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.WeldBootstrap.shutdown(WeldBootstrap.java:499) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.as.weld.WeldContainer.stop(WeldContainer.java:102) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.as.weld.services.WeldService.stop(WeldService.java:103) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StopTask.run(ServiceControllerImpl.java:1869)
	at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_21]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_21]
	at java.lang.Thread.run(Thread.java:619) [:1.6.0_21]

      was (Author: cosmostunes):
    I use currently the latest Seam Cron SNAPSHOT and getting on jboss as 7 while shutdown:

14:39:12,107 ERROR [org.jboss.weld.Bootstrap] (MSC service thread 1-7) Exception(s) thrown during observer of BeforeShutdown
14:39:12,107 ERROR [org.jboss.weld.Bootstrap] (MSC service thread 1-7) : java.lang.IllegalStateException: Singleton not set for ModuleClassLoader for Module "deployment.replicascene.war:main" from Service Module Loader
	at org.jboss.as.weld.services.ModuleGroupSingletonProvider$TCCLSingleton.get(ModuleGroupSingletonProvider.java:71) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.weld.context.AbstractSharedContext.getBeanStore(AbstractSharedContext.java:54) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.context.AbstractContext.get(AbstractContext.java:94) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.manager.BeanManagerImpl.getReference(BeanManagerImpl.java:693) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:264) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:234) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.AbstractContainerEvent.fire(AbstractContainerEvent.java:88) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.BeforeShutdownImpl.fire(BeforeShutdownImpl.java:62) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.events.BeforeShutdownImpl.fire(BeforeShutdownImpl.java:50) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.weld.bootstrap.WeldBootstrap.shutdown(WeldBootstrap.java:499) [weld-core-1.1.2.Final.jar:2011-07-26 15:02]
	at org.jboss.as.weld.WeldContainer.stop(WeldContainer.java:102) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.as.weld.services.WeldService.stop(WeldService.java:103) [jboss-as-weld-7.0.1.Final.jar:7.0.1.Final]
	at org.jboss.msc.service.ServiceControllerImpl$StopTask.run(ServiceControllerImpl.java:1869)
	at org.jboss.msc.service.ServiceControllerImpl$ClearTCCLTask.run(ServiceControllerImpl.java:2291)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) [:1.6.0_21]
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) [:1.6.0_21]
	at java.lang.Thread.run(Thread.java:619) [:1.6.0_21]
  
> CL issues on redeployment
> -------------------------
>
>                 Key: SEAMCRON-15
>                 URL: https://issues.jboss.org/browse/SEAMCRON-15
>             Project: Seam Cron
>          Issue Type: Bug
>            Reporter: Peter Royle
>            Assignee: Peter Royle
>             Fix For: 3.0.0.Alpha2
>
>
> Diablo-D3 gets it on every redeployment (from Eclipse to JBoss AS 6) and I have seen it once (using NetBeans redeploying after sitting overnight). The sumptom is the 'Singleton is not set' error.
> In a conversation about this Stuart Douglas explained how I can solve this:
> (04:42:51 PM) stuartdouglas: something that did just occur to me is that weld will probably not work very well in this new thread anyway, unless you set the TCCL to the correct one
> (04:43:07 PM) PeteRoyle: TCCL?
> (04:43:16 PM) stuartdouglas: Thread Context Class Loader
> (04:43:28 PM) stuartdouglas: weld uses it a lot, even for stuff that should not need it to be set
> (04:43:51 PM) stuartdouglas: so if it is not set you end up with highly informative 'Singleton is not set' errors
> (04:44:30 PM) PeteRoyle: Ahah! I've been getting those sporadically on redeployment
> (04:44:45 PM) PeteRoyle: But to do with scheduling, not asynch
> (04:44:49 PM) PeteRoyle: (so far)
> (04:45:20 PM) stuartdouglas: those are pretty much always due to the wrong class loader being set as the TCCL
> (04:45:54 PM) stuartdouglas: also the only beans that will be accessible is @ApplicationScoped and @Dependant
> (04:46:10 PM) stuartdouglas: unless you put in some non-portable code to set up the contexts
> (04:46:11 PM) PeteRoyle: Is there a typical cure for that which doesn
> (04:46:29 PM) PeteRoyle: ''t require knowledge of how classloading works?
> (04:47:34 PM) stuartdouglas: not really, it depends where you get the errors, it should only be a problem when you start trying to use threads that you have spawned yourself to interact with weld
> (04:48:31 PM) stuartdouglas: for @Async the solution is to set the TCCL to the same as the original threads TCCL, and set it back in a finally block
> (04:49:11 PM) stuartdouglas: and it should really be run as a PriviliedAction, because a security manager might not let you set it
> (04:50:22 PM) marekn [~mnovotny at nat/redhat/x-wgsrrhabedyogdbb] entered the room.
> (04:50:39 PM) PeteRoyle: I get what you're saying, but I'm not sure how to do that stuff
> (04:50:54 PM) PeteRoyle: (setting the TCCL and running as PrivAction)
> (04:51:57 PM) stuartdouglas: https://github.com/stuartwdouglas/jboss-as/blob/master/weld/src/main/java/org/jboss/as/weld/WeldContainer.java#L77
> (04:52:11 PM) stuartdouglas: https://github.com/stuartwdouglas/jboss-as/blob/master/weld/src/main/java/org/jboss/as/weld/SecurityActions.java
> (04:52:43 PM) stuartdouglas: note that SecurityActions is package private, otherwise any class can use it to set the TCCL
> (04:53:42 PM) stuartdouglas: basically it just wraps Thread.currentThread().set/getContextClassLoader
> (04:54:38 PM) PeteRoyle: Should I copy this code into Cron, (or Solder) to make it portable?
> (04:55:09 PM) stuartdouglas: it needs to be copied each time
> (04:55:38 PM) stuartdouglas: otherwise any code can get/set the TCCL
> (04:56:02 PM) kevinpollet [~kevinpoll at 217.112.54.72] entered the room.
> (04:56:56 PM) PeteRoyle: OK so do I set the TCCL as the first thing in the new thread?
> (04:56:59 PM) amitev [~amitev at 212.25.36.84] entered the room.
> (04:57:06 PM) stuartdouglas: yes
> (04:57:11 PM) PeteRoyle: (frm within the thread, say inside the run() method)?
> (04:57:17 PM) stuartdouglas: yes
> (04:57:34 PM) PeteRoyle: and unset it from a finally block from the original thread which screate the new thread
> (04:57:52 PM) PeteRoyle: screate=created
> (04:58:21 PM) stuartdouglas: yes, although you can just set it to null rather than saving and restoring the existing TCCL
> (04:59:01 PM) stuartdouglas: otherwise if you are using a thread pool the TCCL can hang around after redeployment, which results in a memory leak
> (04:59:47 PM) PeteRoyle: actually it looks like all the examples in WeldContainer do both those things in the same thread. Can I unset the TCCL at the end of the run() method (in a finally)?
> (04:59:58 PM) maschmid [~maschmid at nat/redhat/x-fjnivohxvbmhnpfw] entered the room.
> (05:00:00 PM) stuartdouglas: yes
> (05:00:06 PM) PeteRoyle: ok
> (05:00:33 PM) stuartdouglas: oops, sorry, I mis-read your earlier question
> (05:00:50 PM) stuartdouglas: you should only manipulate it inside the run method
> (05:00:57 PM) PeteRoyle: ok gotchya

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


More information about the seam-issues mailing list