如何在Wildfly 8应用程序服务器中部署EJB 3.0应用程序

时间:2015-02-25 11:04:38

标签: java ejb-3.0 wildfly-8 ejb-3.2

我正在将EJB 3.0应用程序从jboss AS 6迁移到wildfly AS 8。

是否有可能在wildfly中轻松地将EJB 3.0应用程序部署到wildfly?根据pom.xml中的wildfly EJB模块更新EJB规范后,我收到编译错误,因为相关的API在wildfly中不可用,所以找不到符号。

org.jboss.ejb3.annotation.LocalBinding;
org.jboss.ejb3.annotation.Depends;
org.jboss.ejb3.annotation.Management;
org.jboss.ejb3.annotation.Service;

以上注释可在jboss-ejb3-ext-api.jar中找到,它是jBoss 6 AS的一部分。

javax.annotation.security.PermitAll

以上注释可在jboss-annotations-api_1.1_spec.jar中找到,它是jBoss 6 AS的一部分。

从文档中我了解到wildfly支持EJB3.2和EJB3.2不支持@LocalBinding / @RemoteBinding.那么我将如何使用standalone.xml / ejb-jar.xml / any other configuration在wildfly中执行相同操作。

我尝试关注博客:JBoss: Binding values into JNDI in JBoss EAP 6 similar to JNDIBindingServiceMgr  但无法链接到我尝试根据jndi名称查找EJB bean的地方,但无效。

请帮忙。非常感谢。

1 个答案:

答案 0 :(得分:0)

使用@Remote和@Local注释bean接口。 使用@Stateless注释bean实现。

使用maven构建项目以生成EJB JAR和客户端JAR(如果在EAR之外使用它,则排除服务器实现)。

<build>
    <plugins>
        <!-- maven-ejb-plugin -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ejb-plugin</artifactId>
            <configuration>
                <clientExcludes>
                    <clientExclude>**/ejb/*</clientExclude>
                </clientExcludes>
            </configuration>
        </plugin>
    </plugins>
</build>

将EJB打包在EAR中。 (这是可选的,但我将Web模块部署为一个.ear文件。)

为了能够知道EJB的JNDI名称,Wildfly遵循标准命名约定。 `的java:全球///

例如,ear的名称为my-ear,ejb名称为my-ejbs,bean接口为a.b.c.MyBeanRemote,实现为a.b.c.ejb.MyBean:远程JNDI路径为java:global/my-ear/my-ejbs/MyBean或更详细的java:global/my-ear/my-ejbs/MyBean!a.b.c.MyBeanRemote

要生成此部署结构,我在耳朵项目中使用以下配置:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-ear-plugin</artifactId>
            <configuration>
                <version>7</version>
                <applicationId>my-ear</applicationId>
                <applicationName>my-ear</applicationName>
                <defaultLibBundleDir>/lib</defaultLibBundleDir>
                <jboss>
                    <version>5</version>
                    <unauthenticated-principal>guest</unauthenticated-principal>
                    <security-domain>ABC</security-domain>
                </jboss>
                <modules>
                    <webModule>
                        <groupId>a.b.c.my-group</groupId>
                        <artifactId>my-web-app</artifactId>
                        <uri>my-web-app.war</uri>
                        <contextRoot>/my-web-app</contextRoot>
                    </webModule>
                    <ejbModule>
                        <groupId>a.b.c.my-group</groupId>
                        <artifactId>my-ejbs</artifactId>
                        <uri>my-ejbs.jar</uri>
                    </ejbModule>
                </modules>
            </configuration>
        </plugin>
    </plugins>
</build>

<applicationName>my-ear</applicationName>将设置我的应用程序EAR使用的正确名称(没有版本)。

<uri>my-ejbs.jar</uri>将删除我的ejb模块的版本,因此它不会反映在JNDI路径中。

提示:部署EAR时,bean的JNDI名称将打印在日志文件中。

如果要从应用程序服务器外部访问bean,则必须使用以java:jboss/exported

开头的JNDI路径