It's just a thread spawned from the lifecycle init method using new Thread()… The general idea is we have an existing code base that used to be launched as commandline apps. I am now launching them in a thread from my web services, and "web enabling" them. Admittedly there were not designed or built to be used this way, but I don't think there should be anything stopping me from doing this.
The Corba initialization occurs in the client.corba.* packages, but they are just calling org.omg.CORBA.ORB.init which is doing the class loading and thats from rt.jar in the java distro afaik. The ORB loaded is a configurable option which is why it uses the class loader (IE not in my control). I got past this one by putting the corba.jar into WEB-INF/lib. The SQLException I describe below occurs when a call is made to DriveManager.getConnection(..) and works fine loading a single service/.aar charles On Jan 25, 2010, at 3:12 PM, Andreas Veithen wrote: > Charles, > > According to the stack trace you posted, the error occurs inside a > thread that is neither managed by the servlet container, nor by Axis2: > > 13:38:58 DEBUG- Stack trace: org.omg.CORBA.INITIALIZE: can't > instantiate default ORB implementation org.jacorb.orb.ORB vmcid: 0x0 > minor code: 0 completed: No > at org.omg.CORBA.ORB.create_impl(ORB.java:297) > at org.omg.CORBA.ORB.init(ORB.java:336) > at client.corba.BaseCORBAApp.initCORBA(BaseCORBAApp.java:134) > at > client.corba.BaseCORBAService.startService(BaseCORBAService.java:100) > at > client.project.dcol.publish.corba.WebServiceDataCollectionService.webInit(WebServiceDataCollectionService.java:170) > at > client.project.dcol.GDPI.ServiceBase$ServiceThread.run(ServiceBase.java:318) > at java.lang.Thread.run(Thread.java:619) > > How and where is this thread created? > > Andreas > > On Mon, Jan 25, 2010 at 20:23, Charles Galpin <cgal...@lhsw.com> wrote: >> Thanks Andreas >> >> I added this to both services being loaded, rebuilt and ran, but no change. >> >> The composite class loader was one of the options described in Amil's blog >> and as I understand it, it is supposed to use both the TCCL and the service >> class loader. But I guess I still don't understand the class loading because >> this jar is in all the places the class loaders should be looking so I don't >> see how it matters which one it uses. >> >> I also tried the "EnableChildFirstClassLoading" parameter as well but no >> help. >> >> Thanks, >> charles >> >> On Jan 25, 2010, at 1:53 PM, Andreas Veithen wrote: >> >>> Try adding the following parameter on the service: >>> >>> <parameter name="ServiceTCCL" locked="false">composite</parameter> >>> >>> Andreas >>> >>> On Mon, Jan 25, 2010 at 18:22, Charles Galpin <cgal...@lhsw.com> wrote: >>>> Hi All >>>> I am still running into problems with this. I previously moved all the >>>> jars >>>> I needed into the WEB-INF/lib directory and was able to continue working. >>>> But as I add more services (more .aar files) I am now running into strange >>>> unpredictable differences that I do not understand. >>>> For example, I have two services packaged in their own .aar files and if >>>> deployed independently they run just fine. Simply deploying both together >>>> causes the second one loaded to have mysterious problems like a >>>> java.sql.SQLException "no suitable driver found for jdbc:sqlserver://.." >>>> when the sql3jdbc jar file is in both the .aar and WEB-INF/lib directory >>>> and >>>> (and as I said works fine standalone). >>>> Does anyone have any advice on how to get my services to run together >>>> happily? Assume I am not concerned with isolating each service from each >>>> other in terms of security. I read on Amila's blog that some class loading >>>> settings can be modified but it's not clear exactly what ramifications it >>>> will have or if it will even help my problems. >>>> I am not sure if this is causing my problems, but due to wanting to be able >>>> to override the properties file in the .aar file when deployed in different >>>> environments, in the service lifecycle init method I attempt to find the >>>> properties file in the axis classpath before trying the .arr, using first >>>> axisService.getClass().getClassLoader(0.gerResourceAsStream(propsFilename); >>>> and if not found then using >>>> this.getClass().getClassLoader(0.gerResourceAsStream(propsFilename); >>>> Could this be messing up the class loading sequence, and if yes, how can I >>>> achieve the same effect without using the axis class loader first? >>>> thanks, >>>> charles >>>> On Dec 1, 2009, at 2:29 PM, Charles Galpin wrote: >>>> >>>> Hi Sameera >>>> Ok, this is starting to make a little more sense. I was not aware the >>>> WebappClassLoader could not see classes in the .aar. Can this be changed? >>>> I have access to the source of the client.corba.* packages, but they are >>>> just calling org.omg.CORBA.ORB.init which is doing the class loading and >>>> thats from rt.jar in the java distro afaik. The ORB loaded is a >>>> configurable >>>> option which is why it uses the class loader. >>>> Here is another exception stack you may find useful. I had run into this >>>> problem as well as various other classes not loading a while ago and made a >>>> few changes until getting my service working, and one of them was to pass >>>> -Djava.library.path="%PATH%;blahblah" in on the commandline when starting >>>> tomcat. Removing this changes the error to a perhaps little more revealing >>>> message (after understanding about the TCCL limitation) >>>> 13:38:58 ERROR- Error initializing CORBA ORB. Unexpected CORBA error. >>>> org.omg.CORBA.INITIALIZE: can't instantiate default ORB implementation >>>> org.jacorb.orb.ORB vmcid: 0x0 minor code: 0 completed: No >>>> 13:38:58 DEBUG- Stack trace: org.omg.CORBA.INITIALIZE: can't instantiate >>>> default ORB implementation org.jacorb.orb.ORB vmcid: 0x0 minor code: 0 >>>> completed: No >>>> at org.omg.CORBA.ORB.create_impl(ORB.java:297) >>>> at org.omg.CORBA.ORB.init(ORB.java:336) >>>> at client.corba.BaseCORBAApp.initCORBA(BaseCORBAApp.java:134) >>>> at >>>> client.corba.BaseCORBAService.startService(BaseCORBAService.java:100) >>>> at >>>> client.project.dcol.publish.corba.WebServiceDataCollectionService.webInit(WebServiceDataCollectionService.java:170) >>>> at >>>> client.project.dcol.GDPI.ServiceBase$ServiceThread.run(ServiceBase.java:318) >>>> at java.lang.Thread.run(Thread.java:619) >>>> Caused by: java.lang.ClassNotFoundException: org.jacorb.orb.ORB >>>> at >>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) >>>> at >>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) >>>> at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320) >>>> at java.lang.Class.forName0(Native Method) >>>> at java.lang.Class.forName(Class.java:247) >>>> at org.omg.CORBA.ORB.create_impl(ORB.java:295) >>>> ... 6 more >>>> 13:38:58 ERROR- Aborted due to startup failure. >>>> Aborted due to startup failure: Error initializing CORBA ORB. Unexpected >>>> CORBA error. >>>> Is there any other way to work around this other than putting the libraries >>>> in the axis2/WEB-INF/lib directory? To be clear I have other problems >>>> beside >>>> this. A good example is we have a custom log4j appender we use which is in >>>> Shared.jar. This cannot be found either unless it's in axis2/WEB-INF/lib >>>> but >>>> your description explains that one too. >>>> thanks, >>>> charles >>>> On Dec 1, 2009, at 1:28 PM, Sameera Jayasoma wrote: >>>> >>>> Hi Charles >>>> >>>> On Tue, Dec 1, 2009 at 11:27 PM, Charles Galpin <cgal...@lhsw.com> wrote: >>>>> >>>>> Hi Sameera >>>>> >>>>> Yes this is what is happening and what is expected. The >>>>> org.omg.CosNotifyFilter.InvalidGrammar class is in jacorb.jar which is in >>>>> the .aar lib directory. What am I missing? Are you saying it should not be >>>>> in the thread context class loader? >>>> >>>> The class BaseCORBAApp is trying to loadInvalidGrammar class from the TCCL >>>> and in this scenario TCCL is set to the WebappClassLoader. Classes in your >>>> aar lib folder cannot be seen by the WebappClassLoader. It can only see the >>>> classes in axis2/WEB-INF/lib folder or in the application classpath >>>> tomcat/lib. That is things work nicely when you put jacob.jar to >>>> axis2/WEB-INF/lib. >>>> >>>> Do you have access to sources of the classes in client.corba.* packages. >>>> >>>> Thanks >>>> sameera >>>> >>>>> >>>>> On Dec 1, 2009, at 12:47 PM, Sameera Jayasoma wrote: >>>>> >>>>>> It seems that "BaseCORBAApp" class is trying to load >>>>>> "org.omg.CosNotifyFilter.InvalidGrammar" from the thread context class >>>>>> loader. That is why you see following lines in the exception log. >>>>>> >>>>>> at >>>>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1387) >>>>>> at >>>>>> org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233) >>>>>> >>>>>> This is a usual practice of loading application libraries. If you have >>>>>> access to the source code of client.corba classes, you can verify this. >>>>>> >>>>>> Thanks >>>>>> Sameera >>>>> >>>>> >>>>> Thanks Olindo, but the first error (see the bottom of the trace) is >>>>> java.lang.ClassNotFoundException which I believe is the root cause. I have >>>>> checked and jacorb.jar is not in the path or classpath. >>>>> >>>>> On Dec 1, 2009, at 11:55 AM, Olindo Pindaro wrote: >>>>> >>>>>> The exception isn't "ClassNotFound" but "NoClassDefFoundError", that in >>>>>> my experience is caused by conflit in differente version of library >>>>>> present >>>>>> in compiler path and classloaderpath. >>>>> >>>>> thanks, >>>>> charles >>>>> >>>> >>>> >>>> >>>> -- >>>> Sameera Jayasoma >>>> Software Engineer >>>> WSO2 Inc. >>>> Oxygenating the Web Service Platform. >>>> http://wso2.org/ >>>> >>>> blog: http://tech.jayasoma.org >>>> >>>> >>>> >> >>