我正在爲JBoss7.x編寫一個OSGI服務,我需要爲某個域相關的RPC創建一個新的JChannel。我想使用standalone.xml文件中的一個協議棧定義,如果可以的話,我想使用共享傳輸。如何通過standalone.xml文件中的配置在JBoss 7.x中創建JGroups頻道?
我不知道從哪裏開始訪問信息或如何注入信息。
看着JBoss AS代碼我想我可能需要掌握一個JChannelFactory實例。我如何在OSGI中做到這一點?
我正在爲JBoss7.x編寫一個OSGI服務,我需要爲某個域相關的RPC創建一個新的JChannel。我想使用standalone.xml文件中的一個協議棧定義,如果可以的話,我想使用共享傳輸。如何通過standalone.xml文件中的配置在JBoss 7.x中創建JGroups頻道?
我不知道從哪裏開始訪問信息或如何注入信息。
看着JBoss AS代碼我想我可能需要掌握一個JChannelFactory實例。我如何在OSGI中做到這一點?
不知道這是推薦的方法,但它確實有效。
首先,獲取對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"/>