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

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

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

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

相关文章

View的事件分发机制简述

要分析的对象就是MotionEvent&#xff0c;点击事件的事件分发其实就是对MotionEvent事件的分发过程&#xff0c;当MotionEvent产生后&#xff0c;系统需要把这个事件传递给一个具体的View&#xff0c;这个传递过程就是分发过程。这个过程由三个很重要的方法共同完成&#xff1a…

ListView的使用用ViewHolder提升效率

public class ListView extends AbsListViewjava.lang.Object ↳android.view.View ↳android.view.ViewGroup ↳android.widget.AdapterView<T extends android.widget.Adapter> ↳android.widget.AbsListView ↳android.widget.ListView Class Ove…

通过投影增强数据模型

介绍 数据模型可能很棘手。 建模可能会更加困难。 有时候&#xff0c;应该放入数据库表中的信息不一定是我们要在每段代码中使用的信息。 和其他许多次一样&#xff0c;Spring来了。 一个称为投影的小功能可以帮助我们在普通界面中仅用几行数据映射数据。 在本文中&#xff0…

ListView常用属性、方法

1、设置item间分割线&#xff0c;分割线高度 android:divider"android:color/darker_gray" android:dividerHeight"10dp" 分割线不仅仅可以设置为一个颜色&#xff0c;也可以设置为一个图片资源。 分割线设置为透明&#xff1a; android:divider"…

具有弹性效果的ListView

Android默认的ListView在滚动到顶端或底端&#xff0c;没有很好的提示&#xff0c;下面通过源码来实现弹性效果。 ListView中有一个控制滑动到边缘的处理方法&#xff1a; protected boolean overScrollBy(int deltaX, int deltaY,int scrollX, int scrollY,int scrollRangeX,…

rememberme多久_使用Spring Security添加RememberMe身份验证

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

Java 9:对可选的增强

之前 &#xff0c;我写过Java 8中引入的Optional类&#xff0c;该类用于对可能不存在的值进行建模并减少可能引发NullPointerException的位置的数量。 Java 9向Optional添加了三个新方法&#xff1a; 1. ifPresentOrElse 新ifPresentOrElse方法允许你执行一个动作&#xff0c…

电脑还原Mac地址

之前修改过电脑Mac&#xff0c;现在与手机Mac冲突&#xff0c;导致手机无法连接校园网。 控制面板——》打开网络和共享中心——》选择更改适配器设置 本地连接——》右键选择属性 上图选择配置 高级——》在下拉菜单中选择网络地址——》右边选为“不存在” 之后本地连接会自…

聊天ListView使用ViewHolder

聊天界面会展示至少两种布局&#xff0c;即收到消息和发送消息。这样一个ListView与平时使用的ListView的最大不同&#xff0c;在于它有两个不同的布局&#xff1a;收到的布局和发送的布局。需要利用Adapter实现这样的效果。即需要在获取布局的时候判断该获取哪个布局。 public…

动态改变ListView布局

在getView()时&#xff0c;通过判断选择加载不同的布局。 点击某个item的时候&#xff0c;变为foucus状态&#xff0c;其他的items还原。 下面用两个方法给item设置两个不同的布局。 //foucus状态&#xff0c;显示一个ImageViewprivate View addFocusView(int i) {ImageView…

jpa 关系拥有方_JPA:确定关系的归属方

jpa 关系拥有方使用Java Persistence API&#xff08;JPA&#xff09;时&#xff0c;通常需要在两个实体之间创建关系。 这些关系是通过使用外键在数据模型&#xff08;例如数据库&#xff09;中定义的&#xff0c;而在我们的对象模型&#xff08;例如Java&#xff09;中则使用…

JDBC连接备忘单

抽象 这是常见数据库的JDBC连接的快速参考。 我似乎必须大量查找此信息&#xff0c;因此我认为最好将所有参考资料放在一个地方。 德比 <dependency><groupId>org.apache.derby</groupId><artifactId>derbyclient</artifactId><version>1…

获取View坐标

滑动一个View&#xff0c;即移动一个View&#xff0c;改变其当前所处的位置&#xff0c;通过不断改变View的坐标实现滑动的效果。 1、Android坐标系&#xff1a;坐标原点在屏幕左上角。 public void getLocationOnScreen(int[] location) Computes the coordinates of this vi…

李宏毅 课程打包_按功能而不是按层打包课程

李宏毅 课程打包大多数企业Java应用程序在设计上都有一些相似之处。 这些应用程序的打包通常由它们使用的框架&#xff08;如Spring&#xff0c;EJB或Hibernate等&#xff09;驱动。或者&#xff0c;您可以按功能对打包进行分组。 像任何其他有关建模的项目一样&#xff0c;这也…

error inflating class binaryXML LayoutParams addRule()

报出异常的原因是由于少添加了构造方法&#xff0c;三个构造方法需要写完整&#xff0c;不能只写一个。参数为(Context, AttributeSet)&#xff0c;其中第二个参数用来将xml文件中的属性初始化。 自定义控件若需要在xml文件中使用&#xff0c;就必须重写带如上两个参数的构造方…

AppD方法:Java 9支持

通过从应用程序中学习企业APM产品&#xff0c;发现更快&#xff0c;更高效的性能监控。 参加AppDynamics APM导览&#xff01; 阅读有关Java 9模块化功能带来的挑战以及AppDynamics保持在该领域的领导者的严格要求的更多信息。 我们很高兴宣布Java 17全面支持&#xff0c;这是…

Java反射,但速度更快

在编译时不知道Java类的最快方法是什么&#xff1f; Java框架通常会这样做。 很多。 它可以直接影响其性能。 因此&#xff0c;让我们对不同的方法进行基准测试&#xff0c;例如反射&#xff0c;方法句柄和代码生成。 用例 假设我们有一个简单的Person类&#xff0c;其中包含名…

Git时间

1、Git是目前世界上最先进的分布式版本控制系统。和集中式版本控制系统相比&#xff0c;分布式版本控制系统的安全性要高很多&#xff0c;因为每个人电脑里都有完整的版本库&#xff0c;某一个人的电脑坏掉了不要紧&#xff0c;随便从其他人那里复制一个就可以了。而集中式版本…

横、竖分割线

竖分割线&#xff1a; <View android:layout_width"0.5px" android:layout_height"120dp" android:background"#B8B8B8" android:visibility"visible" /> <!-- 竖直线 -->横分割线&#xff1a;<Viewandroid:layout…

java中update_Java 7 Update 21安全改进的详细信息

java中updateOracle昨天发布了三个Java更新 。 重要的是要注意它们包含一些与安全性相关的更改。 一段时间以来&#xff0c;这些变更中的大多数已经宣布&#xff0c;首先要注意的是Oracle按计划交付。 Oracle公司Java平台安全经理米尔顿史密斯&#xff08;Milton Smith&…