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

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

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

    Let's go inside

    this blog is deprecated as a result of laziness.
    posts - 59, comments - 2, trackbacks - 0, articles - 0

    TrailBlazer第7天--MDB

    Posted on 2006-07-27 14:24 Earth 閱讀(224) 評論(0)  編輯  收藏 所屬分類: JavaEE5/EJB3

    The JMS clients send messages to message queues managed by the server (e.g., an email inbox can be a message queue). The message queues are monitored by a special kind of EJBs --Message Driven Beans (MDBs). The MDB processes the incoming messages and perform the services requested by the message. The MDBs are the end-point for JMS service request messages.
    JMS客戶端向消息隊列(比如收件箱)發送消息。
    消息隊列(收件箱)由MDB監視,MDB處理進來的消息并提供消息所需要的服務

    In this trail, the investment calculator application is refactored to use a Message Driven Bean. When you click on the "Calculate" button on the web form, the JSP page (calculator.jsp) sends a message containing the calculation parameters to a message queue. It then forwards to another JSP page (check.jsp) to periodically check whether the calculation result becomes available.
    當你點擊頁面中的Calculate按鈕時,JSP會把含有計算所需參數的信息發送到一個消息隊列,然后頁面跳轉到check.jsp, check.jsp不斷刷新自己以定期檢查計算結果是否可用。

    The message queue is monitored by a MDB, which retrieves the incoming message, parses its contents, and performs the calculation. After the calculation is done, the MDB saves the result to an application-wide shared cache. The result is then picked up and displayed by the result-monitoring JSP page (i.e., check.jsp).
    該消息隊列由一個MDB監控,當它檢索到一條消息后,解析消息內容,然后進行計算,然后把計算 結果放在application中。最后這個結果被check.jsp捕獲并顯示。

    1。監聽器 The Message Driven Beans

    @MessageDriven(activationConfig? =
    {
    ??@ActivationConfigProperty(propertyName
    = " destinationType " ,
    ????propertyValue
    = " javax.jms.Queue " ),
    ??@ActivationConfigProperty(propertyName
    = " destination " ,
    ????propertyValue
    = " queue/mdb " )
    })
    public ? class ?CalculatorBean? implements ?MessageListener?{

    ??
    public ? void ?onMessage?(Message?msg)?{
    ????
    try ?{
    ??????TextMessage?tmsg?
    = ?(TextMessage)?msg;
    ??????Timestamp?sent?
    =
    ??????????
    new ?Timestamp(tmsg.getLongProperty( " sent " ));
    ??????StringTokenizer?st?
    =
    ??????????
    new ?StringTokenizer(tmsg.getText(),? " , " );

    ??????
    int ?start? = ?Integer.parseInt(st.nextToken());
    ??????
    int ?end? = ?Integer.parseInt(st.nextToken());
    ??????
    double ?growthrate? = ?Double.parseDouble(st.nextToken());
    ??????
    double ?saving? = ?Double.parseDouble(st.nextToken());

    ??????
    double ?result? =
    ??????????calculate?(start,?end,?growthrate,?saving);
    ??????RecordManager.addRecord?(sent,?result);

    ????}?
    catch ?(Exception?e)?{
    ??????e.printStackTrace?();
    ????}
    ??}
    }

    MDB用@MessageDriven標注
    destinationType 表示所監聽的消息的類型
    destination 表示所監聽的消息隊列的名字(比如queue/mdb)
    如果這個隊列并不存在, JBoss會在deploy的時候自動創建一個,所以不需要XML配置文件!


    2。在客戶端的使用

    ? <% @?page? import = " trail.mdb.*,?javax.naming.*,?java.text.*,
    ??????????????????javax.jms. * ,
    ??????????????????java.sql.Timestamp
    " %>
    ?
    ?
    <%
    ???
    if ?( " send " .equals(request.getParameter?( " action " )))?{
    ?
    ?????QueueConnection?cnn?
    = ? null ;
    ?????QueueSender?sender?
    = ? null ;
    ?????QueueSession?sess?
    = ? null ;
    ?????Queue?queue?
    = ? null ;
    ?
    ?????
    try ?{
    ???????InitialContext?ctx?
    = ? new ?InitialContext();
    ???????queue?
    = ?(Queue)?ctx.lookup( " queue/mdb " );
    ???????QueueConnectionFactory?factory?
    =
    ???????????(QueueConnectionFactory)?ctx.lookup(
    " ConnectionFactory " );
    ???????cnn?
    = ?factory.createQueueConnection();
    ???????sess?
    = ?cnn.createQueueSession( false ,
    ???????????????????QueueSession.AUTO_ACKNOWLEDGE);
    ?
    ?????}?
    catch ?(Exception?e)?{
    ???????e.printStackTrace?();
    ?????}
    ?
    ?????TextMessage?msg?
    = ?sess.createTextMessage(
    ?????????request.getParameter?(
    " start " )? + ? " , " ? +
    ?????????request.getParameter?(
    " end " )? + ? " , " ? +
    ?????????request.getParameter?(
    " growthrate " )? + ? " , " ? +
    ?????????request.getParameter?(
    " saving " )
    ?????);
    ?????
    // ?The?sent?timestamp?acts?as?the?message's?ID
    ????? long ?sent? = ?System.currentTimeMillis();
    ?????msg.setLongProperty(
    " sent " ,?sent);
    ?
    ?????sender?
    = ?sess.createSender(queue);
    ?????sender.send(msg);
    ?????
    // ?sess.commit?();
    ?????sess.close?();
    ?
    %>

    To use the message driven bean, the client (i.e, JSP page calculator.jsp in this case) use the standard JMS API to obtain the target message queue to the MDB using the queue name (queue/mdb), and then send the message to the queue.

    to be continued

    主站蜘蛛池模板: 国产亚洲精品成人AA片新蒲金 | 四虎成人免费网站在线| 青娱分类视频精品免费2| 成年人网站在线免费观看| 亚洲第一成人影院| 日木av无码专区亚洲av毛片| 亚洲乱码一区二区三区国产精品| 最好2018中文免费视频| 亚洲午夜免费视频| 国产成人精品免费直播| 久久水蜜桃亚洲av无码精品麻豆| 国产在线一区二区综合免费视频| 天天拍拍天天爽免费视频| 亚洲日本久久久午夜精品| 最近2019中文字幕免费看最新 | 日韩高清免费在线观看| 亚洲国产综合精品中文第一区| 亚洲色中文字幕在线播放| 免费人成黄页在线观看日本| 亚洲av日韩av高潮潮喷无码| 免费观看四虎精品成人| 亚洲成a人在线看天堂无码| 国产黄在线播放免费观看| 免费无码一区二区三区蜜桃大| 久久亚洲精品成人AV| 成人浮力影院免费看| 亚洲av无码片在线播放| 一级成人a做片免费| 国产精品自在自线免费观看| 妇女自拍偷自拍亚洲精品| 台湾一级毛片永久免费| 亚洲码欧美码一区二区三区| 国产v精品成人免费视频400条| 亚洲人成网站在线播放影院在线| 1000部啪啪未满十八勿入免费| 亚洲亚洲人成综合网络| aa级女人大片喷水视频免费| 亚洲精品无码久久久久AV麻豆| 国产精品亚洲精品日韩电影| 免费的一级黄色片| 国产精品偷伦视频免费观看了|