I am trying to use the new EJB3.1 feature where one can deploy an EJB packaged within a .war file.
I am using Maven 2.2.1 to package the EJB module and then dropping the ejb jar in a war module (as a dependency). The final war contains a simple web.xml with no content, and the ejb jar library in the lib directory. However, though the application is deployed correctly, the annotated ejb (@Stateless) is not recognized by the container. I have no ejb-jar.xml descriptor (which I believe is optional in EJB3).
If I deploy the ejb jar on its own (by dropping it in the deploy directory in JBoss) it is deployed an assigned a jndi name.
Am I missing something here?
I found the problem on this one. My web.xml was 2.4 version:
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
However, for EJBs to be deployed in war packages, it needs to be 3.0 at least:
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
This was mainly due to the fact that I was creating my war module with a J2EE Maven archetype.