EJB学习笔记四((@Remote与@Local的差异)
来源:互联网 发布:c语言length函数 编辑:程序博客网 时间:2024/05/19 09:12
1.前言
上一篇博客,通过实例讲解,分析了一下EJB中SessionBean的两种状态,这篇博客来深入的分析一下EJB中的远程客户端和本地客户端的区别。
2.什么是远程客户端和本地客户端
2.1、在本地客户端中,客户端与其调用的EJB对象在同一个JVM进程中
2.2、在远程客户端中,客户端与其调用的EJB对象不在同一个JVM进程中
2.3、打个比方,假设同一台机器,安装了一个JVM,一个JBOSS应用服务器,下面启动一个JBOSS应用服务器,另外编写一个包含main方法的java类,并编译以及运行,那么此时一共有几个JVM进程呢?或者编写一个javaWeb项目,部署到JBOSS中,此时又有几个JVM进程呢?
2.4、远程客户端有如下特性
1.它可以运行在跟企业Bean不同的机器或者不同的JVM进程中
2.它可以是WEB组件、应用客户端、或者其他的企业Bean
3.对远程客户端来说,企业Bean的位置是透明的
4.为了创建一个能够被远程客户端访问的企业Bean,必须用@Remote注解来定义这些企业Bean
3.传值OR传址
下面通过一个DEMO来展示一下,远程调用和本地调用的传参数上的差别
1.EJBProject创建
创建一个User对象
<span style="font-size:18px;">package com.test;import java.io.Serializable;public class User implements Serializable {private int id;private String userName;private String Password;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getUserName() {return userName;}public void setUserName(String userName) {this.userName = userName;}public String getPassword() {return Password;}public void setPassword(String password) {Password = password;}}</span>
创建远程调用接口<span style="font-size:18px;">package com.test;public interface UserManager {public void addUser(User user);}</span>创建远程调用实现
<span style="font-size:18px;">package com.test;import javax.ejb.Local;import javax.ejb.Remote;import javax.ejb.Stateless;@Stateless@Localpublic class UserManagerImpl implements UserManager {public void addUser(User user) {System.out.println("User{username=}"+user.getUserName()+"已经被成功的保存");user.setId(10);}}</span>
2.远程调用测试创建一个测试类
<span style="font-size:18px;">package com.test;import javax.naming.InitialContext;import javax.naming.NamingException;public class UserManagerClient {public static void main(String[] args) throws NamingException {InitialContext context=new InitialContext();UserManager userManager=(UserManager)context.lookup("UserManagerImpl/remote");User use=new User();use.setUserName("张三");use.setPassword("zhangsan");userManager.addUser(use);System.out.println(use.getId());}}</span>
运行结果如下
3.创建本地调用测试
创建一个JAVAwebProject项目,并把项目部署到同一个JBOSS中
<span style="font-size:18px;"><%@ page language="java" import="java.util.*,javax.naming.*,com.test.*" pageEncoding="GBK"%><%String path = request.getContextPath();String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";%><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title><meta http-equiv="pragma" content="no-cache"><meta http-equiv="cache-control" content="no-cache"><meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"><meta http-equiv="description" content="This is my page"> </head> <body> <%InitialContext context=new InitialContext();UserManager userManager=(UserManager)context.lookup("UserManagerImpl/local");User use=new User();use.setUserName("张三");use.setPassword("zhangsan");userManager.addUser(use);out.print(use.getId()); %> </body></html></span>
运行测试
4.小结
1.通过上述测试,得出结论,EJB在远程调用时采用的是传地址的形式,而本地调用时传的是值得形式
2.如果是本地调用的话,本地就不要使用JNDI文件了,因为如果是本地调用的话,就出在同一个环境中了,那些依赖包也就不需要了
3.如果是远程调用的话,对象必须是可以序列化的
4.远程接口定义的三种方式
例如一个EJB04Bean,实现了4个接口第一种方式@Stateless(name="ejb04beanname" )@Remote(value={Ejb04Interface01.class, Ejb04Interface02.class })@Local(value={Ejb04Interface03. class})第二种方式依据注解的规则,如果一个注解只定义了一个属性,而且这个属性的名称为value,则value可以直接省略,直接写值就可以了@Remote({Ejb04Interface01.class, Ejb04Interface02.class })@Local({Ejb04Interface03.class})第三种方式也可以不用再EJB实现类中定义访问方式,而是将访问方式(@remote或者@local这些注解直接定义到接口上)一般都采用第一种方式
- EJB学习笔记四((@Remote与@Local的差异)
- 解读Ejb中Local与Remote项目
- EJB Local与Remote接口区别
- EJB学习笔记-5-local
- EJB的Remote访问方式和Local访问方式
- EJB学习笔记-3-javaclient访问EJB(remote)
- EJB学习笔记-4-web应用访问EJB(remote)
- JBOSS学习EJB笔记四
- EJB Remote/Local 绑定和JNDI Lookup
- EJB学习笔记-2-Session Bean stateless/remote
- Pro Android学习笔记(七六):服务(1):local和remote
- EJB学习(四)-headfirst学习笔记
- 菜鸟学EJB(二)——在同一个SessionBean中使用@Remote和@Local
- R统计笔记(四):中括号与双中括号的差异
- JBoss5中Local与Remote不能同时存在的问题
- 关于github中local与remote不能同步的问题
- Tomcat web工程 调用 JBOSS EJB local及remote
- EJB中的@Local和@LocalBean的区别与用法
- 基于Linux流量控制系统功能简介
- 经典算法题每日演练——第七题 KMP算法
- 淘宝新举动——屏幕跟随购物车按钮啦
- 多行文本溢出
- [iOS]NSString到底使用Copy还是使用Strong属性,有什么区别
- EJB学习笔记四((@Remote与@Local的差异)
- valgrind--still reachable
- ANR
- 经典算法题每日演练——第八题 AC自动机
- 大数据量的算法面试题
- hdu 1151 Air Raid(最小路径覆盖)
- nRF51822使用passkey配对
- MapReduce篇之InputFormat
- 经典算法题每日演练——第九题 优先队列