如何只将EJB3的接口导入客户端?

时间:2015-02-25 08:51:45

标签: java maven java-ee jboss ejb

我做了一个简单的项目来测试EJB3的实现。

使用maven我分别在项目3模块中创建了&#34; MyEjb&#34; EJB,&#34; MyWeb&#34; 战争<强大的&#34; MyWeb2&#34; 另一场战争。 war模块是EJB的客户端。

问题在于,当我部署EAR时,控制台说每个模块创建一个3个EJB上下文。 模块MyEjb的EJB上下文不在war模块之间共享,每个模块都从每个MyEjb依赖项中获取数据。

我必须在单独的JAR中创建EJB接口? 我使用Jboss作为应用程序服务器。

完整项目: https://github.com/AndreaCatania/EjbTest

这里是控制台:

[0m[0m09:32:18,735 INFO    [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named TheNamer in deployment unit deployment "MyEjbs-1.0-SNAPSHOT.jar" are as follows:

    java:global/MyEjbs-1.0-SNAPSHOT/TheNamer!com.andreacatania.test.RemoteNamer
    java:app/MyEjbs-1.0-SNAPSHOT/TheNamer!com.andreacatania.test.RemoteNamer
    java:module/TheNamer!com.andreacatania.test.RemoteNamer
    java:jboss/exported/MyEjbs-1.0-SNAPSHOT/TheNamer!com.andreacatania.test.RemoteNamer
    java:global/MyEjbs-1.0-SNAPSHOT/TheNamer
    java:app/MyEjbs-1.0-SNAPSHOT/TheNamer
    java:module/TheNamer

[0m[0m09:32:19,137 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-5) JNDI bindings for session bean named TheNamer in deployment unit deployment "MyWeb.war" are as follows:

    java:global/MyWeb/TheNamer!com.andreacatania.test.RemoteNamer
    java:app/MyWeb/TheNamer!com.andreacatania.test.RemoteNamer
    java:module/TheNamer!com.andreacatania.test.RemoteNamer
    java:jboss/exported/MyWeb/TheNamer!com.andreacatania.test.RemoteNamer
    java:global/MyWeb/TheNamer
    java:app/MyWeb/TheNamer
    java:module/TheNamer

[0m[0m09:32:19,142 INFO  [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-6) JNDI bindings for session bean named TheNamer in deployment unit deployment "MyWeb2.war" are as follows:

    java:global/MyWeb2/TheNamer!com.andreacatania.test.RemoteNamer
    java:app/MyWeb2/TheNamer!com.andreacatania.test.RemoteNamer
    java:module/TheNamer!com.andreacatania.test.RemoteNamer
    java:jboss/exported/MyWeb/TheNamer!com.andreacatania.test.RemoteNamer
    java:global/MyWeb2/TheNamer
    java:app/MyWeb2/TheNamer
    java:module/TheNamer

1 个答案:

答案 0 :(得分:0)

您需要过滤掉应该进入ejb-client模块的内容,而不是。如果您没有指定,那么客户端jar将与普通jar完全相同。实现此目的的一种简单方法是将您的接口放在名为api的包中,并在客户端jar中包含与之匹配的内容。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-ejb-plugin</artifactId>
    <version>2.3</version>
    <configuration>
         <!--ejbVersion>3.1</ejbVersion-->
         <generateClient>true</generateClient>
         <clientIncludes>
            <clientInclude>**/api/*</clientInclude>
         </clientIncludes>
    </configuration>
</plugin>