2013-05-22 34 views
9

Tôi muốn sử dụng Maven để xây dựng và triển khai một EJB từ xa. Sau đó, tôi sẽ muốn có thể tiêm và sử dụng EJB này vào một dự án WAR riêng biệt.Làm cách nào để xây dựng và triển khai EJB từ xa với Maven?

Vì vậy, tôi nghĩ rằng tôi sẽ cần một tệp jar xác định giao diện và sử dụng bình trong cả hai dự án (ejb và chiến tranh).

Tôi có giao diện này, trong một dự án Maven gọi example:api, đóng gói như là jar:

package example; 

import javax.ejb.Remote; 

@Remote 
public interface Bean { 

    void process(); 
} 

tôi thực hiện các giao diện trên trong một dự án Maven gọi example:ejb, đóng gói như ejb:

package example; 

import javax.ejb.Stateless; 

@Stateless 
public class Ejb implements Bean { 

    @Override 
    public void process() { 
    } 
} 

Dự án ejb sử dụng maven-ejb-plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ejb-plugin</artifactId> 
    <version>2.3</version> 
    <configuration> 
     <ejbVersion>3.1</ejbVersion> 
    </configuration> 
</plugin> 

Và cả hai dự án phụ thuộc vào javaee-api:

<dependency> 
    <groupId>javax</groupId> 
    <artifactId>javaee-api</artifactId> 
    <version>6.0</version> 
    <scope>provided</scope> 
</dependency> 

Bây giờ để đặt chúng lại với nhau, tôi đã thực hiện một dự án Maven thứ ba, gọi là example:ear, đóng gói như ear:

<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> 
    <groupId>example</groupId> 
    <artifactId>ear</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>ear</packaging> 
    <name>ear</name> 

    <dependencies> 
     <dependency> 
      <groupId>example</groupId> 
      <artifactId>api</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <type>jar</type> 
     </dependency> 
     <dependency> 
      <groupId>example</groupId> 
      <artifactId>ejb</artifactId> 
      <version>0.0.1-SNAPSHOT</version> 
      <type>ejb</type> 
     </dependency> 
    </dependencies> 

    <build> 
     <finalName>${project.artifactId}</finalName> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-ear-plugin</artifactId> 
       <configuration> 
        <modules> 
         <ejbModule> 
          <groupId>example</groupId> 
          <artifactId>ejb</artifactId> 
         </ejbModule> 
         <jarModule> 
          <groupId>example</groupId> 
          <artifactId>api</artifactId> 
         </jarModule> 
        </modules> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Vấn đề là tôi có thể' t triển khai dự án tai này. Tôi nhận được lỗi sau:

09:39:39,702 INFO [org.jboss.as.server.deployment.scanner] (DeploymentScanner-threads - 2) JBAS015003: Found ear.ear in deployment directory. To trigger deployment create a file called ear.ear.dodeploy 
09:39:39,713 INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) JBAS015876: Starting deployment of "ear.ear" 
09:39:39,773 INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) JBAS015876: Starting deployment of "ejb-0.0.1-SNAPSHOT.jar" 
09:39:39,793 WARN [org.jboss.modules] (MSC service thread 1-8) Failed to define class example.Ejb in Module "deployment.ear.ear.ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader: java.lang.LinkageError: Failed to link example/Ejb (Module "deployment.ear.ear.ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader) 
    at org.jboss.modules.ModuleClassLoader.defineClass(ModuleClassLoader.java:396) 
[...] 
Caused by: java.lang.NoClassDefFoundError: example/Bean 
    at java.lang.ClassLoader.defineClass1(Native Method) [rt.jar:1.7.0_03] 
[...] 
Caused by: java.lang.ClassNotFoundException: example.Bean from [Module "deployment.ear.ear.ejb-0.0.1-SNAPSHOT.jar:main" from Service Module Loader] 
    at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) 

Tôi đang sử dụng JBoss AS 7.1.1, nếu có sự khác biệt.

Bạn có biết tôi đang làm gì sai không?

Trả lời

3

tôi đã thay đổi cấu hình của maven-ear-plugin:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-ear-plugin</artifactId> 
    <version>2.6</version> 
    <configuration> 
     <version>6</version> 
     <defaultLibBundleDir>lib</defaultLibBundleDir> 
    </configuration> 
</plugin> 

Bằng cách này nó hoạt động.

Các vấn đề liên quan