定义EJB 3.1视图(本地,远程,无接口)

这篇文章将讨论使用批注定义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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/369096.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

小鱼的数字游戏

题目描述 小鱼最近被要求参加一个数字游戏&#xff0c;要求它把看到的一串数字&#xff08;长度不一定&#xff0c;以0结束&#xff0c;最多不超过100个&#xff0c;数字不超过2^32-1&#xff09;&#xff0c;记住了然后反着念出来(表示结束的数字0就不要念出来了)。这对小鱼的…

iview给radio按钮组件加点击事件

<RadioGroup v-model"formValidate.phone"><Radio label"phone">商家电话</Radio><Radio label"leaderPhone">负责人电话</Radio><span click"inputPhone()"><Radio label"newPhone"…

python json 不好用_Python之json使用

一、概念json是一种通用的数据类型&#xff0c;任何语言都认识接口返回的数据类型都是json长得像字典&#xff0c;形式也是k-v { }其实json是字符串字符串不能用key、value来取值&#xff0c;要先转成字典才可以格式如下&#xff1a;{"error_code": 0,#要使用双引号&…

jstack命令(Java Stack Trace)

转&#xff1a;http://blog.csdn.net/fenglibing/article/details/6411940 JDK内置工具使用 一、javah命令(C Header and Stub File Generator) 二、jps命令(Java Virtual Machine Process Status Tool) 三、jstack命令(Java Stack Trace) 四、jstat命令(Java Virtual Machine …

EJB继承与Java继承不同

尽管EJB继承有时使用Java继承&#xff0c;但它们并不总是相同的。 就像您在我以前的文章中可以读到的那样 &#xff0c;EJB不必实现任何接口即可公开业务接口。 另一种方法也是正确的-仅仅是因为EJB实现了某个接口或扩展了其他EJB并不意味着它公开了全部或任何视图。 假设我们…

信号量

信号量Semaphore初探 1.信号量(Semaphore)简述 信号量Semaphore是java.util.concurrent包下一个常用的同步工具类,他维护了一个许可集,可以理解成资源数,可以通过aquire操作来获取一个资源, 并通过release来释放一个资源,但需要注意的是,release来释放资源前不一定要先通过acqu…

(2017.9.27) 自定义列表项 list-style 使用心得

今天给某公司做招聘专页。早上完成设计图&#xff0c;下午开始排版。页面套用了我之前做的某人才局的招聘页面&#xff0c;导航栏、banner 很快就出来了。这次内容里我有些地方用了列表&#xff0c;当然要用 <ul> <li> 标签。列表项&#xff08;小圆点&#xff09;…

链式存储mysql_链栈:栈的链式存储结构

前面讲完了栈的顺序存储结构&#xff0c;我们现在来看看栈的链式存储结构&#xff0c;简称为链栈。链栈是没有附加头结点的运算受限的单链表。栈顶指针就是链表的头指针。栈是用栈顶来做插入和删除操作&#xff0c;那么对于链栈的栈顶放在链表的头部还是尾部呢&#xff1f;单链…

树状数组 学习笔记

树状数组可以用来求区间元素的和。与前缀和做法不同&#xff0c;它支持值的修改。比如说&#xff0c;现在我有一个数列a&#xff0c;要求你维护这个数列&#xff0c;使其支持两个操作。1.改变数列第k项的值2.查询从第i项到第j项的总值暴力做法总是过不了所有点的&#xff0c;如…

使用Spring Security添加RememberMe身份验证

我在“ 将社交登录添加到Jiwhiz博客”中提到&#xff0c;RememberMe功能不适用于Spring Social Security。 好吧&#xff0c;这是因为该应用程序现在不通过用户名和密码对用户进行身份验证&#xff0c;并且完全取决于社交网站&#xff08;例如Google&#xff0c;Facebook和Twit…

iOS动画-从UIView到Core Animation

