Adding jars to an application in application.xml?

8k Views Asked by At

I have a java application which needs to be deployed in the weblogic server. I am currently making the ear file for that application. My ear file has an ejb jar inside. I want to add log4j2 jars to this application. So my folder structure is

> Project-Name-
>     --Ear-Content
>         --APP-INF
>             --lib -> log4j2 jars
>             --classes - > log4j2.xml
>         --META-INF->application.xml, MANIFEST.MF, weblogic-application.xml
>         --Project-Name.jar

Currently I have put the jars in APP-INF folder/lib and in META-INF/application.xml I have put the jars in modules. Here is my application.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE application PUBLIC '-//Sun Microsystems, Inc.//DTD J2EE Application 1.3//EN' 'http://java.sun.com/dtd/application_1_3.dtd'>
<application>
  <display-name>ProjectName</display-name>
  <description>ProjectName</description>

  <module>
        <ejb>ProjectName.jar</ejb>

  </module>
  <module>
        <java>lib/log4j-api-2.1.jar</java>

  </module>
  <module>
  <java>lib/log4j-core-2.1.jar</java>
  </module>


</application>

But it is not taking the log4j jars. Any solutions ??

1

There are 1 best solutions below

1
On BEST ANSWER

If you are only packaging up one application, I would highly recommend using a war file instead of an ear since it is simpler. Otherwise you may need to package your current Project-Name.jar into a war file and then package that into the ear.

See a tutorial like the one here

That said - you should not need to explicitly reference the log4j libraries in your application.xml file with module tags. From the Oracle docs:

The classes and libraries stored under APP-INF/classes and APP-INF/lib are available to all modules in the Enterprise Application. The application classloader always attempts to resolve class requests by first looking in APP-INF/classes, then APP-INF/lib.

Last but not least, if it seems like Weblogic is not using the classes you want it to and is instead using the defaults, in your case log4j 1.2 vs log4j 2, you will need to set the following in your application.xml to tell Weblogic which one to use:

<prefer-application-packages>
    <package-name>org.apache.log4j.*</package-name>
</prefer-application-packages>