Java開發(fā)者可以利用的遠程技術有以下幾種:
1.遠程方法調用(RMI)
2.Caucho的Hessian和Burlap
3.Spring自己的HTTP invoker
4.EJB
5.Web Services
一.RMI
它由5個包及3個應用工具組成
java.rmi 組織客戶端的RMI類、接口和異常
java.rmi.server 組織服務器端的RMI類 接口和異常
java.rmi.registry 組織用于管理RMI命名服務的類
java.rmi.dgc 組織用于管理分布式垃圾收集的類
java.rmi.activation 組織用于實現(xiàn)按需激活的RMI服務的類
rmic 編譯器,它產(chǎn)生RMI使用的存根和框架以完成分布式通信
rmiregistry 一個為RMI提供命名服務的服務器,這項服務把名字和對象關聯(lián)在一起
rmid 一個支持RMI激活框架的服務器
???? 如果具體還不知道什么是RMI,可以參考這篇非常不錯的文章《JavaRMI入門實戰(zhàn)》
注意:
??? 1)要把PerfectTime 和PerfectTimeI類中的
?? System.setSecurityManager(new RMISecurityManager()); 注釋掉(因為這需要配安全策略,比較麻煩)
???2)還有在JDK5下,用rmic -d命令的話只會輸出一個文件,因為JDK5對RMI進行了優(yōu)化
接下來看看用spring對《JavaRMI入門實戰(zhàn)》例子的簡化
1.客戶端的配置及代碼
PerfectTimeI接口(不用繼承java.rmi.Remote接口了,普通的POJO)
package?com.open.rmi.ex2;

public?interface?PerfectTimeI??
{
????long?getPerfectTime();?
}DisplayPerfectTime類(也是一個普通的類)
package?com.open.rmi.ex2;

public?class?DisplayPerfectTime?
{
????private?PerfectTimeI?pf;

????public?void?display()?
{

????????for?(int?i?=?0;?i?<?10;?i++)?
{
????????????System.out.println("PerfectTime:"?+?pf.getPerfectTime());
????????}
????}
????//省略了pf的get,set方法
}客戶端配置bean_client.xml
<beans>
????<!--客戶端-->
????<bean?id="pf"?class="org.springframework.remoting.rmi.RmiProxyFactoryBean">
????????<property?name="serviceUrl"?value="rmi://192.168.1.8:1099/perfect_time"/>
????????<property?name="serviceInterface"?value="com.open.rmi.ex2.PerfectTimeI"/>
????</bean>
????<bean?id="test"?class="com.open.rmi.ex2.DisplayPerfectTime">
????????<property?name="pf"?ref="pf"/>
????</bean>
</beans>2.服務端的配置及代碼
PerfectTime類(爽吧,簡簡單單的POJO)
package?com.open.rmi.ex2;

public?class?PerfectTime??implements?PerfectTimeI?
{

????public?long?getPerfectTime()?
{
????????return?System.currentTimeMillis();
????}
}配置bean_server.xml
<beans>
????<!--服務端:Spring讀取完定義文件,在生成serviceExporter實例后,RMI服務就會啟動-->
????<bean?id="serviceExporter"
????????class="org.springframework.remoting.rmi.RmiServiceExporter">
????????<property?name="service"?ref="pt"/>
????????<property?name="serviceName"?value="perfect_time"/>
????????<property?name="serviceInterface"?value="com.open.rmi.ex2.PerfectTimeI"/>
????</bean>
????<bean?id="pt"?class="com.open.rmi.ex2.PerfectTime"/>
</beans>3.測試代碼
TestServer.java
package?com.open.rmi.ex2;
import?org.springframework.beans.factory.BeanFactory;
import?org.springframework.context.support.ClassPathXmlApplicationContext;

public?class?TestServer?
{

????public?static?void?main(String[]?args)?
{
????????BeanFactory?bf=new?ClassPathXmlApplicationContext("bean_server.xml");
????????bf.getBean("serviceExporter");
????}
}
TestClient.java
package?com.open.rmi.ex2;

import?org.springframework.beans.factory.BeanFactory;
import?org.springframework.context.support.ClassPathXmlApplicationContext;


public?class?TestClient?
{

????public?static?void?main(String[]?args)?
{
????????BeanFactory?bf?=?new?ClassPathXmlApplicationContext("bean_client.xml");
????????DisplayPerfectTime?test?=?(DisplayPerfectTime)bf.getBean("test");
????????test.display();
????}
}
先運行TestServer,輸出
RmiServiceExporter?-?Could?not?detect?RMI?registry?-?creating?new?one在運行TestClient就可以看到結果了
PerfectTime:1150125107468
PerfectTime:1150125107484
PerfectTime:1150125107484


看到?jīng)],你根本不用運行rmic -d G:\RMI test.PerfectTime,start rmiregistry 。
這就是spring的魅力啊
1.遠程方法調用(RMI)
2.Caucho的Hessian和Burlap
3.Spring自己的HTTP invoker
4.EJB
5.Web Services
一.RMI
它由5個包及3個應用工具組成
java.rmi 組織客戶端的RMI類、接口和異常
java.rmi.server 組織服務器端的RMI類 接口和異常
java.rmi.registry 組織用于管理RMI命名服務的類
java.rmi.dgc 組織用于管理分布式垃圾收集的類
java.rmi.activation 組織用于實現(xiàn)按需激活的RMI服務的類
rmic 編譯器,它產(chǎn)生RMI使用的存根和框架以完成分布式通信
rmiregistry 一個為RMI提供命名服務的服務器,這項服務把名字和對象關聯(lián)在一起
rmid 一個支持RMI激活框架的服務器
???? 如果具體還不知道什么是RMI,可以參考這篇非常不錯的文章《JavaRMI入門實戰(zhàn)》
注意:
??? 1)要把PerfectTime 和PerfectTimeI類中的
?? System.setSecurityManager(new RMISecurityManager()); 注釋掉(因為這需要配安全策略,比較麻煩)
???2)還有在JDK5下,用rmic -d命令的話只會輸出一個文件,因為JDK5對RMI進行了優(yōu)化
接下來看看用spring對《JavaRMI入門實戰(zhàn)》例子的簡化
1.客戶端的配置及代碼
PerfectTimeI接口(不用繼承java.rmi.Remote接口了,普通的POJO)
































PerfectTime類(爽吧,簡簡單單的POJO)




















TestServer.java






































這就是spring的魅力啊
Error creating bean with name 'test' defined in file ......Error setting property values; nested exception is PropertyAccessExceptionsException (1 errors)
你是不是沒補上咯