Spring RMI配置多个服务

来源:互联网 发布:淘宝运营简历模板下载 编辑:程序博客网 时间:2024/05/01 00:58

在使用Spring RMI时可能会遇到发布多个服务的需求,假设一个服务要操作文件,另一个服务要往屏幕上打印“hello world”。难道要把这两个风马牛不相及的服务写在一个接口里吗!如果真这样那结构也太差了。

网上有人问这个问题:“http://topic.csdn.net/u/20090702/11/9bcf60e5-f3f8-4401-a41d-2f98535988b9.html”,看样子这个问题难住了一些人,因为他们想在一个serviceName里面发布多个serviceInterface。其实转换个思维也就不会被难倒了。倘若在一个serviceName里面发布多个serviceInterface,那么service又该怎么配呢,难道用个list将serviceInterface和service对应起来?显然是行不通的。

解决办法很简单:配置多个RmiServiceExporter的bean,使不同的服务(属性:service)用不同的服务名(属性:serviceName)和接口(属性:serviceInterface)。给个demo就更清晰了:

1: <bean id="oper1" class="***.Oper1"></< span>bean>
2: <bean id="rmiService_oper1" class="org.springframework.remoting.rmi.RmiServiceExporter">
3: <property name="serviceName">
4: <value>oper1</< span>value>
5: </< span>property>
6: <property name="service">
7: <ref local="oper1" />
8: </< span>property>
9: <property name="serviceInterface">
10: <value>***.IOper1</< span>value>
11: </< span>property>
12: <property name="registryPort">
13: <value>9990</< span>value>
14: </< span>property>
15: </< span>bean>
16:
17: <bean id="oper2" class="***.Oper2"></< span>bean>
18: <bean id="rmiService" class="org.springframework.remoting.rmi.RmiServiceExporter">
19: <property name="serviceName">
20: <value>oper2</< span>value>
21: </< span>property>
22: <property name="service">
23: <ref local="oper2" />
24: </< span>property>
25: <property name="serviceInterface">
26: <value>***.IOper2</< span>value>
27: </< span>property>
28: <property name="registryPort">
29: <value>9990</< span>value>
30: </< span>property>
31: </< span>bean>

service、serviceName和serviceInterface都不一样,端口可以相同。

客户端的配置也很简单了:

1: <bean id="rmiClient_oper1" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
2: <property name="serviceUrl">
3: <value>rmi://192.168.0.***:9990/oper1</< span>value>
4: </< span>property>
5: <property name="serviceInterface">
6: <value>***.IOper1</< span>value>
7: </< span>property>
8: </< span>bean>
9: <bean id="rmiClient_oper2" class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
10: <property name="serviceUrl">
11: <value>rmi://192.168.0.***:9990/oper2</< span>value>
12: </< span>property>
13: <property name="serviceInterface">
14: <value>***.IOper2</< span>value>
15: </< span>property>
16: </< span>bean>

main里运行:

1: public static void main(String[] args) {
2: ApplicationContext ctx = new ClassPathXmlApplicationContext(
3: "applicationContext-client.xml");
4: IOper1 o1 = (IOper1) ctx.getBean("rmiClient_oper1");
5: o1.exeuteFile();
6:  
7: IOper2 o2 = (IOper2) ctx.getBean("rmiClient_oper2");
8: o2.printHelloWorld();
9: }

这主要是个思路问题,没什么巧的。

0 0
原创粉丝点击