推奨されるアプローチかどうかはわかりませんが、機能します。
まず、JBoss ModularServiceContainerへの参照を取得します。これは、OSGIサービスレジストリで調べることができます。Spring DM / Blueprintの使用:
<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ファイルにJBossMSCへの依存関係を追加します。
<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"/>