我正在将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