Terry.Li-彬

          虛其心,可解天下之問(wèn);專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評(píng)論 :: 0 Trackbacks

          來(lái)自:http://www.yeeyan.com/articles/view/60971/36275

          簡(jiǎn)介

          EJB 3是Java EE 5中獲取提升最多的技術(shù),在即將發(fā)布的Java EE 6中 EJB 3.1將進(jìn)一步帶給大家驚喜。Adam結(jié)合他的項(xiàng)目實(shí)踐,在本文中詳細(xì)列舉了他所喜愛(ài)EJB 3的特性。

          Marc Fleury在2002年寫(xiě)了一篇值得一讀的文章 藍(lán)皮書(shū) "為什么我愛(ài)EJB"  (下載),他的觀點(diǎn)在當(dāng)時(shí)是令人驚訝的。我那是已經(jīng)在使用EJB,但并不真正地愛(ài)他們 :-)。我沒(méi)有到哪個(gè)程度,但我真的喜歡EJB 3.0。原因如下:

          1. 性能開(kāi)銷低。Glassfish v2中 只有大約3%.
          2. EJB 3.0是線程安全的(thread save)。這是一個(gè)巨大的優(yōu)點(diǎn)。 每個(gè)線程所都擁有的實(shí)例,包括所有注入的資源比如實(shí)體管理器(Entity Manager),數(shù)據(jù)源(Data Source)和JMS,都是線程安全的。最棒的是:容器為你做到了這一切。你只需要一個(gè)標(biāo)識(shí)(annotation),比如引用EJB的@EJB,獲取 持久化上下文的@PersistenceContext以及引用資源的@Resource :-))。更多討論請(qǐng)參看"plain old Web Container" :-)(想想POJO-Plain Old Java Object,譯者注)。提醒一下:Servlet作為一種單例(singletons)模式不是線程安全的。
          3. EJB 3.0 支持 事務(wù)(transactional)。 所以只要成功調(diào)用了EJB方法,所有的資源將都是同步的(synchronized),比如寫(xiě)到數(shù)據(jù)庫(kù)中的數(shù)據(jù),發(fā)給服務(wù)器的消息等。容器會(huì)為你做到這些,你只要知道你所要做的是什么 (這和平臺(tái)無(wú)關(guān),但有時(shí)難以實(shí)現(xiàn) :-))
          4. 在我所有的項(xiàng)目中都將部署描述符而替換成了annotation。這樣就只有一個(gè)persistence.xml文件需要部署。EJB在重構(gòu),部署和移植方面都表現(xiàn)良好。
          5. EJB 3.0是真正可移植的(它可以讓你中立于實(shí)現(xiàn)提供商和架構(gòu))。 相比EJB 2.1,這點(diǎn)更加突出,因?yàn)樗接械牟渴鹈枋龇辉傩枰?shí)際上,EJB 3不再需要任何描述符。你只要部署干干凈凈的jar文件,然后附上在meta-inf中的persistence.xml,而其他都是可選的。
          6. 在EJB 3 中,慣例優(yōu)先原則(Convention Over Configuration)或正式地稱為基于期望的配置( Configuration By Exception) ,它們和依賴注入(Dependency Injection) 的結(jié)合非常完美。大多數(shù)場(chǎng)合,開(kāi)發(fā)EJB只需要少量的代碼(比如沒(méi)有"new"的調(diào)用,而只需要做個(gè)聲明)
            @Stateless
            public class SampleBean implements Sample {
                @PersistenceContext
                private EntityManager em;


                @EJB
                private Another anotherBean;

          7. Getters 和Setters方法是可選的: 不僅對(duì)于EJB,同樣對(duì)于JPA。 資源可以直接注入到字段之中。
          8. 缺省和annotation的配置能夠被XML描述符覆蓋。而XML描述符不需面面俱到 - 你只要指定感興趣的部分。你可以為某個(gè)特定階段(比如測(cè)試、集成)開(kāi)發(fā)通過(guò)XML描述對(duì)產(chǎn)品進(jìn)行重新設(shè)置。
          9. 不需要特別的工具。你只需要annotation,一個(gè)Java 6 的編輯器和一個(gè)Jar文件。 無(wú)論是IntelliJ,Eclipse (含500附件的插件:-))還是Netbeans 6.1都對(duì)EJB 3提供了完善的支持,并對(duì)應(yīng)用服務(wù)器也做了很好的集成,EJB的部署、取消部署、配置等都可以直接由IDE來(lái)管理。
          10. EJB 3.1可嵌入的特性很可能將獲得支持。Glassfish v3已經(jīng)對(duì)此提供支持。在GlassFish的測(cè)試中,我發(fā)現(xiàn)容器的啟動(dòng)只要令人驚訝的500ms。 此外,JBoss也支持可嵌入。
          11. EJB 3.1將提供許多有用的特性:Singletons (更便于配置和用于啟動(dòng)類等), 更好的timer支持 (cron-like),將來(lái)的異步方法,可選的local-interfaces 和基于WAR包的部署。
          12. 池的設(shè)置和線程池的配置對(duì)伸縮性的控制非常有幫助(除非容器崩潰,否則你不會(huì)為無(wú)法確定伸縮性而頭痛:-))
          13. 和腳本語(yǔ)言交互的良好支持(包括JavaScript, Groovy)
          14. EJB是缺省可以被管理和監(jiān)控的。EJB部署到容器后,你就可以對(duì)其方法調(diào)用和性能等進(jìn)行監(jiān)控。
          15. 不需事先依賴任何的架構(gòu)和庫(kù)等。ejb-jar和容器為你的應(yīng)用代碼打理一切,所以拋出像NoClassDefFoundErrors,ClassCastExceptions這樣異常的可能會(huì)降到最低。
          16. EJB 3.0是超級(jí)緊湊的技術(shù)。實(shí)際上你已經(jīng)不可能再為它做些什么簡(jiǎn)化 :-)。當(dāng)然,這方面我也愿意聽(tīng)大家的意見(jiàn)。
          17. 他們非常容易測(cè)試-因?yàn)镋JB就是一些類和接口。你甚至可以在容器之外啟動(dòng)它們。
          18. 即使最簡(jiǎn)單的use cases也可以用EJB 3高效的實(shí)現(xiàn)。比如關(guān)于增刪查改的 CRUD的例子:
            @Stateless
            public class CrudServiceBean implements CrudService<Integer,Customer> {
               
                @PersistenceContext
                private EntityManager em;

                public Customer create(Customer t) {
                    this.em.persist(t);
                    return t;
                }

                public void delete(Customer t) {
                    t = this.em.merge(t);
                    this.em.remove(t);
                }

                public Customer find(Integer id) {
                    return this.em.find(Customer.class, id);
                }

                public Customer update(Customer t) {
                    return this.em.merge(t);
                }
             }

          19. ...他們工作的非常棒:近兩年來(lái),我在項(xiàng)目中使用EJB 3.0 + JPA 1.0。它們的出色表現(xiàn)不僅給我?guī)?lái)的驚喜,也給我們團(tuán)隊(duì)的帶來(lái)了驚喜。

          然而,Java EE6平臺(tái)仍有可以提升的空間。JMS規(guī)范應(yīng)該重新設(shè)計(jì),讓其更加“流暢”(fluent)。JNDI注冊(cè)機(jī)制顯得陳舊,有關(guān)JNDI的API的改進(jìn)和簡(jiǎn)化將不僅有助于EJB的開(kāi)發(fā),而且整個(gè)Java EE平臺(tái)也將因此受惠...

          posted on 2009-04-18 11:19 禮物 閱讀(295) 評(píng)論(0)  編輯  收藏 所屬分類: ejb3.0
          主站蜘蛛池模板: 潼南县| 沾化县| 望奎县| 杨浦区| 汉沽区| 潜江市| 南和县| 澄江县| 安多县| 开化县| 阳山县| 永德县| 乐东| 凉山| 盐城市| 苍溪县| 榆中县| 蒲城县| 西昌市| 兰考县| 炉霍县| 青冈县| 三河市| 长宁县| 马山县| 余姚市| 固原市| 沾益县| 福安市| 禄劝| 连州市| 宜兰县| 光山县| 曲麻莱县| 连平县| 高邑县| 上林县| 那曲县| 陇西县| 黔西| 焦作市|