While i work on creating a sample application that shows the PARENT FIRST
class-loading of TomEE Plus, I was able to figure out some extent as to why
Jersey does not work with TomEE when packaged in EAR/WAR-MODULE/WEB-INF/lib. 
I removed all the Jar conflicts and ensured that Jersey libraries are only
available from EAR-module/war-module/web-inf/lib.  My observations are as
here under:

I notice that my REST Application and resources are examined twice. Once by
OpenEJB container and once by the Jersey Container Servlet. So the first
time when resource uris are figured out, the classloader used is
org.apache.openejb.core.TempClassLoader and (strangely !) it is able to
locate resources from 
WEB-INF/lib of my REST Web module. The getResources(String name) method
fired on this classloader returns Jar URLs - each Jar URL having URI like
this:
file:/C:/installations/otmm-tomee/apache-tomee-plus-7.0.0/apps/myear/restapi/WEB-INF/lib/myrestresources.jar!/com/xyz/pqr/restapi.
I see that all my REST resources are properly identified. One point to
notice is that the URI has no trailing slash.

However, the REST application is invoked second time from Jersey Servlet.
While figuring out resources, the classloader used is an instance of
"org.apache.tomee.catalina.TomEEWebappClassLoader"
and it returns each URI with a trailing slash as follows.

"jar:file:/C:/installations/otmm-tomee/apache-tomee-plus-7.0.0/apps/artesia/restapi/WEB-INF/lib/otmm-rest-representations.jar!/com/opentext/mediamanager/restapi/"
- Notice the trailing slash. This was not there when TempClassLoader is
used. Jersey does some substring stuff and the trailing slash upsets
Jersey's processing and it fails to identify the REST resources. Not sure
whether there is anything there in java.lang.ClassLoader contract that
getResource(String name) can/should n't list resource URIs with trailing
slash. Therefore cannot say whether the getResource implementation of
TomEEWebappClassLoader is right or wrong. But this is the reason as to why
Jersey fails to identify REST resources.  



--
View this message in context: 
http://tomee-openejb.979440.n4.nabble.com/Classloading-issues-integrating-Jersey-2-16-and-apache-tomee-plus-7-0-0-tp4678794p4678970.html
Sent from the TomEE Dev mailing list archive at Nabble.com.

Reply via email to