2017-02-16 34 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

我寧願將它全部保留在配置中。除非有人建議更簡單的方法,否則我將使用自己的服務器地址配置外部服務器對象,並使用它將該主題導入爲外部目標。 –