## 一,遠程調用
~~~
@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>
~~~
結果:

發現調用完成之后,是服務端并沒有把對User對象的值設置好之后返回client端。
## 二,本地調用
新增類:

PS:我的Jboss版本不支持將類同時標記為遠程對象和本地對象,所以就分開寫了。如果你在查找的時候,找不到對象,可能也是因為將類標記為remote跟local之后,因為服務器不支持,導致報錯了。
之后,新建web項目,并將這個web項目部署到跟EJB項目同一個jboss服務器下面.

測試本地調用:
~~~
<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>
~~~
根據結果:

從上我們可以推斷,因為兩個項目在同一個Jboss服務器下面,所以本地調用ejb對象的時候,User對象是在這個服務器中是以引用的形式傳遞的,所以當服務端執行完成之后,我們可以從客戶端看到用戶ID被改變。
## 三,其他定義remote和local的方式
### 1,使用value標記接口該以哪種方式被調用

### 2,在接口上定義該接口該如何被調用

- 前言
- 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