Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

EJB 3.1 application deployed as WAR-only: What about ejb-jar.xml?

I have a JavaEE6 application, consisting of Web stuff and EJBs and which is deployed as WAR-only (using EJB3.1). The build is based on Maven. I just read about a new possibility to order the module initialization in Java EE 6 here which i also need for my application. Also, i would like to have an option to define some EJB properties in XML.

Since the example is deployed as an EAR-project the order is defined in the application.xml. But in a WAR-deployed project, there is no application.xml. Now i wonder where i can define such informations? Or is it possible to use an application.xml somehow in a WAR-deployed-app?

EDIT:

Oops i didn't read the module-order-example right, in the first moment i thought it was about in which order the EJBs in my app are loaded. Of course i have only one module in my WAR-app, so ordering makes no sense.

Ok, but as i'm at it, one big question remains (also altered the question title to reflect the change): What about the ejb-jar.xml? Can i somehow define stuff about my EJBs in XML (as its useful for some settings, to avoid recompilation)?

like image 306
Wolkenarchitekt Avatar asked Jul 26 '10 16:07

Wolkenarchitekt


People also ask

What is EJB-jar xml used for?

ejb-jar. xml has two primary elements: enterprise-beans is used to define beans, resources, and services used by the beans, and assembly-descriptor is used to declare security roles, method permissions, declarative transaction settings, and interceptors.

What is EJB-jar xml file?

The orion-ejb-jar. xml file is an EJB deployment descriptor file that contains all OC4J-proprietary options. This file extends the configuration that you specify in the ejb-jar.

Where to find EJB-jar xml?

xml File at Deployment Time. When you deploy an EJB 3.0 application with one or more annotations, OC4J will write its in-memory ejb-jar. xml file to the same location as the orion-ejb-jar. xml file in the deployment directory: < ORACLE_HOME >/j2ee/home/application-deployments/my_application/META-INF .

How do I run EJB application?

Run Client to Access EJB java in project explorer. Right click on EJBTester class and select run file.


2 Answers

In short, it is not possible with a WAR based deployment.

The module initialization feature of Java EE 6 is meant for initializing different modules of an application in a specific order. The moment you have a WAR based EJB application, you no longer have separate modules for your EJB and Web application. There is just one module - the web application module in a WAR based deployment.

Therefore, if you have to achieve the same feature as the module initialization order, offered in Java EE 6, you'll have to do either of the following:

  • Separate the EJB into a separate module, and use a EAR based deployment.
  • This is more or less trickery, as was done in Java EE 5, and you would want to be avoiding it. You might want to code in logic to ensure that the singleton EJBs have been created (assuming that this is due to the use of singletons in your application), before they're utilized in code.

Location of the ejb-jar.xml in a WAR file

The EJB 3.1 specification (in the chapter on Packaging) addresses the issue of the location of the ejb-jar.xml file when deployed in a WAR:

In a .war file, the deployment descriptor is stored with the name WEB-INF/ejb-jar.xml.

PS: I haven't tried this style of deployment yet. YMMV.

like image 85
Vineet Reynolds Avatar answered Oct 20 '22 17:10

Vineet Reynolds


Side note on EJBs in .wars and ejb-jar.xml processing. As already noted the location is WEB-INF/ejb-jar.xml, but also note that is the only location checked even if there are ejbs jars inside WEB-INF/lib/ -- via standard rules any META-INF/ejb-jar.xml files there are ignored.

The Expert Group was rather split on that one, so if you have a preference it's not too late to send feedback to the EJB 3.1 expert group list for consideration in EJB.next.

My vote was to still allow individual jars to have META-INF/ejb-jar.xml files just as these jars can now have persistence.xmls, beans.xmls, web fragments etc. The larger issue for me was that it is at odds with the Embedded EJB Container API which supports an EAR-style classpath which allows several jars/modules each possibly containing a META-INF/ejb-jar.xml file. The result being if you do use the Embedded API to test a multi-jar ejb app that is composed into a single .war file, you are then faced with the task of merging any ejb-jar.xml data you have into a single ejb-jar.xml for the webapp. Sort of a pain for users.

like image 34
David Blevins Avatar answered Oct 20 '22 18:10

David Blevins