Hi David and tomcat users/devs, First of all, thanks for the reply, I really appreicate it. Here are my comments to your comments, hopefully you could find out something I did miss.
On 7/20/06, David Smith <[EMAIL PROTECTED]> wrote:
Q1) As long as I do not referece the classes, which I believe means the classes are not loaded, then there is not problem. When they are accessed, then it fails. The classes are in both common, shared and webapps, where else I am supposed to place them? First, read the classloader howto on the tomcat website (http://tomcat.apache.org/tomcat-5.5-doc/class-loader-howto.html). Then pick ONE and eliminate the others. If the classes are used only on one webapp or access other classes within the webapp itself, place them in WEB-INF/lib or WEB-INF/classes. Move up to shared or common only if the classes are used by several webapps or the engine itself. Placing pooled database connection drivers in common/lib is a perfect example of classes accessed by the tomcat engine and the webapp.
I had read that page before, more than once. The reason I am splitting the classes in two locations is because I need to use the JNI, which requires the classes to be in the shared pool. Here is where the problem lies, because everythinig works if I constrain my application to webapps/axisWEB-INF/classes and webapps/axis/WEB-INF/lib. The problem comes at run time, when the classes in the shared/classes directory access the parameters, which are classes generated from the WSDL file. I tried copying the classes to the shared/classes directory, I also copied axis.jar to the shared/lib directory and no change. There is something in Tomcat obviously tryiing to access something when deserializing/serializing and is not finding it. Any ideas of what it can be and how I could find out? Q2) How do I turn on Logging at the debug level in Tomcat, or any kind of
meaningful logging to figure out what is happening? See the tomcat website for your version of tomcat.
The Tomcat website wasn't exactly helpful on this. I found another website with the exact example I needed to activate logging for catalina. But still there are no errors reported, only the DEBUG and INFO levels throw something out. I still need to activate logging in the webapps classloader to see if I can figure out something else. Thanks in advance, --Luis R. --David
Luis Rivera wrote: > Hi Barry and Tomcat/users/devs, > > I am hoping an axis/tomcat/dev/user will have a good advise. I am sure > more > than one user has needed to use axis/tomcat and a JNI interface, so I am > sure this has been done. I need classes in the shared context and > classes in > the webapps context, which cause serialization/desearialization problems > when making calls among classes between the two contexts. > > I write the questions here, in case a reader don't want to go through the > whole explanation below them. > > Q1) As long as I do not referece the classes, which I believe means the > classes are not loaded, then there is not problem. When they are > accessed, > then it fails. The classes are in both common, shared and webapps, where > else I am supposed to place them? > > Q2) How do I turn on Logging at the debug level in Tomcat, or any kind of > meaningful logging to figure out what is happening? > > Q3) Is there a way to enable remote debugging using Eclipse? ... I > read that > it is possible, but is there any configuration in Tomcat I need to change > and does it include setting a port for it? > > I found the log that has the stdout, which was showing a couple of > exceptions, which I solved by placing the appropriate jar files in the > right > place. However, the problem didn't go away, there is something in the > Tomcat > servlet or axis (I don't know) that is handling an exception in the > server > side, because I have a try {} catch () {} where the problem ocurrs and I > don't catch anything, but the exception is returned to the client. Now > not > even an exception is thrown to the stdout or staderr files. > > The problems comes when in the shared/classes files I access the > parameters > that use the classes generated by the WSDL2java tool. Those classes > are in > both > > TOMCAT_HOME/shared/classes > > and > > TOMCAT_HOME/webapps/axis/WEB-INF/classes > > I also dropped the axis jar files in > > TOMCAT_HOME/shared/lib > TOMCAT_HOME/webapp/WEB-INF/lib > TOMCAT_HOME/webapp/axis/WEB-INF/lib > > but I still have a problem. At this point it would be nice to at > leasts see > the DEBUG output from Tomcat, but I am not sure how to do that or if > it is > something related to axis. To make this more explicit, this example > works: > > class CRLStub > > ... > > public void getCompay(CompanyHolder company, StringHolder result) > throws java.rmi.RemoteException > { > company.value = new soap.xsd.CompanyInfo(); > company.value.setCompany("Something"); > > result.value = "ok"; > } > > Now, if I try to do the following, there is no error, but obviously, the > result is not the same > > class CRLStub > > ... > > public void getCompay(CompanyInfoHolder company, StringHolder result) > throws java.rmi.RemoteException > { > jnInSharedContext.getCompany(company, result); > } > > class JNIcrlInSharedContext > > ... > > public void getCompany(CompanyInfoHolder company, StringHolder result) > { > /// No problem as long as I don't access neither company or result > } > > But if I do this, then I receive the > java.lang.reflect.InvocationTargetException at the client side, even if I > try to catch the exception with a try {} catch () {} pair. > > public void getCompany(CompanyInfoHolder company, StringHolder result) > { > company.value = new soap.xsd.CompanyInfo(); > } > I would appreciate any kind of hint, > Thanks in advance, > --Luis R. > > On 7/18/06, Propes, Barry L <[EMAIL PROTECTED]> wrote: > >> >> none of the logs mention it? >> I realize Tomcat does seem a bit bereft of info in the logs sometime. >> Would it have been a case where it printed to the system console >> instead? >> Mine does that sometimes, instead of (or in addition to) the log(s) >> and I >> troubleshoot it that way. >> >> -----Original Message----- >> From: Luis Rivera [mailto:[EMAIL PROTECTED] >> Sent: Tuesday, July 18, 2006 5:00 PM >> To: Tomcat Users List >> Subject: Re: Tomcat 5.5/Axis 1.4 >> java.lang.reflect.InvocationTargetException >> >> >> Hi Shankar, >> >> Thanks a lot. I found my problem. It turned out not to be a Classloader >> problem, but a NullPointer (THANKS TO TIM FOR THE HINT :) ) problem >> in the >> server, which I had not found because I don't know how to debug my >> application in Tomcat and there is no single log in the Tomcat directory >> that can give me a clue of what's happening. >> >> Anyway, the configuration worked as I had it initially: >> >> 1) Dropping the axis.jar in the WEB-INF/lib as you pointed out. >> >> 2) Stubs/Skeletons and all that had nothing to do with the JNI in >> axis/WEB-INF/classes >> >> 3) The classes for the JNI interface/loading the jni library under >> shared/classes >> >> I think if I can find a way to debug our application in the server, we >> could >> get better light on what is happening and solve problems a lot >> quicker :|. >> It's like driving blind right now :|. >> >> Anybody knows how to debug remotely axis/tomcat apps? >> >> --Luis R. >> >> On 7/18/06, Shankar Unni <[EMAIL PROTECTED]> wrote: >> > >> > Luis Rivera wrote: >> > >> > > I have a web service which will JNI to access the application, which >> > > according to the documentation should be placed in the >> shared/classes >> > > directory. I did so and I got a dreaded >> > > java.lang.reflect.InvocationTargetException, which I believe is a >> class >> > > loader problem. >> > >> > You need to put the Axis jar in the WEB-INF/lib of your webapp. It >> > wasn't clear in the original message whether you'd done it like this. >> > >> > That's because the common classloader is the *parent* of your webapp's >> > classloader, and thus can't see any classes that are in your >> webapp. So >> > you can't put the Axis library there. >> > >> > Note: only axis.jar itself really needs to go into the webapp's >> > WEB-INF/lib. The rest of the Axis jars (saaj.jar, etc.) can go into >> > common/lib, if you have many webapps in the same Tomcat instance that >> > use Axis. >> > >> > >> > --------------------------------------------------------------------- >> > To start a new topic, e-mail: users@tomcat.apache.org >> > To unsubscribe, e-mail: [EMAIL PROTECTED] >> > For additional commands, e-mail: [EMAIL PROTECTED] >> > >> > >> > --------------------------------------------------------------------- To start a new topic, e-mail: users@tomcat.apache.org To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]