帝国软件
  设为首页 加入收藏 关于我们
 
解密帝国网站管理系统
栏 目:
 
您的位置:首页 > 技术文档 > JAVA编程
J2EE之EJB种类介绍
作者:未知 发布时间:2005-03-12 来源:JSP天空网
作者: ??松瀛



J2EE 在今日已??逐?u的成?槠??I中???实???用程式平台,同?r也有?S多的程式?O????,甚至?W???O??人?T,利用 JSP/Servlet 的便利性,在 J2EE Server 上?_?l相?P的??用,或是?c公司?炔康馁Y源相?B接。



最近也有?S多人慢慢的投入 J2EE 中的其他技?g,其中 EJB 就是一??很值得投?Y的技?g。



?@篇文件?K不是要教您如何撰?? EJB ,但是希望???? EJB 有?d趣的使用者,能?虼笾虏t解 EJB 能??您作哪些事情。



EJB 依照特性的不同,目前?^分?槿??N,分?e是 Session Bean ,Entity Bean ,以及 Message Driven Bean 。其中 Session Bean ?cEntity Bean 算是 EJB 的始祖,?@?煞N EJB 在 EJB ??格 1.x 的?r候就已??存在了,而 Message Driven Bean ?t出?F在 EJB 2.0 的??格中。目前也有少???准??S商的 J2EE Server 支援 EJB 2.0 的??格。



●Session Bean

Session Bean 主要的目的是??程式?_?l者?⑦????映殡x,特?e是?}?s的????可以放在 Session Bean 中。Session Bean ??可以再??分?? Stateful Session Bean ?c Stateless Session Bean ,?@?煞N的 Session Bean 都可以?⑾到y????放在 method之中?绦校?不同的是 Stateful Session Bean 可以????呼叫者的???B,因此通常?碚f,一??使用者??有一??相????的 Stateful Session Bean 的???w (Instance ?]一) ,?Q言之,??使用者呼叫某?? Stateful Session Bean 的???? methods 的?r候, EJB Container(?]二) ??清楚的知道某?? EJB 的???w?凫赌骋???使用者的。因此一般的?O??上,不????????使用者同?r使用某?? Stateful Session Bean (?@?K不是表示????使用者不能使用同一?? Stateful Session Bean)。



Stateless Session Bean ?m然也是????元件,但是他?s不????????使用者???B,也就是?f??使用者呼叫 Stateless Session Bean 的?r候,EJB Container ?K不??找?ぬ囟ǖ? Stateless Session Bean 的???w???绦羞@?? method ,?Q言之,很可能????使用者在?绦心??? Stateless Session Bean 的 methods ?r,??是同一?? Bean 的 Instance 在?绦小?



?挠????w方面?砜矗? Stateful Session Bean ?c Stateless Session Bean 比?^, Stateful Session Bean ??消耗 J2EE Server ?^多的?????w,然而 Stateful Session Bean 的?????s在於他可以?S持使用者的???B。



●Entity Bean

Entity Bean 主要是?Y料元件, Entity Bean 主要的目的,在於提供?Y料,也就是?f程式?O????可以?? Entity Bean ??程式?Y料,至於 Entity Bean ???H上怎?N存取???H上的?Y料?欤?那???t是另外一件事情。



Entity Bean ???H上是???? RDBMS 而?O??,也就是?f??其他的程式使用Entity Bean 的?r候, Entity Bean 的?Y料主要是?? RDBMS 而?恚???然,如果程式?O????熟悉 Entity Bean 的?作,那?N也可以很?p易的把RDBMS 用其他的?Y料?烊〈?,像是 LDAP 。



Entity Bean 主要?^分?? Bean-Managed Persistence 以及 Container-Managed Persistence (???Q BMP 及 CMP) ,?@?煞N Entity Bean 的型?B不同,但是目的相同,都在於提供?Y料!?@?煞N Entity Bean 主要的差?e在於?S?o?Y料的角色, BMP 是由 Bean 自行?S?o?Y料的一致性,而CMP ?t是由 EJB Container ?砭S?o。一?? Entity Bean 往往代表一?? RDBMS 的表格,?@??表格?鹊囊还P一?P的?Y料,?t是透?^另外一??叫做 Primary Key(?]三) 的 Class ?砑右??^分。



