受信側実装例の概要

次のコードおよび疑似コードは、JMS 受信側の実装例の概要を示します。

public class CustomJMSReceiver implements ReceiverInterface {
          private Context m_context = null;
          private ReceiverConfig m_rcvConfig = null;
          public void init(Context context, ReceiverConfig receiverConfig) {
            this.m_context = context;
            this.m_rcvConfig = receiverConfig;
 return;
 }
 public void refreshConfig(ReceiverConfig rcvconfig)
                  throws BCGReceiverException {
           this.m_rcvConfig = rcvconfig;
  
 // Check which receiver targets are updated, added newly or deleted
 // If new target is added, create a new thread and start polling the target
 // If current target is updated, stop the thread which is polling the
 // target, and using the updated configuration information, start polling
 // If current target is deleted, stop the thread which is polling the
 // target and delete the thread which is responsible for polling the
 //target.
 ...
 return;
 }
  
  public void startReceiving() throws BCGReceiverException {
 // Read the list of targets in the ReceiverConfig object
 // For each target create a UserJMSThread and start the thread
 return;
 }
 public void processResponse(ResponseCorrelation respCorr,
                              ReceiverDocumentInterface response)
                     throws BCGReceiverException {
 // get the correlation information like reply-to-queue, correlation id
 // and send the response to that queue
 return;
 }
 public void stopReceiving() throws BCGReceiverException {
 // get the list of UserJMSReceiverThreads associated with each target
 // call stop method.
 ... 
 return;
 }
 private class UserJMSReceiverThread extends Thread {
  public UserJMSReceiverThread(Config targetConfig) {
 // create the queue session, connection, queue receiver
 ...
 }
 public void run() {
  while (true) {
        try{
           // call receive method on the queue
           // if message is available read the message and process the
           // document
  
              processDocument(data);
  
           // else continue to poll the queue.
  
         ...
  
        } catch(Exception e) {
  
           ...
       }
   }
 }
 //Upon receiving the document from the queue, start processing the
 //documenting using Receiver FrameWork APIs
  
 public void processDocument(byte[] data) throws BCGReceiverException{
              //Get the temporary location where data can be written
          File tempDir = BCGReceiverUtil.getTempDir();
             // Now create the temp file and write the data into it
          File fileLocation = new File(tempDir, fileStr);
          FileOutputStream fos = new FileOutStream(fileLocation);
          fow.write(data);
          fos.close();
 
// Create the ReceiverDocument object
         ReceiverDocumentInterface request =
                              BCGReceiverUtil.createReceiverDocument();
        // set document, transport headers and BCG headers in the
        // request
         request.setDocument(fileLocation);
      ...
       //Now start processing the document using ReceiverFrameWork APIs
           ReceiverFrameWorkInterface rcvFramework =
                                 BCGReceiverUtil.getReceiverFramework();
  
           ReceiverDocumentInterface requestDocs[] =
                 rcvFramework.preprocess(transportType,target,request);
       //Check if the requestDocs length is 1, if yes document is not
       //split into multiple documents
          boolean sync =
                       rcvFramework.syncCheck(transportType,target,request);
      ...
         if(!sync) {
             //request is not synchronous message
               rcvFramework.process(transportType,target,request);
       }
  }
 

 
 

Copyright IBM Corp. 1997, 2004