首先&#xff0c;介绍一下UIView相关的动画。 UIView普通动画&#xff1a;[UIView beginAnimations: context:];[UIView commitAnimations]; 动画属性设置&#xff1a; 1 //动画持续时间2 [UIView setAnimationDuration:(NSTimeInterval)];3 //动画的代理对象4 …

视觉表现理论知识

本文地址&#xff1a;http://www.cnblogs.com/veinyin/p/7606714.html 终于可以知道视觉表现的实现方式&#xff0c;而不是一个一个的具体实现了&#xff0c;突然感到自己能够把握页面的整体布局了呢&#xff0c;似乎学到了表现背后的东西&#xff1f; 以下是一个突然发现自己…

java jnlp_java – 调试JNLP启动应用程序

解决方案#1 – 启用Java控制台,并查找异常.您可以通过Java控制面板完成.切换到“高级”选项卡,然后在Java控制台中确保选中“显示控制台”.然后,运行您的应用程序并监视控制台以查找异常.修复异常.解决方案#2 – 调试正在运行的应用程序(正确).像这样启动Web Start应用程序(适用…

201621123055《JAVA程序设计》第三周学习总结

1. 本周学习总结 1.1 写出你认为本周学习中比较重要的知识点关键词。 答&#xff1a;类、对象、关键字等。1.2 用思维导图或者Onenote或其他工具将这些关键词组织起来。(注&#xff1a;首次使用&#xff0c;不太会用软件&#xff09; 2. 书面作业 1.以面向对象方式改造数据结构…

通过运行示例从WSO2 ESB开始

我最近加入了一个新任务&#xff0c;在该任务中&#xff0c;我们必须基于WSO2工具栈实施ESB解决方案。 尽管我熟悉ESB的大多数概念以及其他一些实现&#xff08;例如Mule ESB &#xff09;&#xff0c;但这是我第一次必须使用WSO2 ESB 。 幸运的是&#xff0c;可以找到很多文档…

爬虫(十二):scrapy中spiders的用法

Spider类定义了如何爬去某个网站&#xff0c;包括爬取的动作以及如何从网页内容中提取结构化的数据&#xff0c;总的来说spider就是定义爬取的动作以及分析某个网页 工作流程分析 以初始的URL初始化Request&#xff0c;并设置回调函数&#xff0c;当该request下载完毕并返回时&…

position:fixed 兼容浏览器低版本

项目中遇到的坑&#xff0c;写篇博客做个笔记纪念下&#xff0c;position: fixed一般来说都兼容各个浏览器&#xff0c;但是要兼容浏览低版本问题&#xff0c;就得用-webkit-transform: translateZ(0);这段代码了。 项目中用到position: fixed;z-index: xxx;的时候&#xff0c;…

一些关于博主的xibusana

博主就是OI强省GD内偏远小渔村的咸鱼一条&#xff0c;雄性 高一开始入OI坑&#xff0c;从此走上了爆零和%大佬的不归路。 由于我的ID略多&#xff0c;所以你在网上可能找不到我哦v 2018/9/17 博主现在是一条走高考路的高三狗啊qvq 博客比较少上了&#xff0c;现在的目标还是考上…

监控java_Java应用程序监控JavaMelody

JavaMelody是运行在Java Web容器中&#xff0c;用来监控Java内存和J服务器CPU使用情况&#xff0c;用户Session数量&#xff0c;JDBC连接数&#xff0c;和http请求、sql请求等的执行数量&#xff0c;平均执行时间&#xff0c;错误百分比等。图表可以按天&#xff0c;周&#xf…

Heroku和Java –从新手到初学者,第1部分

最近&#xff0c;我听说Heroku允许在Cedar堆栈中部署Java应用程序。 由于没有真正的软件构想&#xff0c;我决定尝试一下&#xff0c;仅将SOMETHING配置为可在Heroku上运行。 我对ReST有一些迷恋&#xff08;我仍然想学习并练习&#xff09;&#xff0c;所以我决定我的第一个应…