我使用 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 有两种方法,一种返回密钥,即 url,另一种返回 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 个元素时才有效。如何根据列表中的大小动态配置它?