今天学习到的第二个重要的概念就是EJB的本地客户端和远程客户端以及本地访问方式和远程访问方式的相关概念。
远程客户端与远程访问方式:
所谓远程客户端指的是客户端程序与JBOSS应用服务器以及部署在服务器上的EJB在不同的JVM进程中。下面的实例说明了远
程客户端的特点以及相应的访问方式。
客户端程序:
public class RemoteEjbClient {
public static void main(String[] args) {
try {
InitialContext context = new InitialContext();
UserServiceRemote userService = (UserServiceRemote)context.lookup("UserServiceImpl/remote");
User user = new User();
user.setUsername("zhangsan");
userService.save(user);
System.out.println(user.getId());
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
其中,UserServiceRemote接口被标记为远程方式,然后将user的id值打印出来。
服务器端EJB:
@Stateless
@Remote(UserServiceRemote.class)
@Local(UserServiceLocal.class)
public class UserServiceImpl implements UserServiceLocal,UserServiceRemote{
public void save(User user) {
// TODO Auto-generated method stub
user.setId(100);
System.out.println(user.getUsername()+"已经被保存了,id="+user.getId());
}
}
很简单的方法,就是给user实例设置了一个id,同时将客户端赋值给user对象的username打印出来。
服务器端将user的id设置成了100。但是实际运行客户端程序的结果却是:
结果:0
这个实例说明:在远程访问方式中,服务器端使用的user实际上是对客户端的一份拷贝,这样,user在服务器端做的任何
修改都无法在客户端的user中反映出来。
这里需要注意:远程客户端只能使用远程方式访问。
本地客户端以及相应的访问方式:
本地客户端指的是客户端程序与部署了相应的EJB服务器在同一个JVM的进程中执行。
服务器端程序不需要进行修改,为了能够与服务器在同一个JVM的进程中执行,可以建立一个web项目,将该web项目部
署到同一个服务器中。在本例中,以一个Servlet为例。
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
User user = null;
try {
InitialContext context = new InitialContext();
UserServiceLocal userService = (UserServiceLocal)context.lookup("UserServiceImpl/local");
user = new User();
user.setUsername("lisi");
userService.save(user);
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
out
.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">");
out.println("<HTML>");
out.println(" <HEAD><TITLE>A Servlet</TITLE></HEAD>");
out.println(" <BODY>");
out.println(user.getId());
out.println(" </BODY>");
out.println("</HTML>");
out.flush();
out.close();
}
与远程客户端不同的是,生成了一个UserServiceLocal类型的实例,同样把执行save()方法之后的user.id打印在页面中
,并以本地访问方式进行访问,结果与上面有很大的不同。
结果:100。
说明:在本地访问方式中,客户端与服务器端访问的是同一个实例,因此服务器端的变化都会反映到客户端。
注意:本地客户端也可以使用远程访问方式访问EJB。
方法就是将上面代码中标红的语句替换成:
UserServiceRemote userService = (UserServiceRemote)context.lookup("UserServiceImpl/remote");
修改后的执行的结果和上面的远程访问方式是一样的。
结果:0。
最后总结:远程客户端只能使用远程方式访问EJB,而本地客户端既可以使用本地方式也可以使用远程方式访问EJB。
但是本地客户端使用远程方式访问的效率会比较低。
分享到:
相关推荐
本教程主要介绍如何在Java客户端访问通过Glassfish发布的EJB,特别是EJB3.0的安全特性。 首先,我们要创建一个包含简单会话bean(session bean)的企业应用程序,并建立一个Java类库项目,该项目包含了会话bean的...
1. **EJB客户端接口**:了解EJB客户端如何与远程服务器上的EJB组件进行交互,包括定义Home接口和Remote接口,以及调用EJB方法的步骤。 2. **JNDI查找**:学习如何通过Java Naming and Directory Interface (JNDI) ...
本文将深入探讨EJB客户端开发的相关知识点,帮助开发者更好地理解和实践这一技术。 首先,我们需要了解EJB的基本概念。EJB是一种服务器端组件,分为三种主要类型:会话Bean(Session Beans)、实体Bean(Entity ...
### CORBA客户端访问EJB详解 #### 一、引言 随着企业级应用的发展,不同技术栈间的系统集成成为了一项重要任务。CORBA(Common Object Request Broker Architecture,通用对象请求代理体系)作为一种广泛使用的...
### EJB 3.0 范例:开发环境搭建与服务器端及客户端程序详解 #### 一、EJB 3.0 概述 EJB (Enterprise JavaBeans) 是 Java 企业级应用的一种标准组件模型,用于构建复杂的业务逻辑。EJB 3.0 版本发布于2004年,它...
对于EJB 3.0的客户端,访问无状态会话Bean变得更加简单。客户端不再需要创建远程接口或使用特定的EJB查找API,而是可以直接通过Java Persistence API(JPA)或Java Naming and Directory Interface(JNDI)查找并...
这通常用于客户端应用(不在同一JVM内)与EJB交互的情况。Remote接口需要进行Java对象的序列化,以便在网络上传输。它通过实现带有`@Remote`注解的接口定义,如: ```java @Remote public interface MyRemoteBean {...
3. **部署测试程序**:确保客户端能够正确地与部署在应用服务器上的EJB组件进行交互。 **运行测试程序** 1. **启动应用服务器**:确保应用服务器正在运行,并加载了EJB组件。 2. **执行客户端程序**:运行客户端...
这部分接口应该与EJB的远程接口匹配。 3. **生成 stubs 和 skeletons**:使用ORB提供的工具(如omniidl),根据IDL文件生成C++客户端的stubs和服务器端的skeletons。 4. **实现业务逻辑**:在EJB组件中实现业务...
预编译方式则是另一种实现EJB容器的方法,它在部署阶段就将EJB组件与容器集成,生成针对特定接口的静态类。这种方式在运行时性能通常优于动态代理,因为调用过程更为直接,避免了运行时的额外开销。然而,预编译方式...
- **服务器端的代理对象**:这是一个在服务器端代表EJB对象的代理,例如`HelloBeanSkeleton`,用于与客户端进行通信。 - **客户端的代理对象**:这是客户端用来调用远程EJB的方法,即`HelloBeanStub`,它被注册到...
#### EJB 2.0与EJB 1.1的主要区别及其应用场景 EJB(Enterprise JavaBeans)技术自1998年首次推出以来,经历了多个版本的演进,其中EJB 2.0是EJB 1.1的重要升级版,带来了诸多改进和新特性,旨在简化企业级应用开发...
* 使用 EJB 客户端来访问 EJB。 六、EJB 的部署 EJB 的部署包括: * 创建 EJB jar 文件。 * 部署 EJB 到 EJB 容器中。 * 配置 EJB 的环境变量和依赖关系。 七、EJB 的安全性 EJB 的安全性包括: * 身份验证:...
在EJB_TEST中,`EJB_Client.zip`可能包含客户端代码,用于与EJB服务器交互。客户端通过JNDI(Java Naming and Directory Interface)查找并调用EJB。而`EJB_Romte.zip`可能包含了远程接口和实现,这是EJB允许远程...
3, EJB客户端:(常见的) 1) 独立的java程序 2)web程序 3)其他的EJB, 4)其他通过Web Service 调用的客户端; 4, EJB容器可以为我们提供的服务: 1) 事务:够用 2)安全:不够用 3)资源管理和组件的声明周期的管理; ...
EJB客户端访问后台EJB的具体代码依赖于具体的容器实现和配置。通常涉及使用`InitialContext`来查找EJB的远程或本地接口,并调用其业务方法。 ### 结论 EJB作为Java企业级应用开发的重要组成部分,提供了强大的...
- **远程接口**(Remote Interface):用于定义客户端可以通过远程调用的方式访问的方法。 - **本地接口**(Home Interface):用于创建和查找EJB实例。 #### Application Assembler的角色 Application Assembler...
EJB客户端会使用这个接口类型的引用,去引用从EJB容器返回的存根(Stub)。 - 其次,编写实现类: - 使用两个注释`@Stateless`和`@Remote`。 - `@Stateless`的属性`name()`:定义EJB的名称,在每个EJB JAR中,该...