ejb可以实现远程调用吗

如题所述

远程客户端和本地客户端

远程客户端:客户端与其调用的JEB对象不再同一个JVM进程中。为了创建一个能够被远程访问的企业Bean,你必须用@Remote注解来定义这些Bean。

本地客户端:客户端与其调用的EJB对象在同一个JVM进程中。为了创建一个能够被本地访问的企业Bean,你必须用@Local注解来定义这些Bean。

远程调用方式和本地调用方式

远程调用:JNDI lookup以remote方式进行调用,远程调用客户端与服务器之间通信的时候,数据需序列化之后用传值的方式传输。

本地调用:JNDI lookup以local方式进行调用,本地调用客户端与服务器之间通信的时候,数据不需序列化,用传址的方式传输。

客户端与访问方式

本地客户端可以用remote方式也可以用local方式访问企业Bean。远程客户端只可以用remote方式。


Demo

创建一个EJBProject

实体类:

[java] view plain copy

/** 

* è¦åœ¨ è¿œç¨‹å®¢æˆ·ç«¯å’ŒEJB之间传输对象,这些对象必须是可序列化的!如果是本地客户端就不用序列化 

* @author å®‹ç¬‘ 

*/  

public class User implements Serializable{  

private int id;  

private String name;  

public int getId() {  

return id;  

}  

public void setId(int id) {  

this.id = id;  

}  

public String getName() {  

return name;  

}  

public void setName(String name) {  

this.name = name;  

}  

}  

实现类Bean:

[java] view plain copy

@Stateless  

@Remote(UserManager.class)//远程调用  

@Local(UserManager.class) //本地调用  

public class UserManagerBean implements UserManager {  

public void saveUser(User user) {  

System.out.println("User[name = " + user.getName() + "]已经被保存");  

user.setId(10);  

}  

}  


1.远程客户端远程调用测试

[java] view plain copy

public class RemoteEjbClient {  

/** 

* @param 

*/  

public static void main(String[] args) throws Exception {  

InitialContext ctx = new InitialContext();  

//远程客户端只能调用远程接口  

UserManager ejb = (UserManager)ctx.lookup("UserManagerBean/remote");  

User user = new User();  

user.setName("张三");  

ejb.saveUser(user);  

System.out.println("用户 " + user.getName() + "已经保存 ID = " +user.getId()  );  

}  

}  

结果:

2.本地客户端本地调用测试


创建一个JavaProject项目,并把项目部署到同一个JBOSS下。这样的话就属于本地客户端了。

<% 

InitialContext context=newInitialContext(); 

UserManageruserManager=(UserManager)context.lookup("UserManagerBean/local"); 

User use=new User();

use.setName("张三");

userManager.saveUser(use);

out.print("张三用户ID为"+use.getId()); 

%>

结果:

这样很好的证明了,如果是远程调用,客户端操纵的Bean的参数,其实是一份参数值的拷贝,因此,对参数的修改,不会影响到Bean。但是对于本地调用来说,客户端操纵的Bean的参数,就是一个引用,它对参数的修改,将会影响到Bean。

温馨提示:答案为网友推荐,仅供参考
相似回答