0

Spring リモーティングと OSGI を使用しています。

   <bean id="httpServer" class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
        <property name="contexts">
        <util:map>
            <entry key="/remoting/Service1" value-ref="serviceBean1"/>
        </util:map>
        </property>
        <property name="port" value="8080" />
   </bean>   

以下のように動的リストを宣言します。

<osgi:list id="serviceList" interface="com.xyz.IRemoteService" member-type="service-object">

これらのサービスを動的に登録できるようになりました。ある時点で、serviceList は com.xyz.IRemoteService を実装するすべてのサービス参照を保持します。このサービス リストを contexts プロパティに設定するにはどうすればよいですか?

更新 1:

com.xyz.IRemoteService には 2 つのメソッドがあり、1 つはキー、つまり URL を返し、もう 1 つは SimpleHttpInvokerServiceExporter オブジェクトを返します。

<bean id="httpServer" class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
    <property name="contexts">
        <util:map>
        <entry key="/remoting/ArchiveEDSImpl" value-ref="archiveEDS" />
        <entry key="#{serviceList[0].url}" value="#{serviceList[0].httpHandler}" />
        <entry key="#{serviceList[1].url}" value="#{serviceList[1].httpHandler}" />
        </util:map>
    </property>
    <property name="port" value="8081" />
</bean>

<osgi:list id="serviceList" interface="com.xyz.IRemoteServiceProvider" member-type="service-object">
</osgi:list>

これはすばらしいことですが、bean httpserver が初期化されるときに serviceReferenceList に少なくとも 2 つの要素がある場合にのみ機能します。リストのサイズに基づいてこれを動的に構成するにはどうすればよいですか??

4

2 に答える 2

0

util:map を使用する代わりに、IRemoteServiceProvider に接続してマップを出力するファクトリまたは Bean を定義できます。

class MyMapFactory {
  List<IRemoteServiceProvider> providers;
  public Map buildMap() {
    //build Map of urls to http handlers here.
    // if the map wraps the list directory it can possibly even be dynamic! Depending on
    // whether SimpleHttpServerFactoryBean clones the map or uses it directly.
  }
}

<bean class="MyMapFactory" id="myMapFactory"/>

<bean id="httpServer" class="org.springframework.remoting.support.SimpleHttpServerFactoryBean">
  <property name="contexts">
    <bean factory-bean="myMapFactory" factory-method="buildMap" class="java.util.Map"/> 
  </property>
  <property name="port" value="8081" />
</bean>

<osgi:list id="serviceList" interface="com.xyz.IRemoteServiceProvider" member-type="service-   object">
</osgi:list>
于 2013-09-13T21:20:00.020 に答える
0

シーナさん返信ありがとうございます。SimpleHttpServerFactoryBean は参照ではなく Map のコピーを保持していることが判明しました。したがって、コンテキスト プロパティは、Bean が初期化されるときに設定されます。それを更新する他の方法が見つかりませんでした。

回避策として、SimpleHttpServerFactoryBean Bean が初期化されているバンドルを更新する必要がありました。

より良い解決策があれば教えてください。

于 2013-09-16T14:10:21.443 に答える