| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > MDB - это просто |
| Автор: Domestic Cat 23.3.2005, 20:43 | ||||||||||||||
| Message Driven Beans на jBoss 1. Задача: создать Message Driven Bean (MDB) на jBoss и протестировать его. 2. Я пользовался самой последней версией jBoss и SDK 1.4. 3. Запускаем jBoss. Прежде всего нужно зайти в ${JBOSSHOME}/ Server/default/deploy/jms, и в файле jbossmq-destinations-service.xml в самом первом mbean исправить строку
на
Далее запускаем run.**. 4. Пишем MDB. Структура директории такая:
5. MDB.java
Он предельно прост. Методу onMessage передается TextMessage, из которого извлекается текст и печатается в консоль сервера. 6. ejb-jar.xml
Как видим, бин подписан на топик. 7. jboss.xml
jboss.xml - специфический для провайдера (jBoss) файл, который указывает на топик, на который подписан наш бин. Это тестовый топик, см. jbossmq-destinations-service.xml. 8. Компилим, предварительно установив CLASSPATH (на винде нужен SET): export CLASSPATH=:.:/jboss/client/jboss-j2ee.jar:/jboss/client/jbossall-client.jar Пакуем бин: jar cf MessageBean.jar * 9. Кидаем в директорию server/default/deploy 10. Здесь сервер должен сказать, что бин deployed. 11. Пишем клиента.
Здесь ничего особенного нет. Клиент - паблишер для топика, он идет по стандартной JMS схеме : найти TopicConnectionFactory -> создать соединение -> создать сессию -> создать паблишера для нужного топика -> создать мессагу -> опубликовать ее. параметры jndi - стандартные для jBoss, параметры для нахождения TopicConnectionFactory и topic сидят в файле server/default/deploy/jms/jms-ds.xml. 12. Компилим и запускаем клиента. Сервер выдаст вот что: 10:14:14,957 INFO [STDOUT] [RECEIVED MESSAGE] I'll meet you at midnight, Under the moonlight ЗЫ. Если не работает - сообщайте, мог ошибиться т.к. писал по памяти. |
| Автор: Sardar 23.3.2005, 23:03 |
| Немного не ясно как клиент общается с сервером. По особым протоколам, на особых портах, которые скоре всего закрыты файрволом или как? И воторе, можно ли отсылать бинарники, т.е. что то типа BinaryDataMessage? Звыняюсь в ман не полез... |
| Автор: Domestic Cat 23.3.2005, 23:10 | ||||||
Вот тут и протокол, и порт
JMS определяет такие мессаги: TextMessage, BytesMessage, StreamMessage, ObjectMessage, MapMessage |
| Автор: jer1 30.3.2005, 14:21 |
| а где это можно применить, несколько примеров, где это оправдано |
| Автор: Domestic Cat 30.3.2005, 18:52 |
| Там, где применяется MOM - Message Oriented Middleware, короче говоря, везде. Фактичecки, это то жe самое, что и RMI / TCP/IT/ датаграммы, только kоммуникация асинхронна, плюс необязательно чтобы работал получатель - в этом случае сервер сохраняет мессаги и передает получателю впоследствии. |
| Автор: YuG 6.3.2006, 17:49 | ||||
| Сделал всё по инструкции... Вот тут, у клиента:
вот так ругается:
Что не так? |
| Автор: Tony 7.3.2006, 19:35 | ||
А не прощели написать сервлет.Скачать jakarta HttpClient i посилать всё 4то угодно(взависимости от сервлета) |
| Автор: KostenkoSergey 4.9.2006, 18:49 | ||||
| а как на счёт передачи не TextMessage ? Как раз вот HashMap в пропертиесы запихнуть пытаюсь - так в бине property_name есть, а значение null (HashMap - serializable ж - должно, а не хочет) Исходина ниже . клиент:
бин:
|
| Автор: KostenkoSergey 4.9.2006, 19:46 | ||
| В предидущем посте я немного тупанул.... message.setObjectProperty("PARAMS", new HashMap()); - вызывает javax.jms.MessageFormatException: Invalid object type Посмотрел исходину жбосовского SpyMapMessage:
абыдно .... |
| Автор: w1nd 4.9.2006, 22:15 | ||
Может и проще. Пока не дойдёт до транзакций, кластеризации, распределения нагрузки, необходимости хранения и/или повторной обработки сообщений, удаленного мониторинга и т. д. и т. п. |
| Автор: KostenkoSergey 14.5.2007, 14:33 | ||||
... ещё 5 копеек
Имхо, такие весчи, если подразумевается множественное использование, лучше вынести из метода куда-то или в конструктор класса или по паттерну "Service Locator", и пользовать
Кстати, есть какие-то паттерны, рекомендуемые к использованию в случае MDB ? |
| Автор: chief39 14.5.2007, 14:41 | ||
РАДИ JMS? Или на основе его, типа: Service Activator etc? |
| Автор: KostenkoSergey 14.5.2007, 17:46 | ||
А хто его знает ... У мя тут, при большом кол-ве JMS-сендов:
воть и думаю... мож я што то не так делаю ... |
| Автор: chief39 14.5.2007, 18:36 | ||
Гм... может при большом количестве коннекшнов? Кста, сенды у тебя пакетно проходят? Или коммит после каждого сенда? ЗЫ: Заведи отдельную тему - подумкаем |
| Автор: KostenkoSergey 15.5.2007, 09:40 | ||
| - имхо новый топ заводить незачем - MDB ж Исходина:
JMS Provider - SonicMQ. |
| Автор: chief39 15.5.2007, 14:37 |
Ща модераторы придут и натсучат по тыковкам А зачем ты для каждого сенда открываешь коннекшн, сессию и потом их закрываешь, если можно создать их заранее и в этом методе делать только сенд? Или сделать меотд, который будет делать сотню сендов из хэшмапы, а потом коммит? |
| Автор: KostenkoSergey 15.5.2007, 14:57 | ||
| - згоден. я в принципах выше писал, что нады вынести - вынес. метод преобразился:
тут тока непонятка, где ж ему "клозе" делать... делаю в ejb.remove() - и думкаю: нормально это али нет ? ХашМар не падходит. - а это ж вроде ваще для транзакционности, мну не надо - это просто логи. |
| Автор: chief39 15.5.2007, 16:29 |
Вай нот? это из стейтлесса? |
| Автор: KostenkoSergey 15.5.2007, 17:34 |
Ес |
| Автор: chief39 15.5.2007, 18:41 | ||
Слу... погляди спеки насчёт постеров для очереди Могут ли двое одновременно писать в одно ведро? А на стейтлессах у тя запросто и не двое могут к ведру пристроиться. |
| Автор: KostenkoSergey 16.5.2007, 14:25 |
| не нашёл такого. |
| Автор: chief39 16.5.2007, 17:18 |
| У меня на две читалки, случайно наштопанные так ругалось, что естественно |