Proyecto de ejemplo que demuestra la construccion de un EAR 1.4 con EJB 2.1
El ejemplo listo para probar: MavenEE42
Yo lo he probado en Websphere, GlassFish, en WebSphere hay que especificar a mano las rutas donde estan los ejb.
Este proyecto esta divido en modulos:
- EAR
- EJB
- WEB
Cada modulo tiene su propio descriptor de proyecto (POM), y en la raiz existe un POM padre que es el que se encarga de compilar todo el proyecto.
La estructura del proyecto es la siguiente.
├── ear
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── application
│ │ │ └── META-INF
│ │ │ └── MANIFEST.MF
│ │ └── java
│ └── test
│ └── java
├── ejb
│ ├── pom.xml
│ └── src
│ ├── main
│ │ ├── java
│ │ │ └── org
│ │ │ └── atoms
│ │ │ ├── Hola.java
│ │ │ ├── HolaLocalHome.java
│ │ │ └── HolaLocal.java
│ │ └── resources
│ │ ├── log4j.properties
│ │ └── META-INF
│ │ ├── ejb-jar.xml
│ │ ├── ibm-ejb-jar-bnd.xmi
│ │ └── MANIFEST.MF
│ └── test
│ └── java
│ └── org
│ └── atoms
├── java
├── pom.xml
└── web
├── pom.xml
└── src
├── main
│ ├── java
│ │ └── org
│ │ └── atoms
│ │ └── HolaEJB.java
│ └── webapp
│ ├── index.jsp
│ └── WEB-INF
│ └── web.xml
└── test
└── java
└── org
└── atoms
POM Padre: construye todos los modulos
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>mavenproject1</artifactId>
<groupId>org.atoms</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.atoms</groupId>
<artifactId>mavenproject2</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>mavenproject2 Maven Enterprise Application</name>
<url>http://maven.apache.org</url>
<modules>
<module>ear</module>
<module>web</module>
<module>ejb</module>
</modules>
<build>
<defaultGoal>package</defaultGoal>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<!-- 3. Specify used Java version. -->
<source>1.5</source>
<target>1.5</target>
</configuration>
</plugin>
</plugins>
</build>
</project>
POM ear: Ensambla el EAR, genera el Aplication.xml, pone todos las librerias en el directorio lib, para que puedan ser usadas por los proyectos de ejb, y web.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>mavenproject2</artifactId>
<groupId>org.atoms</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.atoms</groupId>
<artifactId>ear</artifactId>
<packaging>ear</packaging>
<version>1.0-SNAPSHOT</version>
<name>mavenproject2-ear J2EE 1.4 Assembly</name>
<url>http://maven.apache.org</url>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ear-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<version>1.4</version>
<defaultJavaBundleDir>lib/</defaultJavaBundleDir>
</configuration>
</plugin>
</plugins>
<finalName>mavenproject2-ear</finalName>
</build>
<dependencies>
<dependency>
<groupId>org.atoms</groupId>
<artifactId>mavenproject2-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
<type>ejb</type>
</dependency>
<dependency>
<groupId>org.atoms</groupId>
<artifactId>mavenproject2-web</artifactId>
<version>1.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
</dependencies>
</project>
POM ejb: genera el descriptor de despliege de los ejb.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>mavenproject2</artifactId>
<groupId>org.atoms</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.atoms</groupId>
<artifactId>ejb</artifactId>
<packaging>ejb</packaging>
<version>1.0-SNAPSHOT</version>
<name>mavenproject2-ejb J2EE 1.4 EJB</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-j2ee_1.4_spec</artifactId>
<version>1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.4</version>
</dependency>
<!-- Logging -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-api</artifactId>
<version>1.5.8</version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.5.8</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-ejb-plugin</artifactId>
<version>2.1</version>
<configuration>
<ejbVersion>2.1</ejbVersion>
<archive>
<manifest>
<addClasspath>true</addClasspath>
<classpathPrefix>lib/</classpathPrefix>
</manifest>
</archive>
</configuration>
</plugin>
</plugins>
<finalName>mavenproject2-ejb</finalName>
</build>
</project>
POM web: en modulo de web no es necesario incluir ninguna libreria pero si es necesario generar el manifest, esto ya se hace en automatico, esto se llama Skinny WARs.
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<artifactId>mavenproject2</artifactId>
<groupId>org.atoms</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<groupId>org.atoms</groupId>
<artifactId>web</artifactId>
<packaging>war</packaging>
<version>1.0-SNAPSHOT</version>
<name>mavenproject2-web J2EE 1.4 Webapp</name>
<url>http://maven.apache.org</url>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.4</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>javax.servlet.jsp</groupId>
<artifactId>jsp-api</artifactId>
<version>2.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.geronimo.specs</groupId>
<artifactId>geronimo-ejb_2.1_spec</artifactId>
<version>1.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.atoms</groupId>
<artifactId>mavenproject2-ejb</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.0.2</version>
<configuration>
<source>1.4</source>
<target>1.4</target>
</configuration>
</plugin>
</plugins>
<finalName>mavenproject2-web</finalName>
</build>
</project>


