2010-03-25 5 views
0

Le problème est taht je reçois l'erreur suivante qhile déployer mon projet GlassFish:projet Maven2 de ejb multi-module 3.1 - Erreur déploiement

java.lang.RuntimeException: Unable to load EJB module. DeploymentContext does not contain any EJB Check archive to ensure correct packaging 

Mais, commençons sur la façon dont la structure du projet ressemble à Maven2 ...

J'ai construire le scénario suivant:

MultiModuleJavaEEProject - module parent
-> modèle ---> emballé comme pot
-> ejb1 ----> packag ed comme ebj
-> EJB2 ----> emballés comme ebj
-> web ----> empaquetées en tant que guerre

Alors modèle, ejb1, EJB2 et web sont des enfants/modules de la société mère MultiModuleJavaEEProject.

_ejb1 dépend du modèle.
_ejb2 dépend de ejb1.
_web dépend de ejb2.

regard de la pom comme:

_parent:

<?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> 
    <groupId>org.dyndns.geraldhuber.testing</groupId> 
    <artifactId>MultiModuleJavaEEProject</artifactId> 
    <packaging>pom</packaging> 
    <version>1.0</version> 
    <name>MultiModuleJavaEEProject</name> 
    <url>http://maven.apache.org</url> 

    <modules> 
    <module>model</module> 
    <module>ejb1</module> 
    <module>ejb2</module> 
    <module>web</module> 
    </modules> 

    <dependencies> 
    <dependency> 
     <groupId>junit</groupId> 
     <artifactId>junit</artifactId> 
     <version>4.7</version> 
     <scope>test</scope> 
    </dependency> 
    </dependencies> 


    <build> 
    <pluginManagement> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ejb-plugin</artifactId> 
       <version>2.2</version> 
       <configuration> 
        <ejbVersion>3.1</ejbVersion> 
        <jarName>${project.groupId}.${project.artifactId}-${project.version}</jarName> 
       </configuration> 
      </plugin> 
     </plugins> 

    </pluginManagement> 
    </build> 

</project> 

_model:

<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> 
    <groupId>testing</groupId> 
    <artifactId>MultiModuleJavaEEProject</artifactId> 
    <version>1.0</version> 
    </parent> 

    <artifactId>model</artifactId> 
    <packaging>jar</packaging> 
    <version>1.0</version> 
    <name>model</name> 
    <url>http://maven.apache.org</url> 
</project> 

_ejb1:

<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> 
    <groupId>testing</groupId> 
    <artifactId>MultiModuleJavaEEProject</artifactId> 
    <version>1.0</version> 
    </parent> 

    <artifactId>ejb1</artifactId> 
    <packaging>ejb</packaging> 
    <version>1.0</version> 
    <name>ejb1</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
    <dependency> 
     <groupId>org.glassfish</groupId> 
     <artifactId>javax.ejb</artifactId> 
     <version>3.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>testing</groupId> 
     <artifactId>model</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 
</project> 

_ejb2:

<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> 
    <groupId>testing</groupId> 
    <artifactId>MultiModuleJavaEEProject</artifactId> 
    <version>1.0</version> 
    </parent> 

    <artifactId>ejb2</artifactId> 
    <packaging>ejb</packaging> 
    <version>1.0</version> 
    <name>ejb2</name> 
    <url>http://maven.apache.org</url> 

    <dependencies> 
    <dependency> 
     <groupId>org.glassfish</groupId> 
     <artifactId>javax.ejb</artifactId> 
     <version>3.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>testing</groupId> 
     <artifactId>ejb1</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 
</project> 

_WEB:

<?xml version="1.0" encoding="UTF-8"?> 
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <modelVersion>4.0.0</modelVersion> 
    <parent> 
    <artifactId>MultiModuleJavaEEProject</artifactId> 
    <groupId>testing</groupId> 
    <version>1.0</version> 
    </parent> 
    <groupId>testing</groupId> 
    <artifactId>web</artifactId> 
    <version>1.0</version> 
    <packaging>war</packaging> 
    <name>web Maven 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>org.glassfish</groupId> 
     <artifactId>javax.ejb</artifactId> 
     <version>3.0</version> 
     <scope>provided</scope> 
    </dependency> 


    <dependency> 
     <groupId>testing</groupId> 
     <artifactId>ejb2</artifactId> 
     <version>1.0</version> 
    </dependency> 
    </dependencies> 


    <build> 
    <plugins> 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-war-plugin</artifactId> 
     <version>2.0</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
    </plugins> 
    <finalName>web</finalName> 
    </build> 
