根据EJB JNDI Naming Reference,会话 bean 的 JNDI 查找名称具有以下语法:
ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?stateful
因此,您想要的可以通过两种方式实现:
- 修改可交付文件的名称(WAR 和 EAR)
为了从您的 WAR 中删除该版本,您可以在您的 WAR 的 POM 中执行以下操作:
<build>
<plugins>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<warName>${project.artifactId}</warName>
</configuration>
</plugin>
</plugins>
</build>
关于您的 EAR,为了从中删除版本,您可以在 EAR 的 POM 中放置以下内容:
<build>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
(...)
<finalName>${project.artifactId}</finalName>
(...)
</configuration>
</plugin>
</plugins>
</build>
使用上面的配置,你会有类似的东西:
.../TestGroup-ear/TestGroup-war/...
- 利用ejb-jar.xml和application.xml文件
创建一个ejb-jar.xml,包含以下内容,并将其放在 WAR 的src/main/webapp/WEB-INF文件夹下:
<ejb-jar xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/ejb-jar_3_2.xsd"
version="3.2">
<module-name>someModuleName</module-name>
</ejb-jar>
之后,在 EAR 的src/main/resources/META-INF文件夹下放置一个application.xml文件,其中包含以下内容:
<?xml version="1.0" encoding="UTF-8"?>
<application xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/application_7.xsd"
version="7">
<application-name>someApplicationName</application-name>
</<module>
<web>
<web-uri>TestGroup-war-${project.version}.war</web-uri>
<context-root>testGroup</context-root>
</web>
</module>
</application>
然后,在您的 JNDI 上,您将拥有如下内容:
java:global/someApplicationName/someModuleName/TestService!org.pkg.ejb.local.CRMDataServiceLocal
java:app/someModuleName/TestService!org.pkg.ejb.local.CRMDataServiceLocal
java:module/TestService!org.pkg.ejb.local.CRMDataServiceLocal
java:global/someApplicationName/someModuleName/TestService
java:app/someModuleName/TestService
java:module/TestService
更新
从 2.5 版开始,Maven EAR 插件具有no-version
可以设置为 property 的选项,fileNameMapping
以便从您的工件中省略版本:
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<configuration>
(...)
<fileNameMapping>no-version</fileNameMapping>
(...)
</configuration>
</plugin>