ejb 2.0 3.0

这篇文章将讨论使用批注定义EJB视图的可能方法(最后我将只提到使用EJB部署描述符)。我将重点介绍最新的EJB 3.1视图,这些视图将省略旧的本地,远程和本地接口。 因此,我们可以选择:

  • 远程业务界面视图,
  • 本地业务界面视图,
  • 无接口视图

我不会讨论这些视图之间的功能差异,而将重点放在定义它们的可能方法上。

本地业务界面视图

  1. EJB正在实现此接口。

    @Local
    public interface LocalA {void localA();
    }
    @Stateless
    public class MeineEJB implements LocalA {@Overridepublic void localA() {}
    }

    优点:

    • 您不必在EJB中指定接口类型。 您只需“用Java实现”它,其余的工作就由容器完成。
    • 有关接口类型的信息牢固地附加在接口上,因此对于其他开发人员来说可能更容易理解。
    • 由于有了Java implements子句,您可以使用javac或IDE来确保实现了所有EJB业务方法。

    缺点:

    • 现在,您的界面已与EJB技术紧密结合(导入javax.ejb.*包。)现在,您必须为API客户端提供使用它所需的库。
  2. 具有

    EJB必须定义应该作为本地业务接口公开的接口(这是默认设置,请参见第3点。)

    public interface LocalA {void localA();
    }
    @Stateless
    @Local(LocalA.class)
    public class MeineEJB implements LocalA {@Overridepublic void localA() {}
    }

    优点:

    • 有关接口类型的信息是松散耦合的。 您可以将API交付给客户端,而不必关心EJB语义。 如果您将其隐藏在外立面上,那么最终用户(甚至是开发人员)甚至不必知道它在幕后使用EJB技术。
    • 由于有了Java implements子句,您可以使用javac或IDE来确保实现了所有EJB业务方法。

    缺点:

    • 您的EJB现在必须使用@Local注释定义其所有业务接口,因此这是您的附加工作。 不仅实现接口,还需要记住声明EJB正在公开它。 (从javac角度看)没有什么可以阻止您将接口放入@Local批注中,而该接口实际上不是由EJB实现的。
  3. EJB正在实现它。

    因为它是EJB唯一实现的接口,所以容器假定它必须是本地业务接口。 如果EJB实现多个接口,则容器将无法识别哪个接口是您的本地业务接口。

    public interface LocalA {void localA();
    }
    @Stateless
    public class MeineEJB implements LocalA {@Overridepublic void localA() {}
    }

    优点:

    • 具有上述第一种和第二种方法的所有优点。

    缺点:

    • 它假定EJB容器的默认行为以及开发人员对此的了解。 如果你使用一个以上的EJB图。它不会起作用。 此外,它甚至不会 ,如果你的EJB正在实施一个以上的工作界面(不一定是EJB视图)。
  4. 具有

    在这种情况下,有趣的是,因为您没有使用Java implements子句,所以实际上接口和EJB中的方法可以具有不同的签名。 任何此类不匹配都会导致容器抛出异常。 还请注意,业务接口方法实现上缺少@Override批注。 这是因为我们没有用Java术语实现任何接口。

    public interface LocalA {void localA();
    }
    @Stateless
    @Local(LocalA.class)
    public class MeineEJB {public void localA() {}
    }

    优点:

    • 有关接口类型的信息是松散耦合的。 您可以将API交付给客户端,而不必关心EJB语义。 如果您将其隐藏在外立面上,那么最终用户(甚至是开发人员)甚至不必知道它在幕后使用EJB技术。

    缺点:

    • 具有上面讨论的第二种方法的所有缺点。
    • 您声明为@Local接口的某些方法未实现的知识在很大程度上取决于使用的IDE。 Intellij IDEA会将其标记为错误,但AFAIR Eclipse则不会。
    • 在我看来,这是最重要的缺点的组合,因此是定义EJB视图的最糟糕的方法。

远程业务界面视图

本地业务接口视图的情况1、2和4对远程业务接口视图也有效。 点号 3是一个例外。 容器将永远不会假设任何有关远程接口的信息。 如果EJB正在实现某个接口并且未定义接口的类型,则它将始终假定它是本地的。

无接口视图

我确定阅读完上述部分后,您将能够确定使用以下两种方法定义无接口EJB视图的利弊。 因此,我将不在这里讨论它们。

  1. EJB注释为

    该EJB可以(但不是必须)实现某些接口(普通Java或业务本地/远程接口)。 @LocalBean仅对EJB类有效。

    @Stateless
    @LocalBean
    public class MeineEJB {public void localMethod() {}
    }
  2. EJB没有任何特殊的注释。

    该容器假定,如果将一个类注释为EJB,但未实现任何接口,并且没有任何与视图相关的注释–它将公开一个无接口视图。

    @Stateless
    public class MeineEJB {public void localMethod() {}
    }

EJB部署描述符(ejb-jar.xml)

前面的所有部分都在考虑使用批注定义的EJB视图。 您还可以使用部署描述符( ejb-jar.xml )定义EJB视图。 例:

