2010-03-25 4 views
0

문제는 내가 글래스 피시 내 프로젝트를 배포 qhile 다음과 같은 오류가 taht를하다 ...Maven2 멀티 모듈 EJB 3.1 프로젝트 배포 오류

나는 다음과 같은 시나리오를 구축했습니다 :

MultiModuleJavaEEProject - 부모 모듈
-> 모델 ---> 항아리로 패키지
-> ejb1 ----> packag를 에드 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> 

그리고 모델이 단순한 뽀조입니다 :

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

그리고 ejb1는 하나의 STATELESS 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(); 
    } 
} 

그리고 웹 모듈은 서블릿이 포함되어

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 3.1을 사용하기 때문에 ejb 파일에는 ejb-jar.xml이 없습니다. 그래서 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

sooo sooo much! 그게 다야! – gerry

2

글래스 피쉬 3.1과 이클립스 3.7, m2e 1.0 및 m2e-wtp 통합을 사용하여이 모든 것을 경험 한 사람 : 글래스 피시 용 Eclipse WTP는 폭발 한 병 (buggy in Glassfish 3.1)을 배포하기 시작했습니다. 최소한 Glassfish 3.1.1 Beta 1을 사용하여 Eclipse WTP 통합을 다시 작동 시키십시오.

이 문제점의 영향을 받는지 테스트하려면 Eclipse에서 WAR를 내보내고 Glassfish 관리 콘솔을 사용하여 수동으로 배포 할 때 모든 것이 작동하는지 테스트하십시오.