●Bean-Managed Persistence

??我???f BMP 是由 Bean 自行?S?o?Y料的一致?r,有些人???X得太?^於抽象,???我稽c?碚f,原?淼馁Y料均由?Y料?於??恚?而???Y料?馁Y料?熘腥〕鲋?後,在 BMP 中需要自行宣告?谖??泶娣胚@些?Y料,同?r也要自行撰??相?P的程式?a,包括相?P的 JDBC ?Z法等等。



●Container-Managed Persistence

CMP 是比?^高?A的 Entity Bean ,比?^高?A的意思是?f,撰?? CMP 的程式?O?????K不需要撰??大多?档? JDBC ?Z法,只需要透?^一些定?x,即可?a生 CMP ,???H上的 EJB 的程式?a?t是 EJB Container 依??相?P的 Deployment Description (?]四) 在部署(?]五) EJB 的?r候?a生





BMP ?c CMP 的型?B不同,?m用的?龊弦膊煌?,主要的差??在於如果我??想要自行控制所有的?幼鳎?那?N????使用 BMP , BMP 允?S程式?O????完全的控制 BMP 的?Y料存取行?椋?而 CMP 很?m合快速?_?l,但是由於要支援 CMP 的 J2EE Server 需要?^高的技?g,因此每一家??於 CMP 的支援程度也不大相同。



此外,?Y料?熘杏幸???很重要的?P?S是 OR Mapping ,也就是常??到的一?σ唬?一?Χ啵?多?Χ噙@?N?P?S,在 EJB 1.x 的??格中,?@?N一?Χ嗟??????P?S只有?煞N方式可以做出,一?N是透?^ Session Bean ?泶嫒《??? Entity Bean ,另外一?N?t是透?^ BMP ?砜刂屏硗????? BMP 或是CMP ,但是在 EJB 2.0 的??格中,已??可以透?^??粹的 CMP 配合 EJB-QL(?]六) ?Z法?碜龀鲞@?N?????P?S,?@也是 EJB 2.0 的一大特色。



●Message Driven Bean

Message Driven Bean ?c Session Bean 或是 Entity Bean 均不相同,一般 Session Bean 或是 Entity Bean 都可以??使用者主?佑|?l(可以在需要的?r候,呼叫他??的 method ?碛|?l他??),但是 Message Driven Bean 主要的目的在於反?? Message Queue 中的事件。



也就是?? Message Queue 中有??息?魅??r, Message Driven Bean 可以主?颖挥|?l,做出相????的反??。因此如果?f Session Bean ?c Entity Bean 是同步模式的 EJB (使用者呼叫某?? Method ,就只能等 EJB 回??之後才能?M行下一步),那?N Message Driven Bean 就可以??成是?iT??理非同步?Y料格式的 EJB ,也就是?f程式?O?????⒛?????息?G入 Message Queue 之後,就?^?m?绦邢氯ィ?另外一方面, Message Driven Bean ??受到通知,知道有某????息需要??理,?@?r候他??自行?作。



因此 Message Driven Bean ?K不是直接?o使用者呼叫的,而是透?^ Message Queue ?碛|?l。



如果您?? EJB 有?d趣,可以?⒖? Sun 的教育?????n程 SL-351 。



?]一:

Bean Instance 表示在?????w中???H上?a生的物件,一?? Bean Class 可以?a生多?? Bean Instance 。Bean Instance 才是真正?绦? EJB method 的物件,可想而知的是, Instance 的?盗吭蕉啵?耗去的?????w越多。



?]二:

EJB Container 是?????绦? EJB 的地方,所有 EJB 的?a生,或是消?纾?或是?绦械鹊龋?均透?^ EJB Container ?硖?理。??使用者呼叫某??EJB 的?r候,???H上也是透?^ EJB Container ???绦小?



?]三:

在 RDBMS 中,一?? Table 可能??有相?P的 Primary Key 的?谖唬?而Entity Bean 中也有相????的 Class ?肀硎具@?? Primary Key ,譬如如果?Y料?熘校?某?? VARCHAR ?谖皇撬?的 Primary Key ,那?N Entity Bean 中?t可以用 String ?肀硎具@?? VARCHAR ?谖弧?



?]四:

