2012-07-19 13 views
1

我正在爲JBoss7.x編寫一個OSGI服務,我需要爲某個域相關的RPC創建一個新的JChannel。我想使用standalone.xml文件中的一個協議棧定義,如果可以的話,我想使用共享傳輸。如何通過standalone.xml文件中的配置在JBoss 7.x中創建JGroups頻道?

我不知道從哪裏開始訪問信息或如何注入信息。

看着JBoss AS代碼我想我可能需要掌握一個JChannelFactory實例。我如何在OSGI中做到這一點?

回答

1

不知道這是推薦的方法,但它確實有效。

首先,獲取對JBoss模塊化服務容器的引用。這可以在OSGI服務註冊表中查找。使用Spring DM /藍圖:

<osgi:reference id="serviceContainer" interface="org.jboss.msc.service.ServiceContainer" /> 

在代碼中使用的服務容器通過名稱來查找給定的服務:

ServiceName sn = ServiceName.of("jboss", "jgroups", "stack", "udp"); 
ServiceController<?> serviceController = serviceContainer.getService(sn); 

if (serviceController == null) { 
    throw new RuntimeException("Failed to lookup service controller for jboss.jgroups.stack.udp"); 
} 

Service<?> service = serviceController.getService(); 
Object obj = service.getValue(); 

ChannelFactory factory = (ChannelFactory) obj; 

如果您需要知道可用的服務名稱,然後調用dumpServices()ServiceContainer上獲取日誌文件中的列表。

如果使用Maven,然後添加你的POM文件在JBoss的MSC的依賴:

<dependency> 
    <groupId>org.jboss.msc</groupId> 
    <artifactId>jboss-msc</artifactId> 
    <version>1.0.2.GA</version> 
</dependency> 

再加上你可能需要爲訪問服務所使用的代碼的任何其他依賴。在上面的例子中,需要依賴於pom文件中的org.jboss.as/jboss-as-clustering-jgroups和org.jgroups/jgroups庫。

你還需要確保這些服務被定義爲在standalone.xml文件功能:

<capability name="org.jgroups"/> 
<capability name="org.jboss.as.clustering.jgroups"/> 
相關問題