Объектно-ориентированные технологии Отчет по курсовой работе «Создание эмулятора банковских транзакций на базе технологии jms»

Вид материалаОтчет

Содержание


Теоретические сведения
JMS (Java Messaging System)
Приложение JMS
Средства администрирования
Модель взаимодействия точка-точка
Модель взаимодействия издание-подписка
ВыводыВ результате работы были изучены библиотека SWING и технология JMS. UML диаграммы
Подобный материал:

Министерство образования

Российской Федерации





Санкт-Петербургский государственный

электротехнический университет




Кафедра МО ЭВМ




Объектно-ориентированные технологии

Отчет по курсовой работе

«Создание эмулятора банковских транзакций на базе технологии JMS»



Выполнил: Листов О.В.


Группа: 4395

Факультет КТИ

Преподаватель: Голубев А.Б.


Санкт-Петербург


Задача


Создание системы, эмулирующей банковские транзакции. Рассматриваются транзакции между банком и банкоматами.

Требования:
  1. Через банкомат можно пересылать суммы со счета в одном банке на счет в другом.
  2. У банка могут быть филиалы, счет в филиалах должен синхронизироваться со счетом в главном банке.
  3. Счет в банке может быть заморожен, это значит, что снимать деньги с него нельзя. Если в банк с замороженным счетом отправлены деньги, то зачислены они будут только после разморозки счета.
  4. Если счет в главном банке или филиале замораживается, то во всех других филиалах он так же замораживается.
  5. Реализация протокола пересылки должна быть выполнена при помощи системы Java Message Service.


Теоретические сведения

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

JMS является технологией создания распределенных приложений,

основанных на модели обмена сообщениями.


JMS (Java Messaging System) представляет собой интерфейс к внешним системам,

ориентированный на работу через сообщения. JMS является «старой» технологией – первая

спецификация была опубликована в 1998г. В настоящее время пакет javax.jms входит в

комплект jdk, а Sun Application Server реализует поддержку JMS в качестве одного из

сервисов.

При разработке JMS в качестве основной задачи рассматривалось создание

обобщенного Java API для приложений, ориентированных на работу с сообщениями

(message-oriented application programming) и обеспечение независимости от конкретных

реализаций соответствующих служб обработки сообщений.

Таким образом, программа, написанная с использованием JMS, будет корректно

работать с любой системой сообщений, поддерживающей эту спецификацию (или

имеющую соответствующие интерфейсы).

Поскольку JMS является лишь оболочкой или интерфейсом, описывающим доступные

для приложения методы, для работы приложения понадобится определенная реализация

этих интерфейсов JMS, называемая провайдером JMS. Такие реализации создаются

независимыми производителями, и в настоящее время таких реализаций существует

достаточно много (в том числе, например, реализация, включенная в Sun Application Server

и распространяемая вместе с J2EE, а также MQSeries от IBM, служба JMS WebLogic от

BEA, SonicMQ от Progress и другие).

Модель обмена сообщениями (и JMS) удобно использовать в том случае, если

распределенное приложение обладает следующими характеристиками:

- взаимодействие между компонентами является асинхронным;

- информация (сообщение) должна передаваться нескольким или даже всем

компонентам системы (семантика передачи от одного ко многим);

- передаваемая информация используется многими внешними системами, часть из

которых не известна на момент проектирования системы или интерфейсы которых

подвержены частым изменениям (концепция ESB – Enterprise Service Bus);

- обменивающиеся информацией (сообщениями) компоненты выполняются в разное

время, что требует наличия посредника для промежуточного хранения переданной

информации.


Архитектура JMS

Архитектура JMS выглядит следующим образом:


- Прикладные программы Java, использующиеJMS, называются клиентами JMS

(JMS client);

- Система обработки сообщений, управляющая маршрутизацией и доставкой

сообщений, называется JMS-провайдером (JMS provider);

- Приложение JMS (JMS application) – это прикладная система, состоящая из

нескольких JMS клиентов, и как правило одного JMS-провайдера. JMS-клиент,

посылающий сообщение, называется поставщиком (producer). JMS-клиент,

принимающий сообщение, называется потребителем (consumer). Один и тот же


JMS клиент может быть одновременно и поставщиком и потребителем в разных

актах взаимодействия;

- Сообщения (Messages) – это объекты, передающиеся и принимающиеся

компонентами (клиентами JMS);

- Средства администрирования (Administrative tools) – средства управления

ресурсами, использующимися клиентами.



JMS предоставляет два подхода к передаче сообщений. Первый называется «издание-

подписка» (publish an subscribe) и используется в том случае, если сообщение,

отправленное одним клиентом должно быть получено несколькими.

Второй подход называется «точка-точка» (point to point) и служит для

реализации обмена сообщениями между двумя компонентами.

Спецификация JMS называет эти два подхода зонами сообщений (messaging domains).


Модель взаимодействия точка-точка

Модель передачи сообщений «точка-точка» предоставляет возможность клиентам JMS

посылать и принимать сообщения (как синхронно, так и асинхронно) через виртуальные

