基于EJB3.0的远程方法调用

前面我已经转载一边基于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,项目成功,这样就可以做到远程方法的调用了~~~~~~~~



 
  
 
 

你可能感兴趣的:(Java,Web)