local是本地接口,remote是远程接口。web层调用app层使用remote接口。session bean和entity bean之间调用使用的是local接口。不用说你也明白,remote接口对性能的影响很大。所以在程序设计的时候我们尽量用loacal接口,也就是facade模式。具体就是,web层调用app层的session bean,session bean在调用各个entity bean。就好比是打长途电话找5个人,你是准备给5个人分别通话(长途-remote)还是准备先和一人通话(长途-remote)然后在由这个人对另外4个(短途-local)分别通知?我想你会选择第二种情况(facade模式)。
local接口可以在与ejb同一个JVM环境中调用,但是不能对它进行远程调用,假设你的web容器与所需调用的ejb不在一台服务器上,或者不在同一个welogic server中时就不能调用local接口,在jndi查找的时候不能查找local home,而要查找remote home,也就是说需要实际进行RMI调用,而且必须提供Provider URL(例如t3://myserver:7001),而且他们返回给客户的对象也不一样,local home创建的是javax.ejb.EJBLocalObject类型,它没有继承Remote interface;而Remote home创建的是javax.ejb.EJBObject类型的,它扩展了Remote.实际上javax.ejb.EJBLocalObject型接口没有抛出RemoteException,因为对local类型接口的调用不是RMI,所以的对local接口的调用效率要高于对remote对象的调用,针对这点对EJB的设计提出以下建议:
1、如果你的ejb客户只可能存在于与ejb相同app server,或者说同一个JVM环境中时,你可以只生成local类型接口(包括EJBHome 与EJBObject),如果你需要在与EJB容器不同的JVM环境中调用你的EJB的话,你必须生成Remote类型的接口(包括EJBHome 与EJBObject);
2、在一般情况下建议两种类型的接口(包括EJBHome 与EJBObject)都生成,尤其是Session Bean,Entity Bean,可以只生成local类型的接口,如果想远程调用你的Entity Bean一般用Session Bean做代理。
3、如果你不是远程调用EJB的话,使用EJB时建议调用local接口,这样效率高,因为远程调用就意味着建立网络连接,效率必然不如local调用。
4、在jb7中设计EJB时,默认情况下只给你生成local类型接口,所以你需要在设计EJB时把interfaces设成:local/remote,这样的话你的EJB至少会有5个java文件
分享到:
相关推荐
本主题将探讨“Local”和“Remote”两种方式访问EJB的知识点。 首先,我们要理解EJB的两种主要访问方式: 1. **Local访问**:这种方式适用于同一个应用内部的组件之间通信。Local接口不包含远程方法调用的开销,...
Tomcat下web工程调用JBOSS部署的EJB项目 此源码包 包括local本地调用及remote远程调用 文档说明在http://blog.csdn.net/heardy/article/details/6906225
1. **定义接口**:包括`remote`和`local`接口。 2. **实现无状态会话Bean**:实现定义的接口。 3. **配置部署描述符**:使用`ejb-jar.xml`指定Bean类型和其他部署信息。 **部署到应用服务器** 1. **打包**:将Bean...
javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb....
javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb....
- EJB的remote home接口类应继承自`weblogic.wtc.jatmi.TuxedoServiceHome`,这是创建和查找EJB实例的入口。 - EJB的bean类中至少有一个方法暴露为服务,例如上面代码中的`service`方法。这个方法会接收Tuxedo传递的...
`@Local`和`@Remote`注解分别用于声明本地和远程接口。本地接口在同一JVM内的调用,远程接口允许跨JVM的调用。在EJB3.0中,这两种注解使接口的使用更加灵活,无需传统的接口实现方式。 总的来说,EJB3.0简化了传统...
EJB技术还涉及接口和实现的分离,通过远程接口(Remote Interface)和本地接口(Local Interface)使得客户端可以透明地调用bean的方法。此外,EJB 3.0引入了注解(Annotations),简化了bean的配置,使得开发者可以...
- Remote接口适用于远程客户端,Local接口适用于在同一应用内的通信。 6. **EJB的并发和事务** - WebLogic Server支持多线程访问EJB,通过设置bean的并发策略(如Synchronized或Unsynchronized)来控制并发行为。...
- **远程接口(Remote Interface)**:允许跨JVM的调用,使客户端能够与服务器端的EJB进行通信。 **EJB的事务管理**: EJB提供强大的事务管理能力,可以设置不同的事务属性,比如所需的事务级别、传播行为等,确保...
4. **编写bean类**:创建EJB组件,定义接口和实现类,并使用注解如`@Remote`、`@Local`、`@Stateless`、`@Stateful`或`@MessageDriven`。 5. **部署和测试**:将项目打包为`.ear`文件,部署到服务器,然后进行单元...
开发只存在Local接口的无状态会话Bean与Remote接口的步骤基本相同,唯一的不同是使用`@Local`注解替代`@Remote`注解。 **示例代码**: ```java @Stateless @Local(LocalService.class) public class Stateless...
EJB项目通常涉及实体Bean(Entity Beans)、会话Bean(Session Beans)和服务端接口(Local或Remote Interfaces)。本文将深入探讨EJB的基础配置和测试方法。 ### 一、EJB项目配置 1. **环境搭建**:首先,你需要...
javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb....
5. **远程接口**:讨论EJB的客户端调用机制,包括远程接口(Remote Interface)和本地接口(Local Interface),以及它们在分布式环境中的通信方式。 6. **ejb-jar.xml和web.xml**:解析这两个重要的XML配置文件,...
3. **EJB接口和方法**:EJB通过接口暴露其服务,这些接口包括业务接口(Business Interface)、远程接口(Remote Interface)和本地接口(Local Interface)。业务方法定义了EJB提供的服务。 4. **EJB部署描述符**...
例如,可以使用`@Stateless`、`@Stateful`和`@Singleton`注解来定义会话Bean的类型,使用`@Local`和`@Remote`注解来定义本地和远程接口,使用`@PersistenceContext`和`@PersistenceUnit`注解来处理数据持久化等。...
主要有Home接口(创建和查找bean实例)、Remote接口(业务方法)和Local接口(仅限于同一应用内的通信)。 5. **事务管理**:EJB支持事务属性,如Required、RequiresNew、Mandatory、NotSupported、Supports和Never...
EJB 2.0 为不同类型的Bean定义了特定的接口,例如,实体Bean通常实现Home接口和Remote接口,而会话Bean可以有无接口、Local接口或Remote接口。 **9. 容器管理和组件接口** EJB 2.0 引入了Business Interface(业务...
"HelloWorld"示例通常会包含一个本地接口(Local)和一个远程接口(Remote)。本地接口用于在同一个应用内的组件间通信,远程接口则用于跨应用调用。通过`@Local`和`@Remote`注解,我们可以声明这两个接口。 4. **...