webservice之rmi
来源:互联网 发布:淘宝太坑图片 编辑:程序博客网 时间:2024/05/21 09:54
rmi也可以实现webservice的功能。
定义一个接口,必须继承remote
import java.rmi.Remote;import java.rmi.RemoteException;public interface IRmi extends Remote {public String test() throws RemoteException;public String testName(String name) throws RemoteException;}
实现这个接口:继承unicastremoteonject.
import java.rmi.RemoteException;import java.rmi.server.UnicastRemoteObject;public class RmiImpl extends UnicastRemoteObject implements IRmi {/** */private static final long serialVersionUID = 1L;protected RmiImpl() throws RemoteException {super();}@Overridepublic String test() throws RemoteException {return "rmi";}@Overridepublic String testName(String name) throws RemoteException {return name;}}
- rmi的服务类。如下
public class UnicastRemoteObject
- extends RemoteServer
Used for exporting a remote object with JRMP and obtaining a stub that communicates to the remote object.
For the constructors and static exportObject
methods below, the stub for a remote object being exported is obtained as follows:
- If the remote object is exported using the
UnicastRemoteObject.exportObject(Remote)
method, a stub class (typically pregenerated from the remote object's class using thermic
tool) is loaded and an instance of that stub class is constructed as follows.- A "root class" is determined as follows: if the remote object's class directly implements an interface that extends
Remote
, then the remote object's class is the root class; otherwise, the root class is the most derived superclass of the remote object's class that directly implements an interface that extendsRemote
. - The name of the stub class to load is determined by concatenating the binary name of the root class with the suffix
"_Stub"
. - The stub class is loaded by name using the class loader of the root class. The stub class must extend
RemoteStub
and must have a public constructor that has one parameter, of typeRemoteRef
. - Finally, an instance of the stub class is constructed with a
RemoteRef
.
- A "root class" is determined as follows: if the remote object's class directly implements an interface that extends
- If the appropriate stub class could not be found, or the stub class could not be loaded, or a problem occurs creating the stub instance, a
StubNotFoundException
is thrown. - For all other means of exporting:
- If the remote object's stub class (as defined above) could not be loaded or the system property
java.rmi.server.ignoreStubClasses
is set to"true"
(case insensitive), aProxy
instance is constructed with the following properties:- The proxy's class is defined by the class loader of the remote object's class.
- The proxy implements all the remote interfaces implemented by the remote object's class.
- The proxy's invocation handler is a
RemoteObjectInvocationHandler
instance constructed with aRemoteRef
. - If the proxy could not be created, a
StubNotFoundException
will be thrown.
- Otherwise, an instance of the remote object's stub class (as described above) is used as the stub.
- If the remote object's stub class (as defined above) could not be loaded or the system property
启动一个rmi服务器:
import java.net.MalformedURLException;import java.rmi.AlreadyBoundException;import java.rmi.Naming;import java.rmi.RemoteException;import java.rmi.registry.LocateRegistry;public class RmiServer {public static void main(String[] args) {IRmi ir = null;try {ir = new RmiImpl();} catch (RemoteException e) {e.printStackTrace();}try {LocateRegistry.createRegistry(8888);Naming.bind("rmi://localhost:8888/IRmi123", ir);} catch (RemoteException e) {e.printStackTrace();} catch (MalformedURLException e) {e.printStackTrace();} catch (AlreadyBoundException e) {e.printStackTrace();}}}
LocateRegistry.createRegistry(8888);//注册服务,绑定端口
Naming.bind("rmi://localhost:8888/IRmi123", ir);//给接口绑定服务,绑定的是接口哦。
下面写一个rmi客户端:
import java.net.MalformedURLException;import java.rmi.Naming;import java.rmi.NotBoundException;import java.rmi.RemoteException;public class RmiClient {public static void main(String[] args) {try {IRmi ir = (IRmi) Naming.lookup("rmi://localhost:8888/IRmi123");System.out.println(ir.test());System.out.println(ir.testName("rmi啊"));} catch (MalformedURLException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (RemoteException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (NotBoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
lookup是根据url服务区找对应的接口。记住,你绑定的是什么就找什么。
rmi实现webservice比较麻烦,因为它依赖的接口太多,很死,且只能在java中用。
0 0
- webservice之rmi
- 远程调用之RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- rpc 协议规范 之 rmi http webservice 和 一些框架
- RPC、RMI、JMS、WebService
- RMI跟WebService区别
- [转]RMI、WebService、REST
- webservice,RMI和hession
- rmi和webservice的区别
- 工作随笔(RMI、WebService、REST)
- rmi webservice socket 协议 区别
- webService和RMI的区别
- RMI * Hessian * Burlap * Httpinvoker * WebService
- axis调用RMI模式WebService
- RMI、Hessian、Burlap、Httpinvoker、WebService
- Java RMI之HelloWorld RMI
- 使用WebService 和RMI远程协作
- 七、axis调用RMI模式WebService
- RMI、Hessian、Burlap、Httpinvoker、WebService的比较
- duilib进阶教程 -- 改进List控件_优化支持多选拉伸 (2)
- Linux中的虚拟化
- 【WPF】The example of progress bar, label status changed by background worker
- DataTable如何删除特定行
- 37wan《魔龙诀》首创套装收集 新年战力新飙升
- webservice之rmi
- mysql中having和where的区别
- java普通类在任意位置得到spring 中的bean
- [转]Linux内核的文件预读(readahead)
- 我也说说bogomips
- mysql索引类型normal,unique,full text
- 关于android中网络图片下载中oom解决开源框架Afinal的探究
- 调大预读缓冲区大小来提高性能
- 将摄像头原始RGB数据流编码成H.264文件