</project> 

Et le modèle est un simple Pojo:

package testing.model; 
public class Data { 
    private String data; 
    public String getData() { 
     return data; 
    } 
    public void setData(String data) { 
     this.data = data; 
    } 
} 

Et le ejb1 ne contient qu'un seul ejb STATELESS.

package testing.ejb1; 

import javax.ejb.Stateless; 
import testing.model.Data; 

@Stateless 
public class DataService { 
    private Data data; 
    public DataService(){ 
     data = new Data(); 
     data.setData("Hello World!"); 
    } 
    public String getDataText(){ 
     return data.getData(); 
    } 
} 

Outre le EJB2 est seulement un ejb apatride:

package testing.ejb2; 

import javax.ejb.EJB; 
import javax.ejb.Stateless; 
import testing.ejb1.DataService; 

@Stateless 
public class Service { 
    @EJB 
    DataService service; 

    public Service(){ 

    } 
    public String getText(){ 
     return service.getDataText(); 
    } 
} 

et le module Web ne contient qu'une Servlet:

package testing.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 testing.ejb2.Service; 

public class SimpleServlet extends HttpServlet { 

    @EJB 
    Service service; 

    public void doGet(HttpServletRequest request, 
         HttpServletResponse response) 
     throws ServletException, IOException { 

     PrintWriter out = response.getWriter(); 
     out.println("SimpleServlet Executed"); 
     out.println("Text: "+service.getText()); 
     out.flush(); 
     out.close(); 
    } 
} 

Et le fichier web.xml dans le web le module ressemble à:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

<web-app> 
    <display-name>Archetype Created Web Application</display-name> 
    <servlet> 
    <servlet-name>simple</servlet-name> 
    <servlet-class>testing.web.SimpleServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>simple</servlet-name> 
    <url-pattern>/simple</url-pattern> 
    </servlet-mapping> 
</web-app> 

Donc pas d'autres fichiers sont mis en place par moi. Il n'y a pas de fichier ejb-jar.xml dans les fichiers ejb, car j'utilise EJB 3.1. Donc je pense que les descripteurs ejb-jar.xml sont optionnels. J'ai ce droit?
Mais le problème est, l'erreur a déjà été mentionné:

java.lang.RuntimeException: Unable to load EJB module. DeploymentContext does not contain any EJB Check archive to ensure correct packaging 

Quelqu'un peut-il aider?

Répondre

3

Je ne sais pas pourquoi vous avez un web.xml (au lieu d'utiliser des annotations) ... Mais si vous voulez vraiment, changer ceci:

<!DOCTYPE web-app PUBLIC 
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" 
"http://java.sun.com/dtd/web-app_2_3.dtd" > 

Dans ceci:

<?xml version="1.0" encoding="UTF-8"?> 
<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"> 
    <display-name>Archetype Created Web Application</display-name> 
    ... 
</web-app> 

Et reconstruire/redéployer.

+0

Merci beaucoup! C'est tout! – gerry

2

Pour quelqu'un qui vient accross cela en utilisant Glassfish 3.1 et Eclipse 3.7, M2e 1.0 et l'intégration M2e-WTP: Eclipse WTP pour Glassfish commencé à déployer des pots éclatées qui sont buggy in Glassfish 3.1. Utilisez Glassfish 3.1.1 Beta 1 au moins pour que l'intégration Eclipse WTP fonctionne à nouveau.

Pour tester si vous êtes concerné par ce problème, vérifiez si tout fonctionne correctement lorsque vous exportez le fichier WAR à partir d'Eclipse et que vous le déployez manuellement à l'aide de la console d'administration Glassfish.

Questions connexes