JBossESB HelloWorldインスタンス解析


本稿では、JBossESBに付属のhelloworld_について具体的に説明します.Action例では,JBossESBの動作メカニズムを特定のHelloWorldでの構成により解析する.
1、             jboss-esb.xml
このファイルは%JBOSSESBに保存されています.HOME%/sample/quickstarts/helloworld_アクション中です.jboss-esb.xmlの構成を見るときは、2つの部分に分けるべきです.providersservicesです.
1.1、Providers部分の構成コードは以下の通りである.

         
                     
             
                                        dest-type="QUEUE"
                      dest-name="queue/quickstart_helloworld_action_Request"
                 />
             

             
                                        dest-type="QUEUE"
                      dest-name="queue/quickstart_helloworld_action_esb"
                 />
             

 
         

     

まず<providers>です.一連の<provider>からなり、現在はjms-provider、fs-provider、ftp-providerなどがあります.それから、providerでこの.esbファイルの中でserviceが定義したlistenerに必要なbusを定義します.Busはメッセージングに必要な伝送層として簡単に理解できます.以下に示すように、2つのBusを定義しました.一つはGatewayのListener用、もう一つはESB-aware Message伝送に必要な伝送層である.
 
1.2、サービスの一部の構成コードは以下の通りである.
       
             name="SimpleListener"
          description="Hello World">
       
                          busidref="quickstartGwChannel"                        
             is-gateway="true"
            />
                                 busidref="quickstartEsbChannel"
            />               
           

           
                            class="org.jboss.soa.esb.actions.SystemPrintln"/>
                                       process="displayMessage">
              
              

                              class="org.jboss.soa.esb.samples.quickstart.helloworldaction.MyJMSListenerAction"
                                process="playWithMessage">
                
                       

                                       class="org.jboss.soa.esb.actions.Notifier">
                
                
                               
                                
                               
                                 
                                  
                               

                               

                                     
   
               
             
           

       

      

第2の部分はサービスを定義する部分であり、ここでは現在のesbパケットが提供するサービスs.を定義する.各サービスは<listener><actions>から構成され、actionsはn個のactionから構成される.ここのactionはメッセージ(Message)を処理する場所である.
listenerでは、busidrefによってproviderで定義されたbusに関連付けられています.ここでは、2つのlistenerを定義しています.そのうちの1つはGatewayとして、外部からJMSのメッセージを取得することだけを担当しています.その後、ESB内部に必要なMessageに移行する.もう1つのlistenerは、このMessageがサービス内部で通信するためのチャネルである.従って、サービスごとに少なくとも1つのlistenerを内部Message伝送用として定義しなければならない.
 
2、             MyJMSListenerアクションの定義:
public class MyJMSListenerAction extends AbstractActionLifecycle
{
  protected ConfigTree      _config;
  public MyJMSListenerAction(ConfigTree config) { _config = config; }
  public Message noOperation(Message message) { return message; }
  public Message displayMessage(Message message) throws Exception{         
                logHeader();
                System.out.println("Body: "+ message.getBody().get().toString());
                logFooter();
                return message;             
       }
 
   public Message playWithMessage(Message message) throws Exception {
//        Header msgHeader = message.getHeader();
          Body msgBody = message.getBody();
//        Call theCall = msgHeader.getCall();
//        EPR theEpr = theCall.getFrom();
          String contents = msgBody.get().toString();
          StringBuffer sb = new StringBuffer();
          sb.append("/nBEFORE**/n");
          sb.append(contents);
          sb.append("/nAFTER**/n");
          msgBody.add(sb.toString());
          return message;
   }
  
   public void exceptionHandler(Message message, Throwable exception) {
          logHeader();
          System.out.println("!ERROR!");
          System.out.println(exception.getMessage());
          System.out.println("For Message: ");
          System.out.println(message.getBody().get());
          logFooter();
   }
      
  //This makes it easier to read on the console
   private void logHeader() {
System.out.println("/n&&&&&&&&&&&&&&&&&&&&&&&&&&");
   }
   private void logFooter() {
System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&/n");
   }
)
上記のメソッドはjboss-esb.xmlファイルのactionに対応します.actionのnameはactionの別名を表し、classはactionメソッドが存在するクラス(パッケージおよびクラス名)を定義し、processはそのクラスの具体的なメソッドを表します.
3、             Esbファイルディレクトリ構造
サーバディレクトリの下に.esbのファイルを配置します.ディレクトリ構造は次のとおりです.
/META-INF/jboss-esb.xml
/META-INF/deployment.xml                 ,    classloader.
jbm-queue-service.xml (optional)            Queue
**.jar (optional)           
    classes  

 
4、             クライアントコールサービス
現在、JBossESBでは、一般的にサービスを呼び出すには2つの方法がある.1つはGateway listener、もう1つはServiceInvokerのAPIを直接介して呼び出す.