Let's go inside

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

          TrailBlazer第8天--Message Driven POJOs

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

          一、定義服務接口,并用@Producer標注
          Calculator.java?

          package ?trail.mdpojo;
          ?
          import ?org.jboss.annotation.ejb.Producer;
          ?@Producer
          ?
          public ? interface ?Calculator?{
          ?
          ???
          public ? void ?doCalculation?( long ?sent,? int ?start,? int ?end,
          ??????????????????????????????
          double ?growthrate,
          ??????????????????????????????
          double ?saving);?
          ?}?


          二、定義服務實現,并用@Consumer標注,同MDB一樣,如果所監聽的消息隊列不存在,JBoss會自動創建一個,不需要任何XML配置文件
          MdpojoCalculator.java?

          ? package ?trail.mdpojo;
          ?
          import ?org.jboss.annotation.ejb.Consumer;
          ?
          import ?javax.ejb. * ;
          ?
          import ?java.sql.Timestamp;
          ?
          ?@Consumer(activationConfig?
          =
          ?{
          ???@ActivationConfigProperty(propertyName
          = " destinationType " ,
          ?????propertyValue
          = " javax.jms.Queue " ),
          ???@ActivationConfigProperty(propertyName
          = " destination " ,
          ?????propertyValue
          = " queue/mdpojo " )
          ?})
          ?
          public ? class ?MdpojoCalculator? implements ?Calculator?{
          ?
          ???
          public ? void ?doCalculation?( long ?sent,? int ?start,? int ?end,? double ?growthrate,?

          double ?saving)?{
          ?
          ?????
          double ?result? = ?calculate?(start,?end,?growthrate,?saving);
          ?????RecordManager.addRecord?(
          new ?Timestamp(sent),?result);
          ?
          ?????System.out.println?(
          " The?MD?POJO?is?invoked " );
          ???}
          ???
          //
          ?}??

          三、Message Driven POJOs的使用
          ???????如果要使用MDPOJO,你首先需要從JNDI中查找@Producer接口所對應的stub object,
          這個stub object實現了Producer接口的同時還實現了ProducerObject接口。你需要用ProducerObject.getProducerManager()得到一個ProducerManager然后調用manager.connect().它會創建一個JMS連接。接下來就可以使用@Producer中定義的服務了。
          calculator.jsp?

          ? <% @?page? import = " trail.mdpojo.*,?javax.naming.*,?java.text.*,
          ??????????????????org.jboss.ejb3.mdb. * " %>
          ?
          ?
          <%
          ???
          if ?( " send " .equals(request.getParameter?( " action " )))?{
          ?
          ?????
          int ?start? = ?Integer.parseInt(request.getParameter?( " start " ));
          ?????
          int ?end? = ?Integer.parseInt(request.getParameter?( " end " ));
          ?????
          double ?growthrate? = ?Double.parseDouble(request.getParameter?( " growthrate " ));
          ?????
          double ?saving? = ?Double.parseDouble(request.getParameter?( " saving " ));
          ?
          ?????
          // ?The?sent?timestamp?acts?as?the?message's?ID
          ????? long ?sent? = ?System.currentTimeMillis();
          ?
          ?????Calculator?cal?
          = ? null ;
          ?????ProducerManager?manager?
          = ? null ;
          ?????
          try ?{
          ?
          ???????InitialContext?ctx?
          = ? new ?InitialContext();
          ???????cal?
          = ?(Calculator)?ctx.lookup(
          ???????????????????Calculator.
          class .getName());
          ???????
          // ?cal?=?(Calculator)?ctx.lookup(
          ???????
          // ?????????????"EJB3Trail/MdpojoCalculator/remote");
          ??????ProducerObject?po? = ?(ProducerObject)?cal;
          ???????manager?
          = ?po.getProducerManager();
          ?
          ?????}?
          catch ?(Exception?e)?{
          ???????e.printStackTrace?();
          ?????}
          ?
          ?????manager.connect();?
          // ?internally?create?a?JMS?connection
          ????? try ?{
          ???????cal.doCalculation(sent,?start,?end,
          ?????????????????????????growthrate,?saving);
          ?????}?
          finally ?{
          ???????manager.close();?
          // ?clean?up?the?JMS?connection
          ?????}
          ?
          %> ?


          ?

          主站蜘蛛池模板: 龙井市| 连南| 望城县| 华安县| 荃湾区| 荣成市| 河源市| 河东区| 大同市| 泾川县| 通江县| 佛冈县| 庆元县| 北票市| 曲麻莱县| 台南县| 婺源县| 台北市| 台江县| 宁波市| 台中县| 海林市| 阳山县| 临猗县| 建宁县| 南宁市| 黎平县| 台南市| 三河市| 乌兰浩特市| 遵义县| 塔城市| 天津市| 杭锦旗| 四子王旗| 昆山市| 冀州市| 曲靖市| 新乡市| 肥乡县| 乐都县|