<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    斷點

    每天進步一點點!
    posts - 174, comments - 56, trackbacks - 0, articles - 21

    EJB3.0中的MessageDrivenBean

    Posted on 2010-01-13 22:47 斷點 閱讀(368) 評論(0)  編輯  收藏 所屬分類: EJB3.0

    EJB3.0中MessageDrivenBean:

    1.java消息驅動bean屬于Java消息服務(Java Message Service,簡稱JMS)。

    2.JMS是用于訪問企業消息系統的開發商中心的API。企業消息系統可以協助應用軟件通過網絡進行消息交互。

    3.JMS的編程過程簡單概括為:應用程序A-->(消息)-->Jboss JMS-->(消息)-->應用程序B。應用程序A和應用程序B沒有直接的代碼關聯,兩者實現了解耦。消息傳遞系統的中心就是消息。

    消息驅動Bean(MDB)是設計用來專門處理基于消息請求的組件,它和無狀態Session Bean一樣也使用了實例池技術,容器可以使用一定數量的bean實例并發處理成百上千個JMS消息。正因為MDB具有處理大量并發消息的能力,所以非常適合應用在一些消息網關產品。如果一個業務執行的時間很長,而執行結果無需實時向用戶反饋時,也很適合使用MDB。如訂單成功后給用戶發送一封電子郵件或發送一條短信等。

    消息有下面幾種類型,他們都是派生自Message接口。
    StreamMessage:一種主體中包含Java基本值流的消息。其填充和讀取均按順序進行。
    MapMessage:一種主體中包含一組名-值對的消息。(沒有定義條目順序)
    TextMessage:一種主體中包含Java字符串的消息(例如:XML消息)
    ObjectMessage:一種主體中包含序列化Java對象的消息。
    BytesMessage:一種主體中包含連續字節流的消息。

    消息的傳遞模型:
    JMS支持兩種消息傳遞模型:點對點(point-to-point,簡稱PTP)和發布/訂閱(publish/subscribe,
    簡稱pub/sub)。
    二者有以下區別:
    1.PTP 消息傳遞模型規定了一條消息只能傳遞給一個接收方。采用javax.jms.Queue表示。
    2.Pub/sub 消息傳遞模型允許一條消息傳遞給多個接收方。采用javax.jms.Topic表示。

    注意:每種模型都通過擴展公用基類來實現。例如,javax.jms.Queue 和javax.jms.Topic都擴展自
    javax.jms.Destination 類。

     

    開發步驟如下:
    一、配置destinations-service.xml文件。
    JBOSS使用一個XML文件配置隊列地址,文件的取名格式應遵循*-service.xml,我取名為
    destinations-service.xml。
    jboss默認的全局JNDI名稱組成為:"queue"+"/"+"目標地址"。
    開始JMS編程前,我們需要先配置消息到達的目標地址(Destination),因為只有目標地址存在了,
    我們才能發送消息到這個地址。由于每個應用服務器關于目標地址的配置方式都有所不同,下面以jboss為例,配置一個queue類型的目標地址。
    <?xml version="1.0" encoding="UTF-8"?>
    <server>
       <mbean code="org.jboss.mq.server.jmx.Queue" 

    name="jboss.mq.destination:service=Queue,name=ztfQueue">
          <attribute name="JNDIName">queue/ztfQueue</attribute>
          <depends optional-attribute-

    name="DestinationManager">jboss.mq:service=DestinationManager</depends>
        </mbean>
       <mbean code="org.jboss.mq.server.jmx.Topic" 

    name="jboss.mq.destination:service=Topic,name=ztfTopic">
          <attribute name="JNDIName">topic/ztfTopic</attribute>
          <depends optional-attribute-

    name="DestinationManager">jboss.mq:service=DestinationManager</depends>
        </mbean>
    </server>
    注意:任何隊列或主題被部署之前,應用服務器必須先部署Destination Manager Mbean,所有我們
    通過<depends>節點聲明這一依賴。

    二、在java類中發送消息(用到jndi.properties)。
    一般發送消息有以下步驟:
    1.得到一個JNDI初始化上下文(Context)
    InitialContext ctx = new InitialContext();

    2.根據上下文查找一個連接工廠ConnectionFactory,改連接工廠是由JMS提供的,不需我們自己創建,每個廠商都為它綁定了一個全局JNDI,我們通過它的全局JNDI便獲取它;
    QueueConnectionFactory factory = (QueueConnectionFactory)ctx.lookup("ConnectionFactory");

    3.從連接工廠得到一個連接QueueConnection。
    QueueConnection conn = factory.createQueueConnection();

    4.通過連接來建立一個會話(Session);
    QueueSession session = conn.createQueueSession(false,QueueSession.AUTO_ACKNOWLEDGE);
    這句代碼意思是:建立不需要事務的并且能自動確立消息已接收的會話。

    5.查找目標地址:
    Destination destination=(Destination)ctx.lookup("queue/ztfQueue");

    6.根據會話以及目標地址來建立消息生產者MessageProducer(QueueSender和TopicPublisher都擴展自MessageProducer接口):
    MessageProducer producer = session.createProducer(destination);
    TextMessage msg = session.createTextMessage("您好:荊州,這是我的第一個消息驅動Bean");
    producer.send(msg);

    三、采用MessageDrivenBean接收消息。
    當容器檢測到bean守候的目標地址有消息到達時,容器調用onMessage()方法,將消息作為參數傳入
    MDB。MDB在onMessage()中決定如何處理改消息。你可以使用注解指定MDB監聽哪一個目標地址(Destination)。當MDB部署時,容器將讀取其中的配置信息。

    一個MDB通常要實現MessageListener接口,在接口定義了onMessage()方法。Bean通過它來處理收到的JMS消息。
    @MessageDriven(activationConfig=
    {
     @ActivationConfigProperty

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

    (propertyName="destination",propertyValue="queue/ztfQueue"),
     @ActivationConfigProperty(propertyName="acknowledgeMode",propertyValue="Auto-

    acknowledge")
    })
    public class MessageDrivenBean implements MessageListener{
     public void onMessage(Message message) {
      TextMessage msg = (TextMessage)message;
      try {
       System.out.println(msg.getText());
      } catch (JMSException e) {
       e.printStackTrace();
      }
     }
    }

    四、把工程src下的文件打成jar包(用到build.xml),在C:\jboss-5.0.0.GA\server\default\deploy進行部署。

    五、運行發送消息的java類,此時在console中就可看見結果了。

    六、至此,一個MessageDrivenBean開發就成功了。


    posted @ 2009-03-27 17:43 斷點 閱讀(158) | 評論 (0) 
    主站蜘蛛池模板: 久久久久亚洲av无码专区蜜芽| 亚洲午夜AV无码专区在线播放 | 日韩免费高清视频| 亚洲午夜电影一区二区三区| 免费无码一区二区三区| 九九视频高清视频免费观看| 国产一级理论免费版| 色噜噜噜噜亚洲第一| 又爽又黄无遮挡高清免费视频| 香蕉视频亚洲一级| 色吊丝永久在线观看最新免费| 国产亚洲玖玖玖在线观看| 可以免费看的卡一卡二| 激情五月亚洲色图| 日本高清免费不卡视频| 另类小说亚洲色图| 99久久综合国产精品免费| 亚洲人色大成年网站在线观看| 免费国产作爱视频网站| 亚洲欧美中文日韩视频| 国产一区二区三区在线免费| 日韩精品免费一线在线观看| 亚洲人成中文字幕在线观看| 人妻无码久久一区二区三区免费| 亚洲精品日韩中文字幕久久久| 国产又黄又爽又猛免费app| 麻豆亚洲AV成人无码久久精品| 亚洲一区日韩高清中文字幕亚洲| 免费看成人AA片无码视频吃奶| 久久久无码精品亚洲日韩蜜臀浪潮| 最近免费视频中文字幕大全| 一区二区亚洲精品精华液| 免费少妇a级毛片人成网| a级毛片毛片免费观看久潮| 亚洲视频一区网站| 国产小视频在线免费| 久久青草91免费观看| 亚洲人成网站免费播放| 自拍偷自拍亚洲精品情侣| 天天影院成人免费观看| 美女视频黄a视频全免费网站色|