成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

如何使用EJB3.0

這篇文章將為大家詳細(xì)講解有關(guān)如何使用EJB3.0,小編覺得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

創(chuàng)新互聯(lián)專注于勐臘網(wǎng)站建設(shè)服務(wù)及定制,我們擁有豐富的企業(yè)做網(wǎng)站經(jīng)驗(yàn)。 熱誠為您提供勐臘營銷型網(wǎng)站建設(shè),勐臘網(wǎng)站制作、勐臘網(wǎng)頁設(shè)計(jì)、勐臘網(wǎng)站官網(wǎng)定制、小程序制作服務(wù),打造勐臘網(wǎng)絡(luò)公司原創(chuàng)品牌,更為您提供勐臘網(wǎng)站排名全網(wǎng)營銷落地服務(wù)。

什么是EJB?

一個(gè)企業(yè)JavaBean (EJB)是一個(gè)可重用的,可移植的J2EE組件。 EJB由封裝了業(yè)務(wù)邏輯的多個(gè)方法組成。例如,一個(gè)EJB可以有包括一個(gè)更新客戶數(shù)據(jù)庫中數(shù)據(jù)的方法的業(yè)務(wù)邏輯。多個(gè)遠(yuǎn)程和本地客戶端可以調(diào)用這個(gè)方法。另外,EJB運(yùn)行在一個(gè)容器里,允許開發(fā)者只關(guān)注與bean中的業(yè)務(wù)邏輯而不用考慮象事務(wù)支持,安全性和遠(yuǎn)程對象訪問等復(fù)雜和容易出錯(cuò)的事情。EJB以POJO或者普通舊的Java對象形式開發(fā),開發(fā)者可以用元數(shù)據(jù)注釋來定義容器如何管理這些Bean。

EJB類型

EJB主要有三種類型:會話Bean,實(shí)體Bean和消息驅(qū)動Bean。會話Bean完成一個(gè)清晰的解耦的任務(wù),例如檢查客戶賬戶歷史記錄。實(shí)體Bean是一個(gè)代表存在于數(shù)據(jù)庫中業(yè)務(wù)對象的復(fù)雜業(yè)務(wù)實(shí)體。消息驅(qū)動Bean用于接收異步JMS消息。讓我們更詳細(xì)的認(rèn)識這些類型。

會話Bean

會話Bean一般代表著業(yè)務(wù)流程中象"處理訂單"這樣的動作。會話Bean基于是否維護(hù)過度狀態(tài)分為有狀態(tài)或者無狀態(tài)。無狀態(tài)會話Bean 沒有中間狀態(tài)。它們不保持追蹤一個(gè)方法調(diào)用另一個(gè)方法傳遞的信息。因此一個(gè)無狀態(tài)業(yè)務(wù)方法的每一次調(diào)用都獨(dú)立于它的前一個(gè)調(diào)用;例如,稅費(fèi)計(jì)算或者轉(zhuǎn)移賬款。 當(dāng)計(jì)算稅費(fèi)額的方法被調(diào)用時(shí),稅費(fèi)值被計(jì)算并返回給調(diào)用的方法,沒有必要存儲調(diào)用者為將來調(diào)用備用的內(nèi)部狀態(tài)。因?yàn)樗鼈儾痪S護(hù)狀態(tài),所以這些Bean是僅僅由容器管理。當(dāng)客戶端請求一個(gè)無狀態(tài)的Bean實(shí)例時(shí),它可以接收來自由容器管理的無狀態(tài)會話Bean實(shí)例集中的一個(gè)實(shí)例。也因?yàn)闊o狀態(tài)會話Bean能夠被共享,所以容器可以維護(hù)更少數(shù)量的實(shí)例來為大量的客戶端服務(wù)。簡單地象該Bean增加元注釋@Stateless 來指定一個(gè) Java Bean作為一個(gè)無狀態(tài)會話Bean被部署和管理。

