亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用消息驅動Beans(2)

2019-11-18 12:28:42
字體:
來源:轉載
供稿:網友

  例子程序介紹
  我們的Email應用程序將使用PTP域模型。當一個eamil被放入隊列中時我們只希望一個接收者能夠收到,另外email可以被多次發送。
  JMS 消息被放入隊列的條目是JMS消息。這是一個普通的消息,他擁有消息頭和消息體。JMS消息有如下幾個類型:
  類型描述
  TextMessage文本消息. 你可以通過msg.setText("foo")和msg.getText方法來操作TextMessageObjectMessage
  這種消息存儲序列化對象。你可以通過msg.setObject(Object o)和msg.getObject()來操作ObjectMessage.MapMessage
  這種消息保存鍵/值對信息。你可以通過msg.setString(key,value)和msg.getString(key)來操作MapMessage.他還有其他幾種getter和setter方法對應基本java類型(比如,getBoolean,getInt,getObject,等等)BytesMessage這種消息是一個字節流。他可被用于封裝現有的消息格式。StreamMessage這種消息答應你發送java的原語流。在我們的例子中將使用一個MapMessage,因為他提供了一種方法可以讓我們把email的標題信息和內容信息放到消息中。EJB 2.0消息驅動Bean我們已經講述了JMS的基本概念,現在我們來談一談EJB2.0規范中的新概念。
  
  回顧一下前面講的JMS部分。我們有一個發送者,他把消息放到隊列中,然后一個接收者將讀取這個消息并使用接收到的信息來發送email。這個接收者可以是一個運行的程序,他接收“Email隊列”中的消息。為了實現這個動作我們需要一個接收者,這個接收者的結構答應一個消息流的并行處理,同時它還要處理事務,這將使我們能夠處理商業邏輯。這就是消息Bean的由來。也就是說一個消息Bean是一個簡單的JMS消費者。一個客戶端不能直接訪問消息Beans(像你訪問狀態Bean那樣)你只能通過發送JMS消息到消息Bean所偵聽的目的地。為了達到重用的目的,像其他的EJB一樣,許多的支持信息都在EJB部署描述符中。這意味著我們不必關心我們從那里獲得消息(不管是一個queue或者是topic),我們只需要寫一個OnMessage(Message msg)方法來處理消息就可以了。我們已經講述了JMS和MDB的知識;現在讓我們開始我們的例子吧.Email 應用程序的開發步驟:我們將通過下面幾步來完成email應用程序:在JMS服務器上安裝一個“Email Queue”消息隊列。創建一個email客戶端,他負責向emial 隊列發送java 消息。創建一個消息驅動Bean,他將處理這些消息,然后用這些信息用Email發送。為消息驅動Bean寫部署描述符。打包代碼。
  將被創建的代碼是:
  代碼
  描述
  com.customware.client.EmailClientemail客戶端,他將把消息發送到隊列中com.customware.ejb.EmailMDB消息驅動Bean將消耗來自客戶端的JMS消息,并且使用EmailHelper來發送郵件。com.customware.util.EmailHelper一個助手類,他有一個靜態方法sendmail(Map mail,這個方法將使用JavaMail發送郵件。
  
  第一步:安裝一個郵件消息隊列
  這一步將依靠于你的消息服務器(比如IBM MQSeries,SonicMQ,等等)。我們需要安裝一個JMS 隊列。我給他取名為EmailQueue,客戶端和消息驅動Bean部署描述符要用到它。
  
  第二步:創建一個Email客戶端 (EmailClient.java)現在我們需要創建一個客戶端(JMS sender)。這個客戶端截獲搜有關email的信息,然后把它發送出去。main()方法從命令行獲得參數,創建一個Hashtable(用于存儲Map),調用sendmail(Map m)方法。sendmail方法獲得信息,根據獲得的信息中創建一個MapMessage,再通過sender.send(message)把消息發送到EmailQueue隊列中。主要的工作在構造函數之中,這些是JMS工作的全部內容。
  下面是構造函數的內容:
  1.通過getInitialContext()助手方法連接到JNDI服務。
  2.為隊列查找一個連接工廠[(QueueConnectionFactory) ctx.lookup(CONNECTION_FACTORY)]
  3.為我們的JMS服務器創建一個隊列連接[conFactory.createQueueConnection()]
  4.創建一個JMS會話(session),這個會話用于生產和消費信息。[connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE)]5.查找隊列,他將發送消息[(Queue) ctx.lookup(QUEUE_NAME)]6.最后創建一個發送者,這個發送者將使用會話(我們前面創建的)發送消息到我們查找到的隊列中。
  
  第三步:創建一個消息Bean (EmailMDB.java)在寫會話 Bean或實體Bean時,你必須創建遠程接口、主接口和Bean類(實體Bean還有一個可選的主鍵類)。而消息Bean只需要Bean類,因為有一個“客戶端”他將作為Bean的接口。一個消息驅動Bean必須擴展兩個接口:
  接口描述
  MessageListener
  javax.jms.MessageListener這是JMS接口,他提供了一個onMessage(Message msg)方法。當一個消息放入隊列中時,消息驅動Bean的onMessage方法將被調用,容器將傳輸實際的消息來被消費。MessageDrivenBean
  javax.ejb.MessageDrivenBean這是EJB接口,他包含EJB生命周期的方法:ejbCreate(): 當EJB創建時容器會調用這個方法ejbRemove(): 當容器銷毀EJB時調用setMessageDrivenContext(MessageDrivenContext ctx): 當對象被裝載后ejbCreate()調用之前上下文環境被傳輸到EJB中. 上下文包含信息,容器保存這些信息并答應你查許、處理(getUserTransaction(), setRollbackOnly(), getRollbackOnly())
  security (getCallerPRincipal(), isCallerInRole())
  
  假如你看一下EmailMDB.java代碼你會發現開頭的幾個方法實現了MessageDrivenBean接口。我們在這些方法中作的所有事情就是打印他們被調用的信息。setMessageDrivenContext()把上下文環境保存到實例變量中,以便我們今后能夠找的到他。你要作的差不多就是這些了。最后要作的就是擴展MessageListener接口的onMessage(Message msg)方法。這就是我們消費消息并處理他們的過程。開始,我們通過拋出的消息創建一個MapMessage。然后我們從map消息中查找“鍵/”值對,把他們的值裝入標準的Hashtable。注重,這些方法我們是通過MapMessage調用的:// 從Map Message獲得鍵
  Enumeration mapnames = mapmessage.getMapNames();
  // 從MapMessage中獲得值
  String val = mapmessage.getString(key);
  
  最后,調用 EmailHelper.sendmail(map)方法,把消息當作郵件發送出去。是不是很簡單。這就是是消息驅動Bean重要的部分,我們沒有寫那些晦澀的JMS代碼。實際上消息驅動Bean是如何知道從那里獲得這些消息?這些我們是通過部署描述符來實現的。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品一区二区三区在线视频| 91精品视频在线| 亚洲精品视频网上网址在线观看| 久久综合久中文字幕青草| 亚洲视频999| 国产成人精品一区二区在线| 亚洲美女av在线| 欧美一级片久久久久久久| 国产一区二区三区丝袜| 欧美成年人视频网站| 伊人久久久久久久久久久| 国产成人精品在线观看| 国产精品美女久久久久久免费| 91视频国产精品| 精品欧美激情精品一区| 亚洲精品99久久久久| 日韩欧美亚洲一二三区| 在线日韩中文字幕| 午夜精品在线观看| 国产一区二区三区日韩欧美| 亚洲欧洲在线播放| 国产精品视频自在线| 欧美又大又粗又长| 亚洲自拍欧美另类| 久久精品视频中文字幕| 国产在线观看一区二区三区| 亚洲精品丝袜日韩| 亚洲影院高清在线| 久久精品福利视频| 国产va免费精品高清在线观看| 欧洲美女7788成人免费视频| 97视频在线观看免费| 日韩有码片在线观看| 中文字幕日韩综合av| 国产精品欧美一区二区三区奶水| 亚洲第一页在线| 亚洲一区二区在线| 久久久久久久电影一区| 国产精品久久99久久| 国产午夜精品美女视频明星a级| 久久在线视频在线| 欧美性生交大片免网| 亚洲国产日韩一区| 亚洲精品国产综合久久| 亚洲欧美一区二区三区在线| 成人国产亚洲精品a区天堂华泰| 九九热精品视频在线播放| 992tv成人免费影院| 两个人的视频www国产精品| 国产成人高潮免费观看精品| 亚洲一区二区三区xxx视频| 夜夜躁日日躁狠狠久久88av| 日韩成人av在线| 国产精品久久久久秋霞鲁丝| 日韩性xxxx爱| 亚洲电影免费观看高清| 欧美激情国产精品| 一区二区三区视频在线| 国产男女猛烈无遮挡91| 91九色单男在线观看| 久久久国产精品视频| 成人黄色在线观看| 9.1国产丝袜在线观看| 91社区国产高清| 韩国精品美女www爽爽爽视频| 日本不卡高字幕在线2019| 久久视频在线免费观看| 国产精品久久久久9999| 波霸ol色综合久久| 日韩在线高清视频| 日韩欧美精品在线观看| 97人洗澡人人免费公开视频碰碰碰| 亚洲第一综合天堂另类专| 97成人精品区在线播放| 国产视频精品在线| 久久这里只有精品99| 日韩性生活视频| 亚洲精品美女在线观看| 国产视频精品自拍| 北条麻妃一区二区在线观看| 精品久久久精品| 亚洲精品v欧美精品v日韩精品| 美女av一区二区三区| 97久久超碰福利国产精品…| 国产一区二区免费| 欧美激情一区二区三级高清视频| 91久久精品视频| 精品人伦一区二区三区蜜桃网站| 国产精品中文字幕在线观看| 岛国av一区二区在线在线观看| 九九热这里只有精品6| www国产精品视频| 色婷婷综合久久久久| 欧美日韩在线另类| 91精品国产综合久久久久久蜜臀| 亚洲2020天天堂在线观看| 国产精品国产三级国产aⅴ浪潮| 欧美大片在线免费观看| 亚洲成人网av| 亚洲精品一区二区三区婷婷月| 亚洲第一区中文99精品| 91精品啪在线观看麻豆免费| 色先锋久久影院av| 久久久亚洲国产| 亚洲亚裔videos黑人hd| 中文字幕精品一区久久久久| 久久97久久97精品免视看| 欧美精品久久一区二区| 国产精品国内视频| 91在线高清视频| 日韩欧美在线中文字幕| 国产精品视频网址| 国产一区二区三区高清在线观看| 亚洲最大的免费| 久久免费国产视频| 久久精品一本久久99精品| 欧美日韩精品在线| 国产精品久久999| 久久久久久国产精品美女| 久久999免费视频| 亚洲精品动漫100p| 日本中文字幕不卡免费| 在线观看国产精品日韩av| 正在播放国产一区| 宅男66日本亚洲欧美视频| 成人欧美一区二区三区黑人孕妇| 久久精品国产一区| 欧美另类在线播放| 亚洲精品第一页| 91国产精品视频在线| 91伊人影院在线播放| 久久精品视频在线观看| 国产精品精品视频| 亚洲一区二区中文| 性视频1819p久久| 亚洲精品wwww| 日韩激情av在线免费观看| 亚洲精品欧美极品| 亚洲视频日韩精品| 91高清视频免费观看| 全色精品综合影院| 久久精品成人一区二区三区| 亚洲三级av在线| 97久久国产精品| 精品久久久久久久久国产字幕| 欧美巨乳在线观看| www.久久久久久.com| 国产精品久久久久久久美男| 亚洲自拍另类欧美丝袜| 欧美性猛交xxxx| 国产欧美一区二区三区四区| 欧美日韩美女在线| 7777精品久久久久久| 国内精品小视频| 成人精品福利视频| 日韩在线观看免费全集电视剧网站| 亚洲成在人线av| 国产精品久久久久高潮| 午夜精品久久久久久久久久久久久| 亚洲成人网久久久| 91精品视频大全| 色婷婷**av毛片一区| 97香蕉久久超级碰碰高清版| 91精品国产综合久久香蕉922|