用@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