一個(gè)有狀態(tài)的會話Bean維護(hù)一個(gè)跨越多個(gè)方法調(diào)用的會話狀態(tài);例如在線購物籃應(yīng)用。當(dāng)客戶開始在線購物時(shí),客戶的詳細(xì)信息從數(shù)據(jù)庫獲得。相同的信息對于當(dāng)客戶從購物籃中增加或者移除商品等等操作時(shí)被調(diào)用的其他方法也是可訪問的 。但是因?yàn)樵摖顟B(tài)不是在會話結(jié)束,系統(tǒng)崩潰或者網(wǎng)絡(luò)失敗時(shí)保留,所以有狀態(tài)會話Bean是暫時(shí)的。當(dāng)一個(gè)客戶端請求一個(gè)有狀態(tài)會話Bean實(shí)例時(shí),客戶端將會得到一個(gè)會話實(shí)例,該Bean的狀態(tài)只為給客戶端維持。通過向方法增加元注釋@Remove來告訴容器當(dāng)某個(gè)方法調(diào)用結(jié)束一個(gè)有狀態(tài)會話Bean實(shí)例應(yīng)該被移除。會話Bean實(shí)例

 
  1. import javax.ejb.Stateless.*;  

  2. /**  

  3. * A simple stateless session bean implementing the incrementValue() method of the * CalculateEJB interface.  

  4. */  

  5. @Stateless(name="CalculateEJB")  

  6. public class CalculateEJBBean  

  7. implements CalculateEJB  

  8. {  

  9. int value = 0;  

  10. public String incrementValue()  

  11. {  

  12. value++;  

  13. return "value incremented by 1";  

  14. }  

實(shí)體Bean

實(shí)體Bean是管理持久化數(shù)據(jù)的一個(gè)對象,潛在使用一些相關(guān)的Java對象并且可以依靠主鍵被***識別。通過包括@Entity 元注釋來指定一個(gè)類是一個(gè)實(shí)體Bean。實(shí)體Bean表示來自數(shù)據(jù)庫的持久化數(shù)據(jù),例如客戶表中的一個(gè)紀(jì)錄,或者一個(gè)員工表中的一個(gè)員工記錄。實(shí)體Bean也可以被多個(gè)客戶端共享。例如一個(gè)員工實(shí)體能夠被多個(gè)計(jì)算一個(gè)員工每年工資總額或者更新員工地址的客戶端使用。實(shí)體Bean對象特定變量能夠保持持久化。實(shí)體Bean中所有沒有@Transient 元注釋的變量需要考慮持久化。EJB3.0的一個(gè)主要特色是創(chuàng)建包含使用元數(shù)據(jù)注釋的對象/關(guān)系映射實(shí)體Bean的能力。例如,指定實(shí)體Bean的empId變量映射到employee表中的EMPNO屬性,象下面實(shí)例中一樣用@Table(name="Employees") 注釋這個(gè)表的名字和用@Column(name="EMPNO")注釋empId變量。另外,EJB3.0中的一個(gè)特色是你可以很容易的在開發(fā)時(shí)測試實(shí)體Bean,可以用Oracle Application Server Entity Test Harness在容器外部運(yùn)行一個(gè)實(shí)體Bean。

 
  1. import javax.persistence.*;  

  2. import java.util.ArrayList;  

  3. import java.util.Collection;  

  4. @Entity  

  5. @Table(name = "EMPLOYEES")  

  6. public class Employee implements java.io.Serializable  

  7. {  

  8. private int empId;  

  9. private String eName;  

  10. private double sal;  

  11. @Id  

  12. @Column(name="EMPNO", primaryKey=true)  

  13. public int getEmpId()  

  14. {  

  15. return empId;  

  16. }  

  17. public void setEmpId(int empId)  

  18. {  

  19. this.empId = empId;  

  20. }  

  21. public String getEname()  

  22. {  

  23. return eName;  

  24. }  

  25. public void setEname(String eName)  

  26. {  

  27. this.eName = eName;  

  28. }  

  29. public double getSal()  

  30. {  

  31. return sal;  

  32. }  

  33. public void setSal(double sal)  

  34. {  

  35. this.sal = sal;  

  36. }  

  37. public String toString()  

  38. {  

  39. StringBuffer buf = new StringBuffer();  

  40. buf.append("Class:")  

  41. .append(this.getClass().getName()).append(" :: ").append(" empId:").append(getEmpId()).append(" ename:").append(getEname()).append("sal:").append(getSal());  

  42. return buf.toString();  

  43. }  

消息驅(qū)動Bean

驅(qū)動Bean (MDB) 提供了一個(gè)實(shí)現(xiàn)異步通信比直接使用Java消息服務(wù)(JMS)更容易地方法。創(chuàng)建MDB接收異步JMS消息。容器處理為JMS隊(duì)列和主題所要求加載處理的大部分工作。它向相關(guān)的MDB發(fā)送所有的消息。一個(gè)MDB允許J2EE應(yīng)用發(fā)送異步消息,該應(yīng)用能處理這些消息。實(shí)現(xiàn)javax.jms.MessageListener接口和使用@MessageDriven注釋該Bean來指定一個(gè)Bean是消息驅(qū)動Bean。

消息驅(qū)動Bean實(shí)例

 
  1. import javax.ejb.MessageDriven;  

  2. import javax.ejb.ActivationConfigProperty;  

  3. import javax.ejb.Inject;  

  4. import javax.jms.*;  

  5. import java.util.*;  

  6. import javax.ejb.TimedObject;  

  7. import javax.ejb.Timer;  

  8. import javax.ejb.TimerService;  

  9. @MessageDriven(  

  10. activationConfig = {  

  11. @ActivationConfigProperty(propertyName="connectionFactoryJndiName", propertyValue="jms/TopicConnectionFactory"),  

  12. @ActivationConfigProperty(propertyName="destinationName", propertyValue="jms/myTopic"),  

  13. @ActivationConfigProperty(propertyName="destinationType", propertyValue="javax.jms.Topic"),  

  14. @ActivationConfigProperty(propertyName="messageSelector", propertyValue="RECIPIENT = 'MDB'")  

  15. }  

  16. )  

  17. /**  

  18. * A simple Message-Driven Bean that listens to the configured JMS Queue or Topic and gets notified 

  19. via an * invocation of it's onMessage() method when a message has been posted to the Queue or Topic. The bean  

  20. * prints the contents of the message.  

  21. */  

  22. public class MessageLogger implements MessageListener, TimedObject  

  23. {  

  24. @Inject javax.ejb.MessageDrivenContext mc;  

  25. public void onMessage(Message message)  

  26. {  

  27. System.out.println("onMessage() - " + message);  

  28. try  

  29. {  

  30. String subject = message.getStringProperty("subject");  

  31. String inmessage = message.getStringProperty("message");  

  32. System.out.println("Message received\n\tDate: " + new java.util.Date() + "\n\tSubject: " + subject + "\n\tMessage: " + inmessage + "\n");  

  33. System.out.println("Creating Timer a single event timer");  

  34. TimerService ts = mc.getTimerService();  

  35. Timer timer = ts.createTimer(30000, subject);  

  36. System.out.println("Timer created by MDB at: " + new Date(System.currentTimeMillis()) +" with info: "+subject);  

  37. }  

  38. catch (Throwable ex)  

  39. {  

  40. ex.printStackTrace();  

  41. }  

  42. }  

  43. public void ejbTimeout(Timer timer)  

  44. {  

  45. System.out.println("EJB 3.0: Timer with MDB");  

  46. System.out.println("ejbTimeout() called at: " + new Date(System.currentTimeMillis()));  

  47. return;  

  48. }  

使用EJB

客戶端是訪問Bean的應(yīng)用程序。雖然沒有必要保存在客戶層,但是能夠作為一個(gè)獨(dú)立的應(yīng)用,JSP,Servlet,或者另一個(gè)EJB??蛻舳送ㄟ^Bean的遠(yuǎn)程或者本地接口訪問EJB中的方法,主要取決于客戶端和Bean運(yùn)行在同一個(gè)還是不同的JVM中。這些接口定義了Bean中的方法,而由Bean類實(shí)際實(shí)現(xiàn)這些方法。當(dāng)一個(gè)客戶端訪問該Bean類中的一個(gè)方法時(shí),容器生成Bean的一個(gè)代理,被叫做遠(yuǎn)程對象或者本地對象。遠(yuǎn)程或者本地對象接收請求,委派它到相應(yīng)的Bean實(shí)例,返回結(jié)果給客戶端。調(diào)用一個(gè)Bean中的方法,客戶端使用定義在EJB不是描述文件的名字查找到Bean。在以下實(shí)例中,客戶端使用上下文對象找到命名為"StateLessejb"Bean。

EJB 客戶端實(shí)例

import javax.naming.Context;  import javax.naming.InitialContext;   /**  * A simple bean client which calls methods on a stateless session bean.  */   public class CalculateejbClient  {  public static void main(String [] args)  {  Context context = new InitialContext();  CalculateEJB myejb =  (CalculateEJB)context.lookup("java:comp/env/ejb/CalculateEJB");  myejb.incrementValue();  }  }

關(guān)于“如何使用EJB3.0”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯(cuò),請把它分享出去讓更多的人看到。

當(dāng)前名稱:如何使用EJB3.0
當(dāng)前URL:http://jinyejixie.com/article40/jjgoeo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開發(fā)企業(yè)建站、網(wǎng)站排名自適應(yīng)網(wǎng)站、做網(wǎng)站網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)
海口市| 镇沅| 昭平县| 葵青区| 临朐县| 应城市| 宜川县| 五莲县| 永胜县| 即墨市| 双柏县| 吴堡县| 健康| 浙江省| 英山县| 英山县| 汶川县| 安塞县| 莱阳市| 浙江省| 尚义县| 蓝田县| 邵阳市| 汾阳市| 宁陕县| 会同县| 满城县| 卓尼县| 治县。| 航空| 伊川县| 葵青区| 荥阳市| 昭苏县| 贵溪市| 沙雅县| 高邮市| 锦屏县| 通州区| 江源县| 安溪县|