中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

如何使用EJB3.0

發布時間:2021-11-03 11:38:01 來源:億速云 閱讀:143 作者:小新 欄目:編程語言

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

什么是EJB?

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

EJB類型

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

會話Bean

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

一個有狀態的會話Bean維護一個跨越多個方法調用的會話狀態;例如在線購物籃應用。當客戶開始在線購物時,客戶的詳細信息從數據庫獲得。相同的信息對于當客戶從購物籃中增加或者移除商品等等操作時被調用的其他方法也是可訪問的 。但是因為該狀態不是在會話結束,系統崩潰或者網絡失敗時保留,所以有狀態會話Bean是暫時的。當一個客戶端請求一個有狀態會話Bean實例時,客戶端將會得到一個會話實例,該Bean的狀態只為給客戶端維持。通過向方法增加元注釋@Remove來告訴容器當某個方法調用結束一個有狀態會話Bean實例應該被移除。會話Bean實例

 
  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. }  

實體Bean

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

消息驅動Bean

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

消息驅動Bean實例

 
  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的應用程序。雖然沒有必要保存在客戶層,但是能夠作為一個獨立的應用,JSP,Servlet,或者另一個EJB。客戶端通過Bean的遠程或者本地接口訪問EJB中的方法,主要取決于客戶端和Bean運行在同一個還是不同的JVM中。這些接口定義了Bean中的方法,而由Bean類實際實現這些方法。當一個客戶端訪問該Bean類中的一個方法時,容器生成Bean的一個代理,被叫做遠程對象或者本地對象。遠程或者本地對象接收請求,委派它到相應的Bean實例,返回結果給客戶端。調用一個Bean中的方法,客戶端使用定義在EJB不是描述文件的名字查找到Bean。在以下實例中,客戶端使用上下文對象找到命名為"StateLessejb"Bean。

EJB 客戶端實例

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();  }  }

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

循化| 安塞县| 瓮安县| 通河县| 汝城县| 利川市| 南溪县| 凌云县| 揭东县| 鄂尔多斯市| 杂多县| 郴州市| 高阳县| 沂南县| 武清区| 祁阳县| 新民市| 呈贡县| 临洮县| 中阳县| 安庆市| 崇阳县| 都江堰市| 蒲城县| 宁海县| 上栗县| 华坪县| 遂昌县| 揭东县| 余干县| 北碚区| 南充市| 灌南县| 二手房| 礼泉县| 都昌县| 会宁县| 清原| 新野县| 柏乡县| 百色市|