覆盖 JBoss EJB3.1 中的 JNDI 名称

overriding JNDI names in JBoss EJB3.1

我们正在使用 Maven 和 Artifactory,因此我们的 ear 文件的名称类似于

 our-project-ear-0.0.1-20151215.151526-3.ear. 

因此我们的 EJB 的 JNDI 名称具有类似

的名称
java:global/our-project-ear/our-project-ejb/AnEjbJar!com.acme.ourproject.SomeEjb.

这些名字不仅丑陋而且复杂,它们还嵌入了 Maven/Artifactory 添加的临时后缀。

我认为我们可以通过 JBoss 特定的 @RemoteHomeBinding 注释来简化名称,但我在 EAP 6.3 中找不到此注释。还有办法做到这一点吗?如果不是,我如何控制发布我的 EJB 的 JNDI 名称?

我自己想出来了。 @RemoteBinding@LocalBinding@RemoteHomeBinding@LocalHomeBinding 注释已在 AS7.x 中逐步淘汰。 A version of the JBoss instructions for migrating from AS5/6 to AS7 (not the current one) 状态:

>In AS7 there is no possibility for custom JNDI names of EJB beans and it's not planned for 7.1.

>Therefor the annotation @RemoteBindings and @LocalBindings are not available.

推荐的方法是使用默认绑定。但是,也可以通过 @EJB 注释定义自定义 JNDI 名称,如 this Oracle blog:

中所述

The developer can select an additional JNDI name that resolves to a particular client view of a session bean by using the @EJB annotation. Starting with Java EE 6, the @EJB name() attribute value can be prefixed with any one of the three portable Java EE namespaces : java:global, java:app, java:module. This has the effect of exporting the dependency into the selected scope.

我想你要找的是:

@Ejb(lookup="java:/global/somecustomPath")

因为这不会影响在 JNDI 中绑定 bean 的位置,而是会影响在 JNDI 中找到它的位置。

如果我是对的,这是因为 JBOSS7 是一个 JEE6 应用程序服务器,并且 JEE6 在 JEE6 中引入了可移植全局 JNDI 名称的概念。