A partir de EJB 3.0 el uso del fichero ejb-jar.xml (deployment descriptor) se ha reducido significativamente ya que el uso de anotaciones ha simplificado sobremanera la forma de definir los distintos EJBs . De esta forma se ha eliminado la necesidad de usar este fichero que pasa a ser opcional y que se una en algunas situaciones muy concretas.

Uso de ejb-jar.xml
Sin embargo el fichero sigue estando presente y en algunas ocasiones nos puede ser útil utilizarlo. Uno de los casos más habituales es la parametrización de valores que la aplicación necesita usar. Vamos a ver un ejemplo sencillo. Para ello nos vamos a crear un EJB que nos devuelva un número y este número lo vamos a inicializar en el ejb-jar.xml.
package com.arquitecturajava.ejb;
import javax.annotation.Resource;
import javax.ejb.Stateless;
@Stateless
public class IniciarEJB implements IniciarEJBLocal {
@Resource(name="numero")
private int numero;
public int numero() {
return numero;
}
}
package com.arquitecturajava.ejb;
import javax.ejb.Local;
@Local
public interface IniciarEJBLocal {
public int numero() ;
}
Como podemos ver el EJB hace uso de la anotación de @Resource para inyectar un valor en la variable. Para ello usaremos el ejb-jar.xml.
<?xml version="1.0" encoding="UTF-8"?> <ejb-jar xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd" version="3.0"> <display-name>EJB004Variable</display-name> <enterprise-beans> <session> <ejb-name>IniciarEJB</ejb-name> <env-entry> <env-entry-name> numero </env-entry-name> <env-entry-type>java.lang.Integer</env-entry-type> <env-entry-value>5</env-entry-value> </env-entry> </session> </enterprise-beans> </ejb-jar>
Hemos asignado a la variable el valor de 5. Es momento de usar un Servlet para inyectar un EJB e imprimir el resultado por pantalla.
package com.arquitecturajava.web;
import java.io.IOException;
import java.io.PrintWriter;
import javax.ejb.EJB;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.arquitecturajava.ejb.IniciarEJBLocal;
public class ServletVariable extends HttpServlet {
private static final long serialVersionUID = 1L;
@EJB
IniciarEJBLocal miejb;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter pw= response.getWriter();
pw.println(miejb.numero());
}
}
El resultado será que el navegador nos imprimirá el valor por la pantalla.

Otro de los usos más típicos del ejb-jar.xml es cuando queremos aplicar interceptores a varios de nuestros EJBs ya que recordemos las anotaciones se aplican a un solo EJB.
Otros artículos relacionados:
Una pregunta tengo dos ejb que dependen el uno del otro por Maven les he indicado que están proveídos y compilan pero como desplegarlos si se requiere la dependencia es mutua?
Lo lógico es que vayan entonces en el mismo JAR , sino no podrás desplegarlos