gpt4 book ai didi

jboss - 配置 JBoss JNDI 以绑定(bind)到不同服务器上的 JNDI?

转载 作者:行者123 更新时间:2023-12-04 18:35:58 42 4
gpt4 key购买 nike

我有两个 JBoss 服务器,JbossA 和 JbossB。每个都有自己的 JNDI。现在我在 JbossA 上有一个名为 jms/Client 的 JMS,在 JbossB 上有一个名为 jms/Server 的 JMS。

现在我希望 JbossA 上的应用程序能够使用它自己的 JNDI 访问 jms/Server。我还希望 JbossB 上的应用程序使用 jndi 名称 jms/Client1 使用它自己的 JNDI 来访问 jms/Client。

简而言之:

JbossA/
JNDI/
jms/Client
jms/Server -> JbossB/JNDI/jms/Server


JbossB/
JNDI/
jms/Server
jms/Client1 -> JBossA/JNDI/jms/Client
  • JbossA 上的 AppA 使用 JbossA/JNDI 访问 jms/Client 和 jms/Server
  • JbossB 上的 AppB 使用 JbossB/JNDI 访问 jms/Server 和 jms/Client1

两个问题:

  1. 这可能吗?
  2. 如果是这样,我将如何在 JBoss EAP 6.0.1 (Jboss 7.1) 中配置它?

最佳答案

首先,我想不出您想要查找 MDB 的充分理由,这些应该仅由容器调用(准确地说是由 JMS 实现调用),但是如果您尝试查找 JMS 发布者或连接,然后您的要求完全有意义。

话虽如此,JBoss 7 引入了一个不错的新功能,Remote Naming Project完全满足您的需求,问题是,显然,它只能绑定(bind)远程 EJB,您可以尝试一下。我个人认为 JBoss 团队(我非常感谢他们做出了如此出色的工作)在这方面有点落后(也许他们有充分的理由?),其他 JEE 容器已经能够做到这已经有一段时间了,在 Weblogic 中它被称为 Foreign JNDI Binding ,但无论如何,如果上述方法不起作用,而您绝对需要这样做,恐怕剩下的唯一解决方案就是以编程方式进行,在这种情况下,请继续阅读下文。

javax.naming API 提供了一种将引用 绑定(bind)到本地命名上下文之外的对象的方法,只需使用InitialContext.bind(String name, Object obj)。 , 但不是绑定(bind)实际对象而是绑定(bind) javax.naming.Reference 的实例.正如您从 javadocs 中看到的那样,要创建 Reference 实例,您需要提供 javax.naming.RefAddr 的实现实例。包含定位远程对象的必要信息和 javax.naming.spi.ObjectFactory 的实现这是引擎盖下将进行实际查找以获取远程对象的对象。它看起来像这样:

InitialContext ctx = new InitialContext();
ForeignJNDIObjectRefAddr refAddr = getRemoteObjectJNDIInfo(...;
ctx.bind("jms/Server", new Reference("java.lang.Object",
refAddr, ForeignJNDIObjectFactory.class.getName(), null));

在这种情况下,您将实现 ForeignJNDIObjectRefAddrForeignJNDIObjectFactory,当需要进行查找时,您的 ForeignJNDIObjectFactory.getObjectInstance 方法将使用 ForeignJNDIObjectRefAddr 实例作为其第一个参数进行调用,以便您拥有所有必要的信息来进行查找并返回您的远程对象。祝你好运!

关于jboss - 配置 JBoss JNDI 以绑定(bind)到不同服务器上的 JNDI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21699040/

42 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com