Deployment Description 是一?N XML 格式的文件(???Q DD),?@??文件用?砻枋? EJB 的?N??,型?B,以及相?P的?Y料。 EJB 的?作中,也以DD ?鹊拿枋??橹鳌?



?]五:

部署是一???幼鳎?一????好的 EJB ?K不能?为??绦校?他必??被"置放"到EJB Container 之後才能?蜻作,?@??置放的?幼鳎?我??叫做部署。部署的?幼飨喈??}?s,但是?κ褂谜??碚f很可能是按??按?o即可以完成。



?]六:

EJB-QL 是一?N查?? EJB Instance 的特殊?Z法,?Z法格式?c ANSI SQL 很像,很容易上手。?@???Z法??被放置在 DD 之中,而 EJB Container 可以依照?? DD 取得的 EJB-QL ?Z法,自行?a生?c其他 CMP 的?P??。





--------------------------------------------------------------------------------



J2EE 之 Enterprise JavaBeans 介?B(二) EJB 效能

曾??有?W生??我,用 EJB 的速度快?幔课业幕卮鹗遣豢欤???然,在我的比?^???手校?是以 JSP/Servlet 直接透?^ JDBC 存取?Y料?欤??cJSP/Servlet 透?^ EJB ?泶嫒≠Y料?斓姆绞??肀容^。



???H上??我??做到 EJB 的?r候,您????考?]的是您??出?淼某淌剑?已??不是一般使用者 desktop 上?绦械某淌搅耍?而是 J2EE Server 上?绦械脑?件,因此效能的???},很可能已??不是最??先的考量,系?y架??的???}反而是整?? J2EE ??用程式的目?怂?在。



EJB 不?蚩??幔????H上 EJB 是?蚩斓模?只是同?拥??⑦???放在 JSP 中跟放在 EJB 中然後再由 JSP 透?^ JNDI 查??,?绦械姆绞较啾容^的??,?裼? EJB 的架??跟直接使用 JSP 相比?^下,是的, EJB ?]有比?^快(??注意?@???l件前提!)



撇?_?@些多?蛹???的???},??粹就 EJB 本身?碚f, EJB 在 1.x 的?r候的?_??有些缺?c,很???蔚氖? EJB 1.1 中,所有的 Method 均透?^Remote Interface ??理,也就是?f即使???? EJB 位於同一?? EJB Container 底下,他??是??透?^?W路?砗艚校?所?鬟f的?Y料一?邮? pass by value 。



●Local Interface 的?O??

在 EJB 2.0 的??格中,?榱颂岣? EJB ?c其他元件?g的?作效率,特?e?O??了 Local Interface ,透?^ Local Interface ,元件之?g的呼叫可以 pass by reference ,?@???幼鞔蟠蟮募涌炝? EJB ?c其他元件之?g的?作模式,但是前提是?@一?? EJB 必需要?c呼叫的程式或是元件位於同一?? JVM 才行。



善用 Local Interface 的?O??可以?m??的提高 EJB 的效率,??然,他也?奚?掉一些??性,譬如?o法跨?W路存取!!



●善用 DAO (Data Access Object)

如果?o法使用 Local Interface ,那?N也必??要能?蛏朴? DAO 的?O??,?Q言之就是?Y料一次抓?R,避免大量的?W路存取。



?@一???^念很???危?每次我???|?l Remote Method 的?r候,都??有一些Overhead ,因此假?O?Y料?斓哪彻P?Y料有十???谖唬?那?N我??可以作十次的 Remote Access ?矸??e取得?@十???谖唬?不?^?@些?W路?鬟f的 Overhead就??有十倍大,如果我??改善?@?? Entity Bean ,提供一??特定的 method,?@?? method 可以?鬟f一??物件,?@??物件?染桶?含十???谖坏馁Y料,那?N??於使用者?碚f,只要作一次的 Remote Access 就可以取得所有的?Y料,?@?幼???比作十次的 Remote Access ??要?淼糜行?率!



●利用 Transaction ?砜刂? Entity Bean

