本人刚刚毕业半年,第一次写技术方面的文章,主要目的就是记录自己在工作中以及平时学习过程中对一些知识点的理解,与大家一起分享,肯定有写的不好的地方和错误,希望给位批评指出,大家一起成长,谢谢~~。下面是关于EJB调用与java RMI方面的自己见解。
用过服务器的程序员应该都知道,在rich client 或者通过其他方式调用服务器端部署的EJB应用时一般都是在客户端调用lookup(“JndiName”)向服务器端发送一个lookup的jndi名称,然后服务器端存在这个JNDI名称的话会向客户端返回一个与JNDI绑定的ejb对象,最后客户端通过这个返回的EJB对象来调用业务方法。整个EJB的调用过程原理大体就是这样,但是对于EJB容器的具体实现还是比较复杂的,本人水平有限还达不到详述的水平。就整个这个EJB调用的过程而言,最基础的理论基础就是RMI,实际上EJB容器对于这些的具体实现就是RMI,
第一步:创建一个简单的远程接口
第二步:对远程接口实现
第三步:创建一个远程服务端:
第四步:创建客户端,并访问远程端绑定的对象
用过服务器的程序员应该都知道,在rich client 或者通过其他方式调用服务器端部署的EJB应用时一般都是在客户端调用lookup(“JndiName”)向服务器端发送一个lookup的jndi名称,然后服务器端存在这个JNDI名称的话会向客户端返回一个与JNDI绑定的ejb对象,最后客户端通过这个返回的EJB对象来调用业务方法。整个EJB的调用过程原理大体就是这样,但是对于EJB容器的具体实现还是比较复杂的,本人水平有限还达不到详述的水平。就整个这个EJB调用的过程而言,最基础的理论基础就是RMI,实际上EJB容器对于这些的具体实现就是RMI,
第一步:创建一个简单的远程接口
package com.rmi.demo;
import java.rmi.Remote;
import java.rmi.RemoteException;
public interface FirstRmiInterface extends Remote{
public void sayHello() throws RemoteException;
}
第二步:对远程接口实现
package com.rmi.demo;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
public class FirstRmiInterfaceImpl extends UnicastRemoteObject implements FirstRmiInterface{
protected FirstRmiInterfaceImpl() throws RemoteException {
super();
// TODO Auto-generated constructor stub
}
/**
*
*/
@Override
public void sayHello() throws RemoteException {
// TODO Auto-generated method stub
System.out.println("HELLO WORLD FIRST RMI DEMO");
}
}
第三步:创建一个远程服务端:
package com.rmi.demo;
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[]){
try {
LocateRegistry.createRegistry(1000);
FirstRmiInterface rmiInterface = new FirstRmiInterfaceImpl();
Naming.bind("rmi://localhost:1000/rmiObject",rmiInterface);
//在远程服务器端绑定远程对象的接口,供客户端进行远程调用。实际上这个简单的模型就是ejb远程调用的简单模型。这里的远程服务端绑定对象相当于在应用服务器(weblogic、glassfish等)端部署一个EJB应用,这时服务器的EJB容器就会将部署的EJB以JNDI的形式发布【也可以其他形式】,然后客户端就可以通过特定的方式进行远程EJB的调用访问。
System.out.println("Rmi Bind Success");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (AlreadyBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
第四步:创建客户端,并访问远程端绑定的对象
package com.rmi.demo;
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[]){
FirstRmiInterface rmiInterface;
try {
rmiInterface = (FirstRmiInterface)Naming.lookup("rmi://localhost:1000/rmiObject");
rmiInterface.sayHello();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (NotBoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}