如何在Wildfly 8应用服务器中部署EJB 3.0应用
How to deploy EJB 3.0 application in Wildfly 8 application server
我正在将 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
但无法 link 我尝试根据 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:全局///
例如 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,必须使用以java:jboss/exported
开头的JNDI路径
我正在将 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 但无法 link 我尝试根据 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:全局///
例如 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,必须使用以java:jboss/exported