2010-03-25 3 views
0

Проблемы заключается в том TAHT я получаю следующее сообщение об ошибке qhile развертывания моего проекта Glassfish:Maven2 мульти-модуль EJB 3.1 проекта - ошибка развертывания

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

Но, давайте начнем о том, как структура проекта выглядит в Maven2 ...

Я построить следующий сценарий:

MultiModuleJavaEEProject - родительский модуль
-> модель ---> упакованное в баночке
-> EJB1 ----> пак ред, как EBJ
-> EJB2 ----> упакованные в EBJ
-> Интернет ----> упаковывают в войне

Так модель, EJB1, EJB2 и веб-дети/модули родительского MultiModuleJavaEEProject.

_ejb1 зависит от модели.
_ejb2 зависит от ejb1.
_web зависит от ejb2.

взгляд ПОМ как:

_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> 

И модель только простой Pojo:

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

И EJB1 содержит только один Безгражданства, EJB.

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(); 
    } 
} 

Как и EJB2 только без гражданства EJB:

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(); 
    } 
} 

И веб-модуль содержит только 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(); 
    } 
} 

И файл web.xml в Интернете модуль выглядит следующим образом:

<!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> 

Поэтому никакие дальнейшие файлы не настроены мной. В ejb-файлах нет ejb-jar.xml, потому что я использую EJB 3.1. Поэтому я считаю, что дескрипторы ejb-jar.xml являются необязательными. Я прав?
Но проблема в том, уже упомянутая ошибка:

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

Может кто-нибудь помочь?

ответ

3

Я не знаю, почему у вас есть web.xml (вместо использования аннотаций) ... Но если вы действительно хотите, это изменить:

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

В это:

<?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> 

И перестроить/переустановить.

+0

Спасибо, ооочень! Это оно! – gerry

2

Для всех, кто приходит на это, используя Glassfish 3.1 и Eclipse 3.7, m2e 1.0 и интеграцию m2e-wtp: Eclipse WTP для Glassfish начал развертывание взорванных банок, которые являются buggy in Glassfish 3.1. Используйте, по крайней мере, Glassfish 3.1.1 Beta 1, чтобы снова включить интеграцию Eclipse WTP.

Чтобы проверить, не затронута ли эта проблема, проверьте, работает ли все, когда вы экспортируете WAR из Eclipse и разворачиваете его вручную с помощью консоли администратора Glassfish.

Смежные вопросы