如何在 WebLogic 中配置 JNDI 符号链接

How to configure JNDI symlink in WebLogic

简而言之,我想通过两个 JNDI 名称(其中一个仅用于发布消息,另一个仅用于收听)同时使用同一对象(即 JMS 主题)。

如果无法创建 JNDI 符号链接,那么让发布到 A 的消息出现在 B 中的任何其他方法对我来说也适用。

原因是我有一些遗留代码订阅主题 B 并写入主题 A,我无法更改该代码。
然后在一些服务器上,我需要 A 和 B 是一个相同的,以便让一段代码直接接收另一段代码发送的消息,而在其他服务器上,A 和 B 可以配置为引用一些外部资源。

我想你可以部署一个客户端来监听主题 A 并将其发布到主题 B,在你想要镜像主题的服务器上。

经过大量试验后,我通过使用 JMS 主题及其连接工厂的映射配置外部服务器使其工作。

这是说明我的配置的 wlst 脚本:

startEdit()

cd('/')
mod = 'loopback'
module = cmo.createJMSSystemResource(mod)
module.setTargets(cmo.getClusters())

server = module.createForeignServer('loopback_server')
server.setDefaultTargetingEnabled(true)
server.setInitialContextFactory('weblogic.jndi.WLInitialContextFactory')
# When we don't populate connection parameters (URLs, user, password),
# WebLogic defaults to connecting to the current cluster, which is exactly what we need!

topicLink = server.createForeignDestination('A_to_B')
topicLink.setLocalJNDIName('jms/B/topic')
topicLink.setRemoteJNDIName('jms/A/topic')
cfLink = server.createForeignConnectionFactory('A_to_B_cf')
cfLink.setLocalJNDIName('jms/B/connectionfactory')
cfLink.setRemoteJNDIName('jms/A/connectionfactory')

activate()

P.S.: 上面的代码是通过将我巨大的 wlst 脚本中的关键行放在一起来创建的,这些脚本设置了我所有的 JMS 资源,所以它有可能不会像现在这样工作