这篇文章将讨论使用批注定义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 3.1视图(本地,远程,无接口)相关推荐

  1. ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)

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

  2. 乐鑫esp8266基于freeRtos实现私有服务器本地远程OTA升级

    代码地址如下: http://www.demodashi.com/demo/13533.html 文章目录 一.前言: 二.回顾下`OTA`的流程: 三.`lwip`网络框架的知识的使用: 四.如何处 ...

  3. Java本地远程服务器debug调试详解

    日常我们debug是经常用的,但是本地还好说,远程debug就有点难度,而且有时候必须要在预演,测试环境的服务器去debug,举个例子,需要https,公网,域名之类的,测试服务器这些有些是配置的,但 ...

  4. mbk文件导入到oracle,Oracle基于物化视图的远程数据复制

    物化视图简介: 远程表复制功能:可以借助数据库链接(dblink),在远程数据库中建立一个本地表的副本,用该方式实现表的定时同步.物化视图存储基于远程表的数据,也可以称为快照. 加速查询功能:物化视图 ...

  5. 火车头dede采集接口,图片加水印,远程图片本地化,远程无后缀的无图片本地化...

    <?php /*[LocoySpider] (C)2005-2010 Lewell Inc.火车采集器 DedeCMS 5.7 UTF8 文章发布接口 Update content: 图片加水印 ...

  6. [转载]: 用PsTools工具执行本地/远程Windows管理任务

    本文转载如下连接:SysInternals系列:使用PsTools工具执行本地/远程PC管理任务如果你希望使用命令行连接到远程计算机上执行各种管理工作,如查看远程计算机进程信息.关闭进程.甚至是管理远 ...

  7. 本地远程连接不上宝塔面板里的数据库的解决方案

    一.开放3306端口 在宝塔上能通过phpmyadmin进入数据库,但是本地远程连接就无法访问,这时,需要检查一下端口是否开放 先看下宝塔的端口: 在看下阿里云或腾讯云服务器上的端口: 3306端口开 ...

  8. 搭建 本地 远程git 仓库

    ubuntu 搭建本地 远程git 仓库 # 安装git sudo apt-get install git 可以通过创建一个专门的用户来管理 git 在服务器上搭建远端git仓库 创建一个目录, 作为 ...

  9. 实验室服务器使用指南:pytorch、tensorflow安装问题、visdom安装问题本地远程调用服务器jupyter问题、本地pycharm远程连接服务器

    需要:实验室服务器账号+本地windows装有Xshell和xftp 一:安装anoconda: 1:windows本地下载anoconda的安装文件,下载地址 用户:官网 国内用户:清华源 2:经过 ...

最新文章

  1. 七、 熵编码算法(1)——基础知识
  2. Google Chrome Source Code 源码下载
  3. Xara Designer Pro中文版
  4. (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)...
  5. GridView列值绑定
  6. HDOJ 1398 Square Coins
  7. mysql 里面不等于符号_mysql 不等于 符号写法
  8. 这可能是目前最好的图像超分辨率算法,刚刚开源了
  9. Windows下架设SVN服务
  10. 一款用来下载pdf word zip img各种文件的js插件
  11. qq群t人php,QQ群机器人,自动加人、T人、与人聊天,你不在,有机器人呢
  12. 网易云服务器使用https
  13. 机器人开发--有刷电机 与 无刷电机
  14. QPushButton 实现保持按下效果
  15. hive之beeline连接与操作
  16. C# 操作MongoDB时间 时差问题
  17. android 播放提示音,[转载]android播放音效例子 (翻页音效、警报音效通用
  18. daimayuan每日一题#812 互质
  19. Android Studio报错--Error: Library projects cannot set applicationId. applicationId is set to ...
  20. pythonweb全栈开发_Python web全栈学习路线

热门文章

  1. no [query] registered for [filtered] in es7 的解决方法
  2. spring(5)构建 spring web 应用程序
  3. java集合——树集(TreeSet)+对象的比较
  4. zuul过滤器_Zuul 2 –样本过滤器
  5. std::tostring_枚举:如何正确使用name()和toString()方法
  6. java fix_Java中的低延迟FIX引擎
  7. JDK 15中的确切绝对整数
  8. Java整数缓存-为什么Integer.valueOf(127)== Integer.valueOf(127)为True
  9. 无服务器安全性:将其置于自动驾驶仪上
  10. 在Microsoft Azure上运行Eclipse MicroProfile