Why Weblogic Recompiles EJB jars on deployment

Oracle Weblogic Server

We have always seen while deploying any EJB jars weblogic recompiles the already compiled jar. Below are the few reasons why weblogic needs to do that.

You will be seeing below entries in logs once the EJB starts deploying and recompiles.

<Jul 16, 2013 10:30:50 AM EDT> <Info> <EJB> <BBTHN> <TJWSAApp> <ACTIVE ExecuteThread: '231' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <1385092945214> <BEA-010008> <EJB Deploying file: SessionManagerEJB.jar>

<Jul 16, 2013 10:31:50 AM EDT> <Info> <EJB> <BBTHN> < TJWSAApp> <ACTIVE ExecuteThread: '231' for queue: 'weblogic.kernel.Default (self-tuning)'> <<WLS Kernel>> <1385092945230> <BEA-010087> <The EJB deployment named: SessionManagerEJB.jar is being recompiled within the WebLogic Server. Please consult the server logs if there are any errors. It is also possible to run weblogic.appc as a stand-alone tool to generate the required classes. The generated source files will be placed in /opt/Middlware/Oracle/user_projects/domains/BBTHN/servers/TJWSAppSrv1/cache/EJBCompilerCache/1rq21dds4wq1.>

The EJB container will only recompile your application during deployment if your EJB wasn’t precompiled (with weblogic.appc) or if the EJB container suspects your generated EJB wrapper classes may be out of date. Assuming you have precompiled your application, the recompilation may be triggered by any of the following:

1. The WLS server version you are deploying to is different than the WLS server version your EJB was compiled with. For example, this can happen as the result of applying a WLS patchset since your EJB was last compiled.

2. Your EJB metadata was modified. Metadata changes may require the generated wrappers to be updated to honor the updated metadata settings.

3. Updates to your EJB interfaces and or bean class. If your changes add, remove or modify methods, the wrapper classes may need to be updated to include the new method signatures.

4. The WLGENERATED file could’t be found. The EJB container creates this file during compilation and uses it to store information about the state of your EJB. If the EJB container can’t find it during deployment (because you’ve removed it from your app), the container assumes your application was not precompiled.

To improve performance, the container code will try and avoid EJB compilation whenever it’s safe to do.

You can get more info on weblogic.appc here :

  1. http://docs.oracle.com/cd/E13222_01/wls/docs81/ejb/appc_ejbc.html
  2. http://docs.oracle.com/cd/E13222_01/wls/docs81/ConsoleHelp/domain_ejbcomponent_config_ejbc-opts.html
  3. http://docs.oracle.com/cd/E13222_01/wls/docs81b/ejb/deploy.html

In case of any ┬ęCopyright or missing credits issue please check CopyRights page for faster resolutions.

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.