- 浏览: 809119 次
- 性别:
- 来自: 西安
文章分类
- 全部博客 (307)
- struts (8)
- hibernate (3)
- spring (32)
- opensourceproject (12)
- javaScript (9)
- primeton EOS (2)
- journey of heart (10)
- Design pattern (6)
- ejb (17)
- point (37)
- Linux&Unix (22)
- ibatis (10)
- AJAX (6)
- DB (26)
- Protocol (6)
- chart (4)
- web server (11)
- webservice (7)
- integration (3)
- tuxedo (5)
- ext (4)
- android (1)
- c/c++ (12)
- JVM (1)
- paginationFrame (2)
- code (2)
- report (1)
- High-performance web (1)
- svn (1)
- JQuery (1)
- workDaily (2)
- cloud (16)
- Python (8)
- English (2)
- shell (5)
- googleCode (1)
- nio (1)
- hyper-v (1)
- debug (3)
- vbs (2)
- openstack (3)
- K8S (1)
- Mesos (0)
- Spark (0)
- Marathon (0)
最新评论
-
钱图大展:
chao2751021 写道lib包哪里去下载,找不到
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
钱图大展:
无法下载
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
fm395728572:
shell脚本中用到了环境变量,但是获取不到,例如脚本中有一句 ...
ganymed-ssh2 for Java -
liuhanjiang:
我qq147229234
大型网站用户行为记录的一个实现--基于clickStream(第一部分) -
liuhanjiang:
博主 我利用您提供的方法实现博文中介绍的clickstream ...
大型网站用户行为记录的一个实现--基于clickStream(第一部分)
用本地引用提高EJB访问效率
EJB 1.0和1.1规范只定义了一种在EJB组件中引用另一组件的方法,即通过Bean的远程接口。如果两个Bean都在同一个容器之内,则这种网络开销是不必要的。为解决这个问题,EJB 2.0规范定义了一种新的EJB引用类型,即本地引用。
一、两种引用类型
为了从其他EJB组件访问某个Bean,容器提供了一种特殊的机制。这种机制允许一个Bean提供者通过称为EJB引用的“逻辑名字”引用另一个EJB的Home。EJB容器利用应用的部署描述器为EJB构造环境,而这些引用在部署描述器中作为特殊的项目声明。在部署描述器中,部署者把组件代码中要用到的EJB引用绑定到其他被引用EJB的Home。
如前所述,在EJB 2.0规范出现之前,在一个EJB中引用其他Bean只有一种方法,即通过远程接口,它要求进行跨越网络的远程过程调用。如果某个事务由多个Bean协作完成,通过网络进行多个对象的汇集和释放将是一项相当繁重的工作。
EJB 2.0规范新增了一种本地接口类型,允许在同一容器之内的Bean直接互相引用,避免了远程接口的网络开销。本地接口是一种标准的Java接口,而不是从RMI继承得到。EJB组件的定义可以包含本地接口或远程接口,或者两者都定义。
本地引用的指定方式和传统的远程引用一样,即在部署描述器中指定。事实上,本地引用的部署描述元素与远程引用的描述元素完全对应。
下面的代码片断是一个典型的远程引用:
Product
ejb/Product
Entity
com.xyz.widgets.ProductHome
com.xyz.widgets.Product
../products/product.jar#Product
下面的代码片断是同一Bean的本地引用:
Product
ejb/Product
Entity
com.xyz.widgets.ProductHome
com.xyz.widgets.Product
../products/product.jar#Product
下表简要说明了各个元素的用途:
二、创建本地接口,通过本地接口访问EJB
要把一个现有的远程接口改为本地接口,有三个地方必须修改:部署描述器,Bean的接口,以及对EJB的调用。前面我们介绍了如何通过部署描述器指定一个本地引用,现在我们要把远程接口转换成本地接口,然后修改JNDI查找调用,让它使用新的本地接口。
■ Home接口
指定Home接口时,现在必须导入的是“javax.ejb.EJBLocalHome”,而不是“javax.ejb.EJBHome”。接口的声明也必须改变,让它从“EJBLocalHome”(一个标准Java接口)继承,而不是从“EJBHome”(一个RMI接口)继承。同时,从该接口定义的方法中唯一应该抛出的异常是javax.ejb.CreateException,而java.rmi.RemoteException异常则不再必要。
■ 本地接口
指定本地接口时,现在必须导入“javax.ejb.EJBLocalObject”,而不是“javax.ejb.EJBObject”。接口声明也必须改变,让它从“EJBLocalObject”(一个本地接口)继承,而不是从“EJBObject”(一个RMI接口)继承。
■ 执行调用
创建好接口、设置好部署描述器之后,剩下的工作就是执行JNDI调用,查找对其他EJB的引用。调用Bean的远程接口时,javax.rmi.PortableRemoteObject的“narrow()”方法汇集经过RMI的调用。对于本地引用,这种开销就不再必要,这时只需简单地进行JNDI查找并进行适当的类型定型。下面是一个例子:
home = (ProductHome) initCtx.lookup("java:comp/env/ejb/Product");
它不仅提高了效率,而且代码也比用来获取远程接口的代码更直观易懂。
本地接口使得处于同一容器内的两个EJB组件能够更高效地进行通信。对于实体Bean的应用来说,这种技术尤其有用,因为与客户程序直接访问实体Bean相比,在实践中,通过会话Bean访问实体Bean得到了更广泛的认可。
如果你准备使用本地引用,请先检查自己的应用服务器平台是否支持它。也许,在EJB 2.0规范获得广泛应用之前,我们还得等待一段时间。
转自:http://www.bianceng.cn/java/j110.htm
为什么需要调用ejb的本地接口 ?
答: 当ejb的服务端和客户端在一个JVM的时候,为了提高jndi查询效率,并且提高方法调用效率,本地调用可以不走TCP/IP ,这样可以明显提高调用的效率!
ejb2.0 开发本地接口的 步骤:
朝花夕拾,还是用我的原来ejb2.0的例子,现在需要增加在 原有的基础上增加本地调用的接口
第一步:
一共有5个接口,只做远程调用的时候是3个,后面的两个接口是我们做本地调用的时候需要的
1.远程home接口
2.远程remote接口
3.远程实现接口
4.本地接口
package cn.com.xinli.ejb; import javax.ejb.EJBLocalObject; public interface HelloWorldLocal extends EJBLocalObject { public String sayHello(); }
5.本地home接口
package cn.com.xinli.ejb; import javax.ejb.EJBLocalHome; public interface HelloWorldLocalHome extends EJBLocalHome { HelloWorldLocal create() throws javax.ejb.CreateException; }
第2步: 编写 ejb-jar.xml ,指定这5个接口的具体实现类
<?xml version="1.0" encoding="gb2312"?> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd"> <ejb-jar> <description>ejb</description> <display-name>myEJBTest</display-name> <enterprise-beans> <session id="ejb_hello"> <display-name>helloEJB</display-name> <ejb-name>helloEJB</ejb-name> <home>cn.com.xinli.ejb.HelloWorldHome</home> <remote> cn.com.xinli.ejb.HelloWorldRemote </remote> <local-home>cn.com.xinli.ejb.HelloWorldLocalHome</local-home> <local>cn.com.xinli.ejb.HelloWorldLocal</local> <ejb-class> cn.com.xinli.ejb.HelloWorldBean </ejb-class> <session-type>Stateless</session-type> <transaction-type>Bean</transaction-type> </session> <message-driven id="ejb_mdb"> <ejb-name>mdb</ejb-name> <ejb-class>cn.com.xinli.ejb.mdb.MDBean</ejb-class> <transaction-type>Bean</transaction-type> <acknowledge-mode>Auto-acknowledge</acknowledge-mode> <message-driven-destination> <destination-type>javax.jms.Queue</destination-type> </message-driven-destination> </message-driven> </enterprise-beans> </ejb-jar>
第3步: 编写 jboss.xml,指定 远程JNDI 和本地JNDI
<?xml version="1.0" encoding="gb2312"?> <jboss> <enterprise-beans> <session> <ejb-name>helloEJB</ejb-name> <jndi-name>helloEJB</jndi-name> <local-jndi-name>helloEJBLocal</local-jndi-name> </session> <message-driven> <ejb-name>mdb</ejb-name> <configuration-name>Standard Message Driven Bean</configuration-name> <!-- 消息驱动bean 监听的消息队列的 JNDI <destination-jndi-name>queue/mdb</destination-jndi-name> --> </message-driven> </enterprise-beans> </jboss>
第4步: 编写 测试页面 ,为了让调用的客户端和ejb 服务器 在一个JVM中,我们需要写一个jsp页面,放在JBOSS的一个war包下,通过JBOSS服务器来访问这个页面,这个页面里面去掉JBOSS服务器上的ejb, 如果你是在 eclpiese 中写的main 方法或者 ejb 的客户端可服务器端就不在一个JVM 中是无法调用Local 接口的
testejb.jsp
<%@ page contentType="text/html;charset=gb2312"%>
<%@page import="javax.naming.InitialContext"%>
<%@page import="java.util.Properties"%>
<%@page import="javax.naming.Context"%>
<%@page import="cn.com.xinli.ejb.HelloWorldLocal"%>
<%@page import="cn.com.xinli.ejb.HelloWorldLocalHome"%>
<%
System.out.println("===========================================================");
Properties props = new Properties();
props.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
props.setProperty("java.naming.provider.url", "localhost:1099");
props.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming");
try
{
Context ctx = new InitialContext();
HelloWorldLocalHome localHome= (HelloWorldLocalHome) ctx.lookup("local/helloEJB@13889929");
HelloWorldLocal local=localHome.create();
out.println(local.sayHello());
}
catch (Exception ex)
{
ex.printStackTrace();
}
%>
结果图:
- ejb2.war (322.6 KB)
- 下载次数: 41
评论
文章写的很好,新人有几个问题不太明白
1。
<jndi-name>helloEJB</jndi-name>
<local-jndi-name>helloEJBLocal</local-jndi-name>
都需要在服务器上配置JNDI吗?
2。
HelloWorldLocalHome localHome= (HelloWorldLocalHome) ctx.lookup("local/helloEJB@13889929");
("local/helloEJB@13889929"); 怎么得来得呢
发表评论
-
本地客户端调用 websphere6.1 ejb资源 解决方案
2011-01-21 12:25 1805开发环境: 中我们都是在jboss4.0上部署ejb2. ... -
ejb3.0 跨平台,跨JVM调用出现的问题及解决方案
2009-11-09 21:58 2344首先 ... -
ejb3 定时器开发
2009-10-28 08:35 3764定时服务用作在一段特定的时间后执行某段程序 ... -
ejb2.0消息驱动bean的开发(JBOSS4.0.4.GA 环境)
2009-10-23 11:12 2332消息驱动bean主要使用在异步的业务 ... -
ejb3 第12讲 --开发EJB容器模型的WEB服务
2009-08-05 08:04 3900JAX-WS JAX-WS规范是一组XML web ... -
ejb3 第10讲 --开发单表映射的实体bean
2009-08-02 23:29 1511目的:使用ejb3 ... -
ejb3 第9讲 --配置jboss数据源
2009-08-02 20:19 1116这个比较简单: 去$JBOSS_HOME\ ... -
ejb3 第8讲 --通过注解方式注入并使用其他EJB或者服务
2009-07-08 08:02 3274情景:有两个bean,一个是HelloWorldBean ... -
ejb3 第7讲 --开发有状态bean
2009-07-05 21:21 1421用 @Stateful 注解的方式表明 bean是有状态 ... -
ejb3 第6讲--开发具有本地接口的无状态bean
2009-07-03 07:01 2843理解: 1.当ejb的服务器端和客户端 ... -
ejb3 第5讲--通过ANT提高EJB应用的开发效率
2009-07-02 22:10 1450<?xml version="1.0" ... -
ejb3 第4讲--把jboss集成进eclipse
2009-06-29 22:45 1279这个比较简单,就不多说了 -
ejb3.0 第2,3讲-开发第一个无状态会话bean和客户端
2009-06-29 22:11 1690ejb中的3种bean: 什么是会话bea ... -
ejb3.0第11讲 --开发消息驱动bean
2009-06-24 08:23 2619概念: 1.java ... -
ejb3.0 --第1讲下载安装运行JBOSS
2009-06-24 07:08 16051.下载地址:jboss4.2.3http://www. ... -
ejb2.0 HelloWord
2008-09-27 07:38 7986中国电信网上营业厅项目是使用ejb2.0开发的,在项目中 ...
相关推荐
《精通EJB2.0》是一本专注于企业级JavaBeans(EJB)2.0版本技术的专业书籍。源码提供给读者深入理解EJB2.0的实践操作,帮助开发者在实际项目中应用EJB技术。以下是根据这些文件名解析出的一些关键知识点: 1. **EJB...
在EJB2.0中,引入了一系列新特性和改进,以提升开发效率和系统性能。以下是关于EJB2.0特性的一些详细说明: 1. **Entity Beans 2.0**:EJB2.0中的实体Bean(Entity Bean)进行了重大更新,引入了CMP(容器管理持久...
通过上述对比,我们可以看出EJB 3.0相对于EJB 2.0做了大量的改进,特别是在简化开发流程和提高灵活性方面。这些变化使得EJB更加易于使用和集成,同时也保持了其作为企业级应用开发框架的核心价值。对于开发者而言,...
在本文中,我们将深入探讨如何在WebLogic环境中部署EJB 2.0,特别是实现本地接口的Session Bean。 EJB 2.0是Java EE早期版本中的组件模型,用于构建可复用、分布式的企业级服务。它定义了三种主要类型的Bean:...
EJB 2.0是这一技术的一个重要版本,它在EJB 1.1的基础上进行了许多改进和扩展,以提高开发效率和系统的可维护性。本篇将深入探讨EJB 2.0的核心概念、设计模式以及在实际应用中的使用技巧。 1. **EJB组件模型** - *...
EJB 2.0 是EJB技术的一个里程碑,发布于2003年,引入了许多重要的改进和新特性,旨在简化开发过程并提高可维护性。 **1. EJB 架构概述** EJB 2.0 主要由三种类型的组件组成:Entity Beans(实体Bean)、Session ...
EJB2.0是其发展过程中的一个重要版本,它引入了许多关键特性,极大地提升了Java后端开发的能力和效率。在这个"全面研读EJB2.0规范"的学习资源中,我们将深入探讨EJB2.0的核心概念、设计模式以及实际应用。 ### EJB...
本实例开发将深入探讨EJB2.0的核心概念,特别是会话bean的实例化与使用。 1. **会话Bean(Session Beans)**:会话bean是EJB的一种类型,主要负责业务逻辑处理。它们可以代表客户端对象在服务器端执行操作,通常...
EJB2.0是EJB规范的一个版本,它在1.1版的基础上进行了许多改进,旨在提高开发者的生产力,同时保持了企业级应用的可扩展性和可靠性。 EJB2.0的主要组成部分包括: 1. 会话Bean(Session Beans):它们代表客户端的...
EJB 2.0使用XML部署描述符(ejb-jar.xml)来配置Bean的行为,包括事务属性、安全角色、查询语句等信息。部署描述符是Bean与容器交互的关键。 ### 5. Helloworld示例 在"一个完整的Helloworld"示例中,通常会创建一...
EJB 2.0是EJB规范的一个重要版本,引入了多项关键改进和特性,旨在提升企业应用的开发效率和可维护性。 ### 1. EJB 2.0实体Bean(Entity Bean) 实体Bean代表了业务逻辑中的持久化数据对象,它们与数据库中的记录...
EJB 2.0提供了一套安全模型,包括角色基线访问控制(RBAC)、认证、授权等功能,确保只有授权的用户或组件才能访问EJB。 以上就是EJB 2.0开发的基本知识点,它在Java EE体系中扮演着重要的角色,为大型企业级应用...
**企业级JavaBeans(EJB)2.0详解** 企业级JavaBeans(EJB)是Java平台上用于构建可部署在企业级服务器上的分布式、组件化的应用程序的重要技术。EJB 2.0是其一个重要的版本,它在1.1的基础上进行了多方面的改进和...
根据提供的文件信息“EJB2.0.pdf”,我们可以推断出这份文档主要涉及的是Enterprise JavaBeans(EJB)2.0版本的相关知识和技术细节。EJB是Java平台的一部分,用于开发分布式网络应用的企业级组件模型。下面将详细...
EJB3.0作为EJB规范的重大改进,旨在简化开发流程并提高开发者效率。本文将详细探讨EJB3.0与EJB2.0之间的主要差异。 首先,EJB3.0对编程模型进行了简化。在EJB2.0中,每个EJB需要定义两个接口和一个Bean实现类,这在...
通过深入学习并实践这个EJB 2.0的演示项目,你将能够更好地理解如何设计和实现EJB组件,以及如何在Java EE应用中有效地集成和使用它们。同时,这也会为后续学习更现代的EJB 3.0及以上版本打下基础,因为很多核心概念...
EJB 2.0是其第二个主要版本,发布于2002年,相较于EJB 1.0,它引入了许多改进和新特性,旨在提高开发效率和可维护性。在这个"使用ejb2.0 ql教程代码"中,我们将会探讨EJB 2.0中的查询语言(QL)及其在实际应用中的...