ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)
ejb 2.0 3.0
這篇文章將討論使用批注定義EJB視圖的可能方法(最后我將只提到使用EJB部署描述符)。我將重點(diǎn)介紹最新的EJB 3.1視圖,這些視圖將省略舊的本地,遠(yuǎn)程和本地接口。 因此,我們可以選擇:
- 遠(yuǎn)程業(yè)務(wù)界面視圖,
 - 本地業(yè)務(wù)界面視圖,
 - 無接口視圖
 
我不會(huì)討論這些視圖之間的功能差異,而將重點(diǎn)放在定義它們的可能方法上。
本地業(yè)務(wù)界面視圖
EJB正在實(shí)現(xiàn)此接口。
@Local public interface LocalA {void localA(); }@Stateless public class MeineEJB implements LocalA {@Overridepublic void localA() {} }優(yōu)點(diǎn):
- 您不必在EJB中指定接口類型。 您只需“用Java實(shí)現(xiàn)”它,其余的工作就由容器完成。
 - 有關(guān)接口類型的信息牢固地附加在接口上,因此對(duì)于其他開發(fā)人員來說可能更容易理解。
 - 由于有了Java implements子句,您可以使用javac或IDE來確保實(shí)現(xiàn)了所有EJB業(yè)務(wù)方法。
 
缺點(diǎn):
- 現(xiàn)在,您的界面已與EJB技術(shù)緊密結(jié)合(導(dǎo)入javax.ejb.*包。)現(xiàn)在,您必須為API客戶端提供使用它所需的庫。
 
具有
EJB必須定義應(yīng)該作為本地業(yè)務(wù)接口公開的接口(這是默認(rèn)設(shè)置,請(qǐng)參見第3點(diǎn)。)
public interface LocalA {void localA(); }@Stateless @Local(LocalA.class) public class MeineEJB implements LocalA {@Overridepublic void localA() {} }優(yōu)點(diǎn):
- 有關(guān)接口類型的信息是松散耦合的。 您可以將API交付給客戶端,而不必關(guān)心EJB語義。 如果您將其隱藏在外立面上,那么最終用戶(甚至是開發(fā)人員)甚至不必知道它在幕后使用EJB技術(shù)。
 - 由于有了Java implements子句,您可以使用javac或IDE來確保實(shí)現(xiàn)了所有EJB業(yè)務(wù)方法。
 
缺點(diǎn):
- 您的EJB現(xiàn)在必須使用@Local注釋定義其所有業(yè)務(wù)接口,因此這是您的附加工作。 不僅實(shí)現(xiàn)接口,還需要記住聲明EJB正在公開它。 (從javac角度看)沒有什么可以阻止您將接口放入@Local批注中,而該接口實(shí)際上不是由EJB實(shí)現(xiàn)的。
 
EJB正在實(shí)現(xiàn)它。
因?yàn)樗荅JB唯一實(shí)現(xiàn)的接口,所以容器假定它必須是本地業(yè)務(wù)接口。 如果EJB實(shí)現(xiàn)多個(gè)接口,則容器將無法識(shí)別哪個(gè)接口是您的本地業(yè)務(wù)接口。
public interface LocalA {void localA(); }@Stateless public class MeineEJB implements LocalA {@Overridepublic void localA() {} }優(yōu)點(diǎn):
- 具有上述第一種和第二種方法的所有優(yōu)點(diǎn)。
 
缺點(diǎn):
- 它假定EJB容器的默認(rèn)行為以及開發(fā)人員對(duì)此的了解。 如果你使用一個(gè)以上的EJB圖。它不會(huì)起作用。 此外,它甚至不會(huì) ,如果你的EJB正在實(shí)施一個(gè)以上的工作界面(不一定是EJB視圖)。
 
具有
在這種情況下,有趣的是,因?yàn)槟鷽]有使用Java implements子句,所以實(shí)際上接口和EJB中的方法可以具有不同的簽名。 任何此類不匹配都會(huì)導(dǎo)致容器拋出異常。 還請(qǐng)注意,業(yè)務(wù)接口方法實(shí)現(xiàn)上缺少@Override批注。 這是因?yàn)槲覀儧]有用Java術(shù)語實(shí)現(xiàn)任何接口。
public interface LocalA {void localA(); }@Stateless @Local(LocalA.class) public class MeineEJB {public void localA() {} }優(yōu)點(diǎn):
- 有關(guān)接口類型的信息是松散耦合的。 您可以將API交付給客戶端,而不必關(guān)心EJB語義。 如果您將其隱藏在外立面上,那么最終用戶(甚至是開發(fā)人員)甚至不必知道它在幕后使用EJB技術(shù)。
 
缺點(diǎn):
- 具有上面討論的第二種方法的所有缺點(diǎn)。
 - 您聲明為@Local接口的某些方法未實(shí)現(xiàn)的知識(shí)在很大程度上取決于使用的IDE。 Intellij IDEA會(huì)將其標(biāo)記為錯(cuò)誤,但AFAIR Eclipse則不會(huì)。
 - 在我看來,這是最重要的缺點(diǎn)的組合,因此是定義EJB視圖的最糟糕的方法。
 
遠(yuǎn)程業(yè)務(wù)界面視圖
本地業(yè)務(wù)接口視圖的情況1、2和4對(duì)遠(yuǎn)程業(yè)務(wù)接口視圖也有效。 點(diǎn)號(hào) 3是一個(gè)例外。 容器將永遠(yuǎn)不會(huì)假設(shè)任何有關(guān)遠(yuǎn)程接口的信息。 如果EJB正在實(shí)現(xiàn)某個(gè)接口并且未定義接口的類型,則它將始終假定它是本地的。
無接口視圖
我確定閱讀完上述部分后,您將能夠確定使用以下兩種方法定義無接口EJB視圖的利弊。 因此,我將不在這里討論它們。
EJB注釋為
該EJB可以(但不是必須)實(shí)現(xiàn)某些接口(普通Java或業(yè)務(wù)本地/遠(yuǎn)程接口)。 @LocalBean僅對(duì)EJB類有效。
@Stateless @LocalBean public class MeineEJB {public void localMethod() {} }EJB沒有任何特殊的注釋。
該容器假定,如果將一個(gè)類注釋為EJB,但未實(shí)現(xiàn)任何接口,并且沒有任何與視圖相關(guān)的注釋–它將公開一個(gè)無接口視圖。
@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定義了一個(gè)EJB,它公開了三個(gè)視圖(本地業(yè)務(wù),遠(yuǎn)程業(yè)務(wù)和無接口)。 在語義上與以下內(nèi)容相同:
@Stateless@Local(LocalA.class)@Remote(RemoteA.class)@LocalBeanpublic class MeineEJB {public void localA() {}public void remoteA() {}}參考:在Piotr Nowicki主頁博客上,我們的JCG合作伙伴 Piotr Nowicki 定義了EJB 3.1視圖(本地,遠(yuǎn)程,無接口) 。
翻譯自: https://www.javacodegeeks.com/2013/03/defining-ejb-3-1-views-local-remote-no-interface.html
ejb 2.0 3.0
總結(jié)
以上是生活随笔為你收集整理的ejb 2.0 3.0_定义EJB 3.1视图(本地,远程,无接口)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: 运维网络管理人员常备的系统工具|服务器工
 - 下一篇: 永久关闭电脑弹窗广告的3个方法如何关闭电