ejb - 如何在没有硬编码 JNDI 名称的情况下配置 Java 消息驱动 Bean 和 Websphere 激活规范?

标签 ejb jndi websphere-8 message-driven-bean

我们有一个 MDB 监听一个队列读取数据并将数据发送到另一个队列

@MessageDriven(
        activationConfig = { @ActivationConfigProperty(
                propertyName = "destinationType", propertyValue = "javax.jms.Queue"
        ) }, 
        mappedName = "jms/dataQ")
public class DataMDB implements MessageListener {

@Resource(name="jms/dataQueueConnectionFactory")
private ConnectionFactory connectionfactory;

@Resource(name="jms/dataDestinationQ")
private Destination destination;

...
}

和一个带有 bean 配置的 XML (ibm-ejb-jar-bnd.xml)
<?xml version="1.0" encoding="UTF-8"?>
<ejb-jar-bnd xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://websphere.ibm.com/xml/ns/javaee"
    xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee   http://websphere.ibm.com/xml/ns/javaee/ibm-ejb-jar-bnd_1_0.xsd"
    version="1.0">

<message-driven name="DataMDB">
        <jca-adapter activation-spec-binding-name="eis/dataListenerMDB"
            destination-binding-name="jms/dataQ" />
        <resource-ref name="jms/dataQueueConnectionFactory"
            binding-name="jms/dataQueueConnectionFactory" />
        <resource-env-ref name="jms/dataDestinationQ"
            binding-name="jms/dataDestinationQ" />
    </message-driven>

</ejb-jar-bnd>

和 WebSphere 上此 MDB 的激活规范

WAS Activation Specification

正如我在 Google 上看到的示例,这是 MDB 和 WAS 激活设置的典型示例。

我们这里有一个问题,因为这里看到的所有 JNDI 名称都是在 Java 代码注释以及 ibm-ejb-jar-bnd.xml 文件中硬编码的。

那么有没有一种方法可以将这些 JNDI 名称带到 EJB 项目之外,这样我们就可以为所有客户构建一个项目,并且客户可以自由地拥有他们的标准 JNDI 名称。

否则,我们必须为每个客户构建不同的 .ear,这并不理想。

提前感谢人们。
欢迎任何想法。

最佳答案

ibm-ejb-jar-bnd.xml 中定义的所有值将引用映射到实际的 JNDI 名称。这可以在应用程序安装期间(在管理控制台中映射对 JNDI 名称步骤的引用)、在应用程序安装之后或在使用脚本进行安装期间为您的每个客户覆盖。

绑定(bind)文件 (ibm-ejb-jar-bnd.xml) 仅提供“默认名称”,以防您不想在安装期间更改它们。

关于ejb - 如何在没有硬编码 JNDI 名称的情况下配置 Java 消息驱动 Bean 和 Websphere 激活规范?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25159765/

相关文章:

java - 使用事务测试 EJB 而不将其部署到容器中?

java - 在 Payara 5 中部署包含 ejb-module 的ear-file 时出现问题

java - EJB 容器内可能的 JNDI 查找

java - 使用 JUnit 测试 ServiceLocator

jakarta-ee - 设置类加载顺序以在 Java EE 应用程序中更喜欢应用程序类的缺点是什么

java - J2EE,实体 Bean - User1 扩展 User

java - 处理单例 EJB 上的私有(private)写入方法

java - GSSAPI 之后 JNDI 搜索不起作用(使用 Kerberos 进行身份验证)

websphere-8 - eclipse 和 websphere 8.0 - 无法更改上下文根

java - Websphere 85 ejb 3 部署问题