1

JBoss7.x用のOSGIサービスを作成していますが、ドメイン関連のRPC用に新しいJChannelを作成する必要があります。スタンドアロン.xmlファイルのプロトコルスタック定義の1つを使用したいのですが、可能であれば共有トランスポートを使用したいと思います。

どこから情報にアクセスし始めるのか、どのように情報を注入するのかわかりません。

JBoss ASコードを見ると、おそらくJChannelFactoryインスタンスを取得する必要があると思います。OSGIでこれをどのように行うのですか?

4

1 に答える 1

1

推奨されるアプローチかどうかはわかりませんが、機能します。

まず、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"/>
于 2012-07-23T08:07:44.930 に答える