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.jarjBoss 6 AS 中找到。

javax.annotation.security.PermitAll

上面的注释可以在jboss-annotations-api_1.1_spec.jarjBoss 6 AS 中找到。

从文档中,我了解到 wildfly 支持 EJB3.2 而 EJB3.2 不支持@LocalBinding / @RemoteBinding.那么我将如何在 wildfly 中使用standalone.xml / ejb-jar.xml / any other configuration.

我尝试关注博客:JBoss:在 JBoss EAP 6 中将值绑定到 JNDI,类似于 JNDIBindingServiceMgr ,但无法链接我尝试根据 jndi 名称查找 EJB bean 的位置,但没有成功。

请帮忙。非常感谢。

4

1 回答 1

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

例如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

为了生成这种部署结构,我在我的 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,则必须使用以开头的 JNDI 路径java:jboss/exported

于 2015-02-25T13:53:52.400 回答