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
在EJB 2.0中,本地接口(Local Interface)是客户端与Session Bean交互的方式之一。与远程接口(Remote Interface)不同,本地接口不涉及网络调用,因此性能更好。要创建一个本地接口,你需要在Bean类中定义一个...
1. **定义接口**:包括`remote`和`local`接口。 2. **实现无状态会话Bean**:实现定义的接口。 3. **配置部署描述符**:使用`ejb-jar.xml`指定Bean类型和其他部署信息。 **部署到应用服务器** 1. **打包**:将Bean...
- EJB的remote接口类必须继承自`weblogic.wtc.jatmi.TuxedoService`,这样EJB才能理解Tuxedo的服务调用协议。 - EJB的remote home接口类应继承自`weblogic.wtc.jatmi.TuxedoServiceHome`,这是创建和查找EJB实例的...
EJB 2.0 为不同类型的Bean定义了特定的接口,例如,实体Bean通常实现Home接口和Remote接口,而会话Bean可以有无接口、Local接口或Remote接口。 **9. 容器管理和组件接口** EJB 2.0 引入了Business Interface(业务...
开发只存在Local接口的无状态会话Bean与Remote接口的步骤基本相同,唯一的不同是使用`@Local`注解替代`@Remote`注解。 **示例代码**: ```java @Stateless @Local(LocalService.class) public class Stateless...
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 Interface)和本地接口(Local Interface)使得客户端可以透明地调用bean的方法。此外,EJB 3.0引入了注解(Annotations),简化了bean的配置,使得开发者可以...
- Session Bean的Remote接口与Home接口适用于远程访问,Local接口与Local Home接口则适用于同一应用内部访问。 5. EJB 3.0之后的简化: - 从EJB 3.0开始,引入注解替代XML配置,使得EJB更易于使用。 - 注解如`@...
远程接口以`/remote`后缀,本地接口以`/local`后缀。 `@Stateless`和`@Stateful`的区别在于对象是否保持状态。前者每次调用都可能使用新的实例,不保存状态,而后者为每个客户端创建独立的实例,可以存储状态。在...
3. **Local Interface**(本地接口):与远程接口类似,本地接口同样定义了EJB的业务方法,但不使用RMI,因此适用于同一JVM内的通信。本地接口通常提供比远程接口更高的性能。 在EJB 3.0及以后版本中,引入了无接口...
- EJB2中的Session Bean可以提供Local和Remote接口。Local接口用于在同一个JVM内的通信,Remote接口则用于跨JVM的通信。 - Local接口提供了更高效、类型安全的调用,而Remote接口需要序列化,适用于分布式环境。 ...
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....
- Remote接口适用于远程客户端,Local接口适用于在同一应用内的通信。 6. **EJB的并发和事务** - WebLogic Server支持多线程访问EJB,通过设置bean的并发策略(如Synchronized或Unsynchronized)来控制并发行为。...
在“ejb的录像”中,我们聚焦于EJB 3中的本地接口(Local Interface)和远程接口(Remote Interface)的使用。 EJB 3是EJB规范的一个重要版本,它引入了许多简化开发的特性,使得EJB更加轻量级,易于理解和使用。在...
EJB通常有三个接口:远程接口(Remote)、本地接口(Local)和业务接口(Business)。远程接口允许远程客户端访问,本地接口仅限于同一JVM内的访问,业务接口定义了Bean的业务方法。 6. **事务管理**: EJB支持...
- 如果既不使用`@Local`也不使用`@Remote`注解,容器会默认将接口视为Local接口。 - 示例代码: ```java @Local public interface AnnotatedEJBLocal { String getName(); void setName(String name); } @...
3. **接口和实现**:EJB组件通常定义了至少一个接口,客户端通过该接口与EJB通信。接口定义了业务方法,而实现类则包含了具体逻辑。对于会话bean,接口可能是远程接口(Remote Interface)或本地接口(Local ...
9. 客户端视图:客户端可以通过本地接口(Local Interface)或远程接口(Remote Interface)与EJB通信。本地接口适用于在同一JVM内的通信,而远程接口则用于跨JVM的交互。 10. 配置与部署:EJB2.0的部署过程包括...