Hi Andreas I tried setting the TCCL to both the class loader of the service context as well as the service group context before starting the threaD, but still no change. I guess this leaves me with a couple of questions.
1. Do subsequent threads spawned inherit the same TCCL? I'm pretty sure other threads are spawned by this thread which then go on to do the work. 2. How can I tell what class loader is being used? Just log whatever this.getClassLoader() returns anywhere I care? 3. Is init perhaps the wrong place to be firing this off? I originally tried in the startUp method but iirc member variables initialized here were not retained when the service methods were invoked. thanks, charles On Jan 25, 2010, at 3:57 PM, Andreas Veithen wrote: > Charles, > > That might actually explain the issue. Here is some additional info: > > * ORB.init looks up classes from the thread context class loader (I > checked that in the JRE sources). > * ServiceTCCL=composite means that Axis2 sets the TCCL to the service > class loader when entering a service method and resets it after the > method exits. > * A new thread that is being created inherits the TCCL from its parent > thread (see Javadoc of java.lang.Thread). > > However, it is possible that Axis2 doesn't take the ServiceTCCL > property into account when executing a lifecycle method (maybe that > should be considered as a bug). This would mean that your thread ends > up with the TCCL set to the Web app class loader. Since the thread is > managed by your service, you can obviously set the TCCL for that > thread to whatever you want (It will have no impact on Axis2 nor on > the servlet container). I would try to set it to the service class > loader (You should be able to get a reference to that class loader > from the parameters passed to the lifecycle method). > > Andreas