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

时间:2014-08-06 11:54:39

标签: 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代码anotations和ibm-ejb-jar-bnd.xml文件中硬编码的。

因此有一种方法可以将这些JNDI名称带到EJB项目之外,因此我们可以为所有客户构建一个项目,并且客户可以自由地拥有其标准JNDI名称。

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

先谢谢大家。 欢迎任何想法。

1 个答案:

答案 0 :(得分:5)

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

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