我正在将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的地方,但无效。
请帮忙。非常感谢。
答案 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