Entity Bean ?榱司S持?Y料的一致性,常常需要作一些特?e的?幼鳎?譬如ejbLoad() ?①Y料?x出?Y料?欤? ejbStore() ?①Y料存入?Y料?臁_@?N?O??理念是很棒的,但是如果不熟悉 EJB 架??的??,很可能???е鲁淌缴系娜毕荩?也就是每次呼叫 Entity Bean 的某?? Method ,就???|?l ejbLoad以及 ejbStore ,?@?拥脑O??是有???}的?O??,不但?]有效率,而且??延?t整???作。



我??可以透?^ Entity Bean 的六?? Transaction Attribute,配合 BMT (Bean-Managed Transaction) ?硖岣? Entity Bean 在?作上的效率,也就是?f在?m??的?r?C才?? Entity Bean ?绦? ejbStore 。



●?x?襁m??的 EJB ?N??

有些?幼鳎?可以使用 Session Bean , Entity Bean 或是 Message Driven Bean ?硗瓿桑?譬如?绦谐淌较胍??a生 log 的?r候,?@?r候我??可以提供Session Bean , Entity Bean ,或是 Message Driven Bean ,不?^作Log 的?幼魍?往??耗掉 CPU 的?r?g,?@?r候如果我???x?? Entity Bean ,那?N程式必??在每次要作 Log 的?r候都要等待 Entity Bean 回??,之後才回?^?m往下跑,如果我???? Log ?G到 Message Driven Bean 中,那?N程式便可以?^?m?绦校? Log 的?幼??t另外由 Message Driven Bean ?硖?理,藉由?@?N?G出後不理的方式,也可以增?M某些程式或是 EJB 的效能。



●?南到y架??上?硖嵘?效能

如果某?? J2EE Server 上部署了?凳??? EJB ,那?N?@台?C器????成怎?樱课蚁牒芎??蔚囊??????}是?@一?? VM 必??同?r服?栈蚴禽?流在?@?凳??? EJB中?[走,如此一?恚?不管您的程式怎?N??,我想要大幅提高程式的效率是比?^困?y的。



但是 EJB 的特性是允?S使用者透?^ Remote 的方式呼叫,因此我??可以?⒉煌?的 EJB 部署在不同的?C器上,藉由分散式的架??,?硖岣哒???系?y的?作效能,?@??就像是?⒅亓糠旁谕?一匹?R上,?@匹?R跑不快,如果?⒅亓糠稚⒃谑?匹?R,那?N?@十匹?R?t可以以?^快的速度前?M,??然,您也必??要?x???R!



如果您?? EJB 有?d趣,可以?⒖? Sun 的教育?????n程 SL-351 。
  
评论】【加入收藏夹】【 】【打印】【关闭
※ 相关链接
 ·浅析J2EE与.NET平台优劣  (2005-03-12)
 ·J2EE 组件开发:会话EJB  (2005-03-12)
 ·如何实现一个与数据库表字段松耦  (2005-03-12)
 ·当前流行的J2EE WEB应用架构分析  (2005-03-12)
 ·J2EE配置指南  (2005-03-12)
 ·J2EE技术  (2005-03-12)
 ·j2ee技术简单介绍  (2005-03-12)
 ·选择:J2EE还是.NET,这是一个问  (2005-03-12)
 ·J2EE中的安全第一部分  (2005-03-12)
 ·J2EE中的安全第二部分  (2005-03-12)

   栏目导行
  PHP编程
  ASP编程
  ASP.NET编程
  JAVA编程
   站点最新
·致合作伙伴的欢迎信
·媒体报道
·帝国软件合作伙伴计划协议
·DiscuzX2.5会员整合通行证发布
·帝国CMS 7.0版本功能建议收集
·帝国网站管理系统2012年授权购买说
·PHPWind8.7会员整合通行证发布
·[官方插件]帝国CMS-访问统计插件
·[官方插件]帝国CMS-sitemap插件
·[官方插件]帝国CMS内容页评论AJAX分
   类别最新
·谈谈JDBC
·JDBC专题介绍
·JDBC接口技术
·利用weblogic的POOL(连接池)连接
·Jsp中调用Oracle存储过程的小例子
·JSP数据库操作例程
·JSP数据库连接大全
·用连接池提高Servlet访问数据库的效
·一种简单JDBC连接池的实现
·数据库连接池Java实现小结
 
关于帝国 | 广告服务 | 联系我们 | 程序开发 | 网站地图 | 留言板 帝国网站管理系统