EJB3 Websphere 自定义 JNDI 绑定

问题描述 投票:0回答:1

我有一个应用程序,我正在将应用程序(具体来说是 EJB 应用程序)从 EJB 2.1 迁移到 EJB 3.1。

现在,我想要一个无状态 bean 的自定义 JNDI 映射。 我已使用无状态注释设置了映射名称,但它仅在 ejb-jar_merged.xml 文件中设置映射名称 XML 标记。

现在,我想以编程方式设置以下

simple-binding-name
,可能通过使用 EJB3.1 注释。这样可以吗?

我除了下面的 ibm-ejb-jar-bnd.xml 看起来像这样(可能不需要手动创建此文件)。

<session name="SomeEJBBean" simple-binding-name="ejb/org.abc.ejbclient.SomeEJBBean"/>

非常感谢任何帮助。

java java-8 websphere ejb ejb-3.1
1个回答
0
投票

对于直接 EJB 查找,在 WebSphere 中为 EJB 配置自定义 JNDI 名称的唯一方法是使用

ibm-ejb-jar-bnd.xml
文件。没有从注释生成此文件的机制,也没有方法提供带有注释的自定义 JNDI 名称。

为了提高 EJB 应用程序的可移植性,EJB 3.1 规范为 java:global、java:app 和 java:module 中的所有 EJB 添加了明确定义的 JNDI 名称,但没有提供自定义这些绑定名称的方法。

EJB 规范还引入了

mappedName
@Stateless
注释的
@Stateful
属性。然而,该属性具有未定义的行为并且不是必需的,因此 WebSphere 选择不提供该属性的实现,因为它不可移植。

要考虑的另一个选项是应用程序可以通过使用 EJB 引用为 EJB 提供“自定义”JNDI 名称(即

<ejb-ref>
<ejb-local-ref>
注释中的
ejb-jar.xml
@EJB
)。

考虑以下示例:

@Stateless
@Remote(ClientRemote.class)
@EJB(name="java:global/env/ejb/ClientBeanRef", beanInterface=ClientRemote.class, beanName="ClientBean")
public class ClientBean

规范为

ClientBean
定义的 JNDI 名称类似于:

java:global/TestApp/TestEJBModule/ClientBean!org.test.ClientRemote

因此,可以使用此名称直接查找 bean,或者,如果使用 EJB 引用名称,则它只是:

java:global/env/ejb/ClientBeanRef

或 java:global、java:app 或 java:module 命名上下文中的

@EJB
注释上指定的任何其他名称。

请注意,为 EJB 引用提供的绑定在瘦客户端中不可见,因此如果这对您的应用程序很重要,则这可能不是一个选项。

有关 WebSphere 中其他 EJB 绑定相关选项的完整详细信息可以在此处找到:

© www.soinside.com 2019 - 2024. All rights reserved.