// importy. . . 

public class OrderServiceActivator implements javax.jms.MessageListener{

  // sesja i odbiorca kolejki: patrz interfejs JMS
  private QueueSession orderQueueSession;
  private QueueReceiver orderQueueReceiver;

  // Uwaga: wartoci powinny pochodzi plikw waciwoci lub
  // rodowiska. Stae wartoci zastosowane w celu uproszczenia.
    private String connectionFactoryName =
      "PendingOrdersQueueFactory";
  private String queueName = "PendingOrders";

  // uywamy lokalizatora usug do znalezienia komponentw
  // administrowanych przez JMS, czyli Queue fabryki Queue Connection
  private ServiceLocator serviceLocator;
  private QueueConnectionFactory queueConnectionFactory;
  private QueueConnection queueConnection;

  public OrderServiceActivator(
      String connectionFactoryName, String queueName) {
    super();
    this.connectionFactoryName = connectionFactoryName;
    this.queueName = queueName;
    startListener();
  }

  private void startListener() {
    try {
      serviceLocator = ServiceLocator.getInstance();
      queueConnectionFactory =
      serviceLocator.getQueueConnectionFactory(
          connectionFactoryName);
      queueConnection =
          queueConnectionFactory.createQueueConnection();

      // Uycie metod i parametry opisane w JMS API
      orderQueueSession =
          queueConnection.createQueueSession (...);
      Queue ordersQueue =
          serviceLocator.getQueue(queueName);
      orderQueueReceiver =
          orderQueueSession.createReceiver(ordersQueue);
      orderQueueReceiver.setMessageListener(this);
    }
    catch (JMSException excp) {
      // obsuga bdu
    }
  }

  // Interfejs JMS okrela metod onMessage w interfejsie
  // javax.jms.MessageListener. 
  // Metoda jest wywoywana asynchronicznie, 
  // gdy komunikat dochodzi do kolejki, ktr podsuchuje
  // ServiceActivator. Szczegy w specyfikacji i interfejsie JMS.
  public void onMessage(Message message) {
    try {
      // przetworzenie komunikatu Message. Patrz interfejs JMS 
      // dla Message. Pobranie obiektu zamwienia z komunikatu.
      ObjectMessage objectMessage =
          (javax.jms.ObjectMessage) message;
      Order order = (Order) objectMessage.getObject();

      // Uycie przedstawiciela biznesowego dla procesora zamwie
      // Session Facade w celu przeprowadzenia przetwarzania
      OrderProcessorDelegate orderProcessorBD =
          new OrderProcessorDelegate();
      orderProcessorBD.processOrder(order);

      // wysyanie odpowiedzi...
    }
    catch (JMSException jmsexcp) {
      // obsuga JMSExceptions, jeli wystpi taki wyjtek
      // Wysanie odpowiedzi bdu, zgoszenie wyjtku typu runtime
    } 
    catch (Exception excp) {
      // obsuga pozostaych wyjtkw
      // Wysanie odpowiedzi bdu, zgoszenie wyjtku typu runtime
    }
  }
    public void close() {
    try {
      // czyszczenie przed zamkniciem
      orderQueueReceiver.setMessageListener (null);   
      orderQueueSession.close();     
    }
    catch(Exception excp) {
      // obsuga wyjtku bdu przy zamykaniu
    }
  }
}