I am trying to load some classes that are common to all the web applications of my ear in a java ee 5 application.
I tried to do this by putting the classes (not jar) in
a) directory called “lib”
b) also specifying in application.xml’s
<module><java>lib/common.jar</java></module>
and was not successful by either option a or b
but when I jarred the classes into common.jar, I was able to load the classes by method b)
- Do both these method need the classes to be jarred ?
- what is the difference between providing the classes via the above 2 methods ? why does it seem like there are two ways to specify loading common classes ?
I’m not sure which application server is being referred to here, and the nature of the common.jar file. For now, I’ll assume that the application server is any Java EE 5 container, and that the common.jar file is a utility jar (and not an EJB or similar module).
The Java EE 5 Platform Specification actually defines the manner in which library support is to be provided by containers:
This does not mean that method B is incorrect, it is the one to be used for application servers like JBoss 4, that did not support the library-directory element in application.xml. I believe, Glassfish also supports the lib directory concept without a corresponding library-directory element.
Coming back to the question, placing classes alone in a directory in the EAR file appears to be supported only in WebLogic Server via the APP-INF\classes structure (needless to say, this is not a platform standard). Hence, it is recommended to jar the common classes and use the application server supported mechanism to make these common classes available to other modules in the application.