2017-02-16 72 views
0

简而言之,我想让两个JNDI名称(其中一个仅用于发布消息,另一个仅用于侦听)同时提供同一对象(即JMS主题)。如何在WebLogic中配置JNDI符号链接

如果没有办法创建JNDI符号链接,那么在B中出现的任何其他发布到A中的消息的方式也适用于我。

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

+0

只需在两个不同的JNDI名称下提供相同的配置即可。 – EJP

+0

如果我只是使用相同的设置配置两个主题,它们仍然只是两个单独的主题,而第一个发布的内容不会被转发到第二个主题。 –

回答

0

经过大量试验后,我通过为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() 

PS:上面的代码被放在一起的关键线从我巨大的WLST脚本设置了我所有的JMS资源创建的,所以有一种可能性,即它赢得只是按照原样工作

-1

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

+0

我宁愿将它全部保留在配置中。除非有人建议更简单的方法,否则我将使用自己的服务器地址配置外部服务器对象,并使用它将该主题导入为外部目标。 –