public interface LocalA {void localA();
}
public interface RemoteA {void remoteA();
}
@Stateless
public class MeineEJB {public void localA() {}public void remoteA() {}
}
<ejb-jar xmlns='http://java.sun.com/xml/ns/javaee' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xsi:schemaLocation='http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_1.xsd' version='3.1'><enterprise-beans><session><ejb-name>MeineEJB</ejb-name><business-local>com.piotrnowicki.remotelocalejb.LocalA</business-remote><business-remote>com.piotrnowicki.remotelocalejb.RemoteA</business-remote><local-bean/></session></enterprise-beans>
</ejb-jar>

上面的代码和DD定义了一个EJB,它公开了三个视图(本地业务,远程业务和无接口)。 在语义上与以下内容相同:

@Stateless@Local(LocalA.class)@Remote(RemoteA.class)@LocalBeanpublic class MeineEJB {public void localA() {}public void remoteA() {}}

参考:在Piotr Nowicki主页博客上,我们的JCG合作伙伴 Piotr Nowicki 定义了EJB 3.1视图(本地,远程,无接口) 。

翻译自: https://www.javacodegeeks.com/2013/03/defining-ejb-3-1-views-local-remote-no-interface.html

ejb 2.0 3.0

ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)相关推荐

  1. 为什么我喜欢EJB 3.0并且尤其喜欢EJB 3.1

    http://developer.51cto.com/art/200906/127156.htm Marc Fleury在2002年写了一篇值得一读的文章 蓝皮书 "为什么我爱EJB&quo ...

  2. EJB 3.0中会话Bean,实体Bean,消息驱动Bean的作用和例子

    关键词:EJB 3.0,会话Bean,实体Bean,消息驱动Bean EJB 3.0规范使开发EJB比过去更容易,可能诱惑你考虑开发第一个EJB.如果真是这种情况,那么祝贺你,你已经成功避免了在你以前 ...

  3. 1.0jpa 2.0_JPA 2.1如何成为新的EJB 2.0

    1.0jpa 2.0 美丽在于情人眼中. "轻松"也是如此: 了解有关SQL结果集映射的更多信息,并轻松处理本机查询结果: http : //t.co/WH4BTlClIP #JP ...

  4. ejb的maven_针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

    ejb的maven 从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍,我们已经有一个父pom,并且已经为我们的war模块定义了pom. 在我们的原始设置中,我们定义了我们的应用程序将包含一 ...

  5. ejb 2.0 3.0_EJB 3.1全局JNDI访问

    ejb 2.0 3.0 如本系列前面部分所述,EJB 3.0版规范的主要缺点是缺少可移植的全局JNDI名称. 这意味着没有可移植的方式将EJB引用链接到应用程序外部的Bean. EJB v.3.1规范 ...

  6. ejb 2.0 3.0_EJB 3.0注入和查找简介

    ejb 2.0 3.0 介绍 Enterprise JavaBeans Specification v.3.0引入了简化的,基于注释的API,用于EJB注入和查找. EJB 3.0现在是POJO,可以 ...

  7. JPA 2.1如何成为新的EJB 2.0

    美丽在于情人眼中. "轻松"也是如此: 了解有关SQL结果集映射的更多信息,并轻松处理本机查询结果: http : //t.co/WH4BTlClIP #JPA #Java #Ja ...

  8. 针对新手的Java EE7和Maven项目-第3部分-定义ejb服务和jpa实体模块

    从前面的部分恢复 第1部分 第2部分 我们在第三部分继续介绍,我们已经有一个父pom,并且已经为我们的war模块定义了pom. 在我们的原始设置中,我们定义了我们的应用程序将包含一个ejb jar形式 ...

  9. EJB 3.0注入和查找简介

    介绍 Enterprise JavaBeans Specification v.3.0引入了简化的,基于注释的API,用于EJB注入和查找. EJB 3.0现在是POJO,可以使用简单的注释将其注入其 ...

最新文章

  1. C++利用线性探查实现存储机制hash table的算法(附完整源码)
  2. 【机器视觉】 measure_pos算子
  3. Hadoop学习系列之PageRank
  4. 使用Maven编译Tomcat源码
  5. springmvc知识点
  6. shell脚本while read line的使用
  7. acl的access-list命令使用详解
  8. 无意中发现的MSDN软件下载网站
  9. Just for fun--Linus
  10. 计算机论文外文翻译,计算机毕业论文外文文献译文.doc
  11. 百度竞价该如何选择关键词?
  12. 根据经纬度查询附近地点
  13. C++求一个数的最大奇数约数
  14. 移动信号e经常无服务器,手机信号从4G变成E,是什么情况?移动客服作出解答...
  15. eclipse wifi 连接手机
  16. LeetCode(力扣) 刷题注意事项 持续更新 ~ ~
  17. 家庭百兆升级千兆全攻略
  18. 【机器学习】舍友居然偷偷在看这篇文章·入门机器学习
  19. Hive第一天——Hive介绍以及简单使用
  20. linux下登陆FTP

热门文章

  1. Nacos(五)之Spring集成
  2. 深入Synchronized和java.util.concurrent.locks.Lock的区别详解
  3. Jdk1.8 JUC源码增量解析(2)-atomic-LongAdder和LongAccumulator
  4. Oracle入门(十三A2)之单行函数
  5. 什么是CAS机制?(进阶篇)
  6. java中实现客户姓名添加和显示
  7. 关于人脸识别最近浏览器打不开摄像头的解决方案
  8. java实现遍历树形菜单方法——数据库表的创建
  9. 银行营业网点管理系统——implt包(CityAreaDaoImpl )
  10. Zookeeper入门总结