каналы, называемые очередями (queues). Модель передачи сообщений «точка-точка»

основывается на методе опроса, при котором сообщения явно запрашиваются

(считываются) клиентом из очереди. Несмотря на то, что чтение из очереди могут

осуществлять несколько клиентов, каждое сообщение будет прочитано только единожды -

провайдер JMS это гарантирует.


Модель взаимодействия издание-подписка

При использовании модели взаимодействия «издание-подписка» один клиент

(поставщик) может посылать сообщения многим клиентам (потребителям) через

виртуальный канал, называемый темой (topic). Потребители могут выбрать подписку

(subscribe) на любую тему. Все сообщения, направляемые в тему, передаются всем

потребителям данной темы. Каждый потребитель принимает копию каждого сообщения.

Модель передачи сообщений издание-подписка, по существу, представляет собой модель,

сервера, инициирующего соединение и «проталкивающего» информацию на клиента. В JMS

эта концепция реализуется с помощью специальных «слушателей» (листенеров),

регистрируемых в системе. При возникновении нового события листенер, закрепленный за

данной темой, возбуждается.

Следует отметить, что при использовании модели «издание-подписка» клиенты JMS

могут устанавливать долговременные подписки, позволяющие потребителям отсоединиться

и позже снова подключиться и получать сообщения, поступившие во время отключения

связи.

Решение

  1. Выбрана реализация JMS от сервера JBoss.
  2. Для пересылки выбрана схема издание-подписка.
  3. Реализованы два приложения банкомат и банк.



Пример кода приложения Банк


/*

* @(#)MessageController.java 1.0 08.10.20

*/

package com.epam.bank.controller;


…….


/**

* Class MessageController

* provide store message protocol constants

* provide message listning

*

* @author Oleg_Listov

*/

public class MessageController implements MessageListener {

…….


/**

* used listen incoming messages

*

* @param message

*/

public void onMessage(Message message) {

try {

int operation = message.getIntProperty(OPERATION);


if (operation == NOTIFY_ABOUT_CREATE_ACCOUNT) {

String bankName = message.getStringProperty(BANK_NAME);

if (bankModel.getBankName().equals(bankName) && (!bankModel.isNotify())) {

bankModel.createAccount();

Object[] args = {bankModel.getBankName(), bankModel.getAccount()};

bankModel.addLog(MessageFormat.format(CREATE_ACCOUNT_BY_COMMAND,

args));

bankModel.setActive(true);

}

if (bankModel.getBankName().equals(bankName) && (bankModel.isNotify())) {

bankModel.setNotify(false);

}

}

if (operation == NOTIFY_ABOUT_CLOSE_MAIN_BANK) {

String bankName = message.getStringProperty(BANK_NAME);

if (bankModel.getBankName().equals(bankName)) {

bankModel.setMainBankClosed(true);

}

}

…….


Пример кода приложения Банкомат


/*

* @(#)RemittanceCommand.java 1.0 08.10.20

*/

package com.epam.cashpoint.commands;


import javax.jms.JMSException;

import javax.jms.Message;

import javax.naming.NamingException;

import com.epam.cashpoint.controller.MessageProtocol;


/**

* Class RemittanceCommand

* extends Command

* provide remit amount functionality

* from one bank to another

*

* @author Oleg_Listov

*/

public class RemittanceCommand extends Command {

private static final int TIMEOUT = 1000;


public RemittanceCommand(String topicName) throws NamingException, JMSException {

super(topicName);

}

/**

* @param fromBankName initial bank name

* @param toBankName destination bank name

* @param amount funds value

*

* @return result of operation

*

*/

public int execute(String fromBankName, String toBankName,

double amount) throws JMSException, InterruptedException {

Message message = session.createMessage();

message.setIntProperty(MessageProtocol.OPERATION,

MessageProtocol.REMITTANCE);

message.setStringProperty(

MessageProtocol.FROM_BANK_NAME, fromBankName);

message.setStringProperty(

MessageProtocol.TO_BANK_NAME, toBankName);

message.setDoubleProperty(MessageProtocol.AMOUNT, amount);

publisher.publish(message);

publisher.close();

Thread.sleep(TIMEOUT);

// wait for answer

Message answerMessage = subscriber.receive(100);

while(answerMessage != null) {

int operation = answerMessage.getIntProperty(MessageProtocol.OPERATION);

String bankNameFromMessage

= answerMessage.getStringProperty(MessageProtocol.BANK_NAME);

// check that answer is back

if ((operation == MessageProtocol.ANCKNOWLEDG_REMITTENCE) &&

(bankNameFromMessage.equals(fromBankName))) {

conn.close();

return answerMessage.getIntProperty(MessageProtocol.RESULT);

}

answerMessage = subscriber.receiveNoWait();

}

conn.close();

return MessageProtocol.FROM_BANK_NOT_EXIST;

}


}


Выводы


В результате работы были изучены библиотека SWING и технология JMS.

UML диаграммы


Приложение банк


Диаграмма классов команд





Диаграмма классов представление-контроллер




Приложение банкомат


Диаграмма классов команд





Диаграмма классов представление-контроллер