多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 一,远程调用 ~~~ @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)