我们有一个 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 的激活规范
正如我在 Google 上看到的示例,这是 MDB 和 WAS 激活设置的典型示例。
我们遇到了一个问题,因为此处看到的所有 JNDI 名称都硬编码在 Java 代码注释以及 ibm-ejb-jar-bnd.xml 文件中。
有没有一种方法可以将这些 JNDI 名称带到 EJB 项目之外,这样我们就可以为所有客户构建一个项目,并且客户可以自由地拥有他们的标准 JNDI 名称。
否则我们必须为每个客户构建不同的.ear,这并不理想。
提前感谢大家。 欢迎任何想法。
ibm-ejb-jar-bnd.xml
中定义的所有值都会将引用映射到实际的 JNDI 名称。在应用程序安装期间(将引用映射到管理控制台中的 JNDI 名称步骤)、应用程序安装之后或使用脚本安装期间,每个客户都可以覆盖此设置。
绑定文件 (ibm-ejb-jar-bnd.xml) 仅提供“默认名称”,以防您在安装过程中不想更改它们。
谢谢。您能否提供带有绑定 XML 和 xmi 的示例项目。它对我真的很有帮助