Опубликован: 10.10.2010 | Доступ: свободный | Студентов: 3208 / 299 | Оценка: 4.14 / 3.32 | Длительность: 13:16:00
ISBN: 978-5-9963-0444-8
Специальности: Системный архитектор
Лекция 13:

Использование JMS

Серверный листенер ObjectListener

ObjectListener (пример 13.9) обрабатывает поступающие сообщения. При приходе нового сообщения он проверяет его тип (сообщение должно быть типа ObjectMessage,приход текстового сообщения интерпретируется как команда выдать балансы всех карт), извлекает объект, переданный в теле сообщения, проверяет его тип (ожидается, что пришедшие объекты могут быть двух типов - Card и CardOperation),после чего вызывает соответствующий метод BillingService,выполняющий нужную операцию.

1  package com.asw.jms.ex1;
2  
3  import javax.jms.*;
4  
5  
6  public class ObjectListener implements MessageListener {
7      BillingService bs;
8      public ObjectListener (BillingService bs){
9        this.bs = bs;
10      }
11      public void onMessage(Message message) {
12          ObjectMessage msg = null;
13  
14          try {
15              if (message instanceof ObjectMessage) {
16                  msg = (ObjectMessage) message;
17      Object o = msg.getObject();
18                  System.out.println("Reading message: " + o);
19      if (o instanceof Card) bs.addNewCard((Card)o);
20  else if (o instanceof CardOperation) bs.performCardOperation((CardOperation)o);
21              } else {
22                  System.err.println("Message is not a ObjectMessage");
23      bs.printCards();
24              }
25          } catch (JMSException e) {
26              System.err.println("JMSException in onMessage(): " + e.toString());
27          } catch (Throwable t) {
28              System.err.println("Exception in onMessage():" + t.getMessage());
29          }
30      }
31  }
Листинг 13.9. Класс ObjectListener

Компиляция и запуск

Компиляция и выполнение не отличаются от рассмотренного ранее примера. Ниже приведен пример работы системы. Запуск клиента:

appclient -client BillingClient.jar

Результат выполнения клиентской программы приведен ниже:

Sending message: com.asw.jms.ex1.CardOperation@1e0bf98
....
Sending  message:  com.asw.jms.ex1.CardOperation@11fb8c6
Sending  message:  com.asw.jms.ex1.CardOperation@35378d
Sending  message:  com.asw.jms.ex1.CardOperation@190c5c0
Sending  message:  com.asw.jms.ex1.CardOperation@1681629
Sending  message:  com.asw.jms.ex1.CardOperation@1c39aa6
Sending  message:  com.asw.jms.ex1.CardOperation@44c4a4
Sending  message:  com.asw.jms.ex1.CardOperation@469729

Запуск сервера:

appclient -client BillingService.jar

Результат выполнения серверной программы приведен ниже:

To end program, type Q or q, then <return>
Reading message: Card: cardNumber=1 Balance=0.0 Person=Piter
CreateDate=Sun Dec 24 13:13:15 MSK 2006
Reading message: Card: cardNumber=2 Balance=0.0 Person=Stefan
CreateDate=Sun Dec 24 13:13:15 MSK 2006
Reading message: Card: cardNumber=3 Balance=0.0 Person=Nataly
CreateDate=Sun Dec 24 13:13:15 MSK 2006
Reading  message:  com.asw.jms.ex1.CardOperation@1dbe72f
Reading  message:  com.asw.jms.ex1.CardOperation@26efd3
Reading  message:  com.asw.jms.ex1.CardOperation@1c20611
Reading  message:  com.asw.jms.ex1.CardOperation@11c5c88
... 
Reading message: com.asw.jms.ex1.CardOperation@11ce4fe Reading message: 
com.asw.jms.ex1.CardOperation@1fe0d66 Card: 
cardNumber=3Balance=169830.0  Person=Nataly   CreateDate=Sun
Dec 24 13:13:15 MSK 2006
Card: cardNumber=2Balance=169497.0  Person=Stefan   CreateDate=Sun
Dec 24 13:13:15 MSK 2006
Card: cardNumber=1Balance=170173.0  Person=PiterCreateDate=Sun Dec
24 13:13:15 MSK 2006
Алмаз Мурзабеков
Алмаз Мурзабеков
Прохожу курс "Построение распределенных систем на Java" в третьей лекции где описывается TCPServer вылетает эта ошибка
"Connection cannot be resolved to a type"


Java version 1.7.0_05