前面我已经转载一边基于weblogic服务器、RMI技术的远程方法调用,现在我们来看一下基于EJB3.0的远程方法调用的实现过程。
其实这两种都是一个同样的原理,于weblogic服务器作为中转站。实现服务端与客户端间的参数和返回值的传输,而唯一不同的地方:RMI技术是通过注册的方式写入到weblogic服务器上,而EJB3.0就直接咯,将一个EJB项目发布到weblogic中便可。。。十分简单。。。。
好了,废话不多说,上代码。
先在myeclipse创建一个EJB项目,至于创建过程,我就不仔细的详述了。里面的EJBTest.java和EJBTestRemote.java这两个java文件时myeclipse自动帮你生成的,本来还有一个EJBTestLocal.java文件,不过那个文件是用于本地访问的,我们今天讲的是远程访问,所以用不到,我就把它给删咯~~~~。
先来看EJBTestRemote.java内的代码
package ejbtest;
/**
* EJBTest local interface
*/
public interface EJBTestRemote{
public String getHello(String name);
}
非常简单,只是声明了一个接口,接口内有个公开的getHello(String name)抽象方法。
再来看一下EJBTest.java内的代码
package ejbtest;
import javax.ejb.Remote;
import javax.ejb.Stateless;
/**
* Session Bean implementation class EJBTest
*/
@Stateless(mappedName="EJBName")
@Remote(EJBTestRemote.class)
public class EJBTest implements EJBTestRemote {
/** * Default constructor. */
public String getHello(String name) {
// TODO Auto-generated method stub
return "Hello,"+name;
}
}
该类实现了EJBTestRemote接口,并实现了该接口的方法,最值得注意的是这两句话
@Stateless(mappedName="EJBName")
头一句@Stateless(mappedName="EJBName")主要的作用是声明该类映射到weblogic上的名字,同时也声明了其是一个无状态的实体Bean。
@Remote(EJBTestRemote.class)
而则是声明该类为一个远程调用类,其接口为EJBTestRemote。
。好了,到这里服务器端的代码就写完了,下面来看一下客户端的项目
这是一个客户端的代码,只是一个简简单单的java项目。建好客户端项目后在写代码前先要加载服务器端的项目Library,不要问为什么,这点会在后面解释。具体的加载过程是:单击客户端项目右键,选择Build Path--》Configure Build Path
选择project,我这里是已经添加好了,所以你们会看到EJBTest项目已经存在,你们要是没有的话,可以通过add按钮来添加点击OK后就可以将服务端的代码加进客户端了。
弄好了以后你会在JRE System Library内看到许多新增的jar包
好了,现在可以来编写客户端的代码了。
package yang.tian.biao;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import ejbtest.EJBTestRemote;
public class Test {
/**
* @param args
*/
public void sayHello(){
String url="t3://localhost:7001";
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL, url);
try {
Context ctx=new InitialContext(p);
EJBTestRemote ert=(EJBTestRemote) ctx.lookup("EJBName#ejbtest.EJBTestRemote");
System.out.println(ert.getHello("yang"));} catch (NamingException e) {// TODO Auto-generated catch blocke.printStackTrace();}}public static void main(String[] args) {// TODO Auto-generated method stubnew Test().sayHello();}}
EJBTestRemote ert=(EJBTestRemote) ctx.lookup("EJBName#ejbtest.EJBTestRemote");
注意这句代码,它 的含义就是从wenlogic中根据映射名字找出远程提供类,也就是EJBTestRemote
EJBTestRemote ert=(EJBTestRemote)
好了,这里就要说一下咯,大家都看到这里使用了EJBTestRemote 也许大家会奇怪为什么客户端没有建过EJBTestRemote 这个类,但却可以用呢??这就是刚才将服务器端的代码加到客户端的用处。
好了,都布置完了,开启weblogic,部署服务端代码到weblogic中,运行客户端,后台将会打印出结果:
Hello,yang
OK,项目成功,这样就可以做到远程方法的调用了~~~~~~~~