## 一,远程调用
~~~
@Stateless//一般定义成无状态的
@Remote
public class UserManagerBean implements UserManager {
@Override
public void addUser(User user) {
System.out.println("User["+user.getUsername()+"] is saved...");
user.setId(10);
}
}
~~~
因为要在远程调用中使用User对象,所以这个对象要实现序列化的接口。
测试远程调用:
~~~
<span style="font-size:12px;">public static void main(String[] args) throws Exception {
InitialContext context=new InitialContext();
UserManager userManager=(UserManager)context.lookup("UserManagerBean/remote");
User user=new User();
user.setUsername("张三");
user.setPassword("lhc");
userManager.addUser(user);
System.out.println("用户信息已经被成保存,用户ID是:"+user.getId());
}</span>
~~~
结果:
![](https://box.kancloud.cn/2016-03-02_56d66381d8a34.png)
发现调用完成之后,是服务端并没有把对User对象的值设置好之后返回client端。
## 二,本地调用
新增类:
![](https://box.kancloud.cn/2016-03-02_56d66381e64c3.png)
PS:我的Jboss版本不支持将类同时标记为远程对象和本地对象,所以就分开写了。如果你在查找的时候,找不到对象,可能也是因为将类标记为remote跟local之后,因为服务器不支持,导致报错了。
之后,新建web项目,并将这个web项目部署到跟EJB项目同一个jboss服务器下面.
![](https://box.kancloud.cn/2016-03-02_56d6638204c3f.png)
测试本地调用:
~~~
<span style="font-size:12px;"><%
InitialContext context=new InitialContext();
UserManager userManager=(UserManager)context.lookup("UserManagerBeanTwo/local");
User user=new User();
user.setUsername("张三");
user.setPassword("lhc");
userManager.addUser(user);
out.println("用户信息已经被成保存,用户ID是:"+user.getId());
%></span>
~~~
根据结果:
![](https://box.kancloud.cn/2016-03-02_56d6638215cbc.png)
从上我们可以推断,因为两个项目在同一个Jboss服务器下面,所以本地调用ejb对象的时候,User对象是在这个服务器中是以引用的形式传递的,所以当服务端执行完成之后,我们可以从客户端看到用户ID被改变。
## 三,其他定义remote和local的方式
### 1,使用value标记接口该以哪种方式被调用
![](https://box.kancloud.cn/2016-03-02_56d663822638d.png)
### 2,在接口上定义该接口该如何被调用
![](https://box.kancloud.cn/2016-03-02_56d6638238c58.png)
- 前言
- Spring简化配置
- Spring中使用AspectJ实现AOP
- Spring中JDK的动态代理和CGLIB代理的区别
- Spring配置问题——元素 "context:component-scan" 的前缀 "context" 未绑定
- Hibernate中编程式事物的简单使用
- 使用Spring为Hibernate配置声明式事物
- Struts2+AJAX获取json数据
- 中间件概述
- EJB(Enterprise Java Bean)概述
- JBoss 6.1安装配置问题
- EJB对象的部署及客户端调用简单示例
- 有状态的EJB对象和无状态的EJB对象
- EJB远程调用和本地调用
- MyBatis——入门select