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



我正在将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:在JBoss EAP 6中将值绑定到JNDI中,类似于JNDIBindingServiceMgr但无法链接我尝试基于jndi名称查找EJB bean的位置,但没有成功。

请帮忙。非常感谢。

用@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:global///

例如,ear具有名称my-ear、ejb名称my-ejbs和bean接口a.b.c.MyBeanRemote,并且实现a.b.c.ejb.MyBean:Remote JNDI路径将是java:global/my-ear/my-ejbs/MyBean或更详细的java:global/my-ear/my-ejbs/MyBean!a.b.c.MyBeanRemote

为了生成这种部署结构,我在ear项目中使用了以下配置:

<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路径

最新更新