powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
13 сообщений из 13, страница 1 из 1
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38266267
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет всем!

Вот - пытаюсь к существующему прожекту прикрутить JMS в реализации ActiveMQ. На жаль, глубоких знаний в организации веб-приложений нету... И, похоже, напоролся на какую-то мелочь, которую не могу побороть. При попытке подключения вываливается ошибка -
[MessagingError message='Адрес назначения "message-destination" не существует или адрес назначения не имеет определенных каналов (и в приложении не определены каналы по умолчанию.)']
Аналог на аглицком -
[MessagingError message='Destination "message-destination" either does not exist or the destination has no channels defined (and the application does not define any default channels.)']
Чего бы это оно?

Чуть больше подробностей. Разработка идет при помощи ИДЕ IntelliJ Idea 10.5, Tomcat 7, ActiveMQ 5.8.
ИМХО осложнения могли возникнуть в результате того, что у нас в системе уже используется BlazeDS для передачи жава-объектов во Flex (remoting objects). И я подумал, что нужно настроить отдельный канал для обработки сообщений.

Ковырять связку ActiveMQ и BlazeDS я начал с этого примера: статья Мартина , и продолжил тут: дока к ActiveMQ
Пример настроенных сервисных файлов, лежащих в папке /WEB-INF/flex/ я приложил в аттаче. MXML- cкрипт, использующий созданную конфигурацию - ниже
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
...

<fx:Script><![CDATA[
...
        private function onSuccessfullLogon(event:AuthenticationEvent):void {
        
            consumer.subscribe();
        }
</fx:Script>
...

    <fx:Declarations>
        <logging:GlobalExceptionHandler preventDefault="true">
            <logging:LogHandlerAction/>
            <logging:AlertHandlerAction/>
        </logging:GlobalExceptionHandler>

        <mx:Producer id="producer" destination="message-destination" acknowledge="acknowledgeHandler(event);" fault=" faultHandler(event)"/>
        <mx:Consumer id="consumer" destination="message-destination" message="messageHandler(event)" acknowledge="acknowledgeHandler(event);" fault=" faultHandler(event)"/>
    </fx:Declarations>
...
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38266315
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, забыл еще пару ньюансов. В папке ..\apache-tomcat-7.0.19\conf\ лежит context.xml, его содержание так же приаттачил к сообщению.
Active MQ запускается как отдельное приложение - через ..\bin\activemq.bat
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38266747
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что-то подсказывает мне, что не сильно тебе тут помогут - немногие юзают флекс, да еще в такой связке.
В одном проекте настраивал подобную связку, только выкинул BlazeDS и взял GraniteDS, и советую это сделать, так как и удобнее, и универсальнее, и коммюнити неплохое. А возможности получше - приближаются к LCDS.
Я настраивал ActiveMQ на получение сообщений от клиента через Gravity - comet-технология от GraniteDS. При этом сборку делал на Spring - думаю, это наиболее логично связать такой зоопарк. При этом ActiveMQ не был запущен отдельно, его поднимал спринг.
Свои конфиги могу показать, но они актуальны исключительно при моей конфигурации GraniteDS - Spring - ActiveMQ (+Gravity, +Tomcat).
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38266964
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck ,

Спасибо хоть за какой-то ответ :)
Прожект, в который я пытаюсь запилить ActiveMQ - имеет уже довольно обширную историю, там напедалено не один мегабайт сырцов, и переводить на новые рельсы - мягко говоря, проблематично. Тем более, с моим уровнем опыта по конфигурированию подобного рода прожектов.
Конфиги - раз они не БлейзДС - думаю, смысла не имеют...

Единственное что - подскажите, есть ли у Вас передача жава-объектов во Флекс? Если есть, то Вы использовали один канал для жавы и сообщений, или разные? Может там были какие-то заморочки с задаваемым набором созданных каналов?

Может все же глянете мои конфиги - вдруг увидите навскидку в чем проблема?
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38267252
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сразу посмотрел - ничего не понятно, они не спринговские, а нативные )))

"один канал для жавы и сообщений, или разные?" - это я не очень понял

Пробегусь по настройкам, может, где чего поможет ...
1. Брокер
Код: xml
1.
2.
3.
4.
5.
	<amq:broker id="broker" useJmx="false" persistent="false" brokerName="activemq" advisorySupport="false">
		<amq:transportConnectors>
			<amq:transportConnector uri="vm://activemq"/>
		</amq:transportConnectors>
	</amq:broker>

Тем самым спринг поднимает ActiveMQ. У тебя тут протокол tcp://localhost:61616.
2. Создаю слушателя - бин для topic destination
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
	<bean id="customTopic" class="myproject.messaging.CustomTopicDestination">
		<property name="createBroker" value="false"/>
		<property name="brokerUrl" value="vm://activemq"/>
		<property name="acknowledgeMode" value="AUTO_ACKNOWLEDGE"/>
		<property name="noLocal" value="true"/>
		<property name="id" value="customTopic"/>
		<property name="name" value="customTopic"/>
		<property name="sessionSelector" value="true"/>
	</bean>

который при инициализации формирует мне конфиг типа твоего messaging-config.xml. Адаптер и сервисы выглядят примерно так:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Channel channel = servicesConfig.findChannelById("gravityamf");
Service service = servicesConfig.findServiceById("gravity-service");
Adapter adapter = null;
if (channel == null || service == null) {
	channel = new Channel("gravityamf", "org.granite.gravity.channels.GravityChannel", new EndPoint("http://{server.name}:{server.port}/{context.root}/gravityamf/amf", "flex.messaging.endpoints.AMFEndpoint"), new XMap());
	servicesConfig.addChannel(channel);
	adapter = new Adapter("activemq", "myproject.messaging.CustomServiceAdapter", new XMap());
	Map<String, Adapter> adapters = new HashMap<String, Adapter>();
	adapters.put(adapter.getId(), adapter);
	service = new Service("gravity-service", "flex.messaging.services.MessagingService", "flex.messaging.messages.AsyncMessage", adapter, adapters, new HashMap<String, Destination>());
	servicesConfig.addService(service);
} else adapter = service.findAdapterById("activemq");
service.getDestinations().put(id, this.buildDestination(adapter));//непосредственное формирование XMap конфига


То есть видно, что я связал брокер "activemq" со своим кастомным адаптером CustomServiceAdapter extends ActiveMQServiceAdapter, где в @Override public Object manage() обрабатываю сообщения SUBSCRIBE_OPERATION и UNSUBSCRIBE_OPERATION. Другие идут на CustomGravityServlet implements org.apache.catalina.comet.CometProcessor, где обрабатываются стандартным образом. Конфигурируется сервлет в web.xml:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
	<servlet>
		<servlet-name>GravityServlet</servlet-name>
		<servlet-class>myproject.messaging.CustomGravityServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>GravityServlet</servlet-name>
		<url-pattern>/gravityamf/*</url-pattern>
	</servlet-mapping>


3. Producer:
Код: xml
1.
2.
3.
4.
	<bean id="jmsGlobalProducerTemplate" class="org.springframework.jms.core.JmsTemplate">
		<property name="connectionFactory" ref="cachingConnectionFactory"/>
		<property name="defaultDestination" ref="allAdmins"/>
	</bean>

и зависимые
Код: xml
1.
2.
3.
4.
5.
6.
	<amq:connectionFactory id="connectionFactory" brokerURL="vm://activemq" watchTopicAdvisories="false" closeTimeout="0"/>
	<bean id="cachingConnectionFactory" class="org.springframework.jms.connection.CachingConnectionFactory">
		<property name="targetConnectionFactory" ref="connectionFactory"/>
		<property name="sessionCacheSize" value="100"/>
	</bean>
	<amq:topic id="admins" physicalName="customTopic.global.>"/>


Входящие получаю как описал выше (кастомная подписка и отписка нужна для регистрации юзера в системе и контроля уникальности).
Отправку сообщений делаю примерно так (это приватная, для общей меняется топик):
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
dispatchPrivateMessage(CometEvent.POPUP, isAdminMessage, message, admin.getName(), toAdmin);
...
protected synchronized void dispatchPrivateMessage(final CometEvent event, final Object body, final String id, final String name, final String admin) {
	template.send(new ActiveMQTopic("customTopic.global." + admin), new MessageCreator() {
		public Message createMessage(Session session) throws JMSException {
			ActiveMQObjectMessage message = (ActiveMQObjectMessage) session.createObjectMessage(new CustomMessage(event, body, id, name));
			return message;
		}
	});
}


Не считая кастомного обработчика подписки, все выглядит несложным. Но это все в контексте спринга ...
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38268498
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое спасибо за развернутый ответ!
Думаю, он будет ОЧЕНЬ полезен тому, что будет создавать связку в указанной Вами конфигурации.
В моем случае, к сожалению, я не нашел нужной инфы :(
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38277256
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я почти отчаялся, но все еще по свободе пытаюсь ковырять это дело. Буду выкладывать постепенно найденные ошибки в конфигурации. Вдруг еще и кто ответит на стартпост :)
Итак, первая допущенная ошибка - имя компа. У меня стояло VAD_NOTE. Так вот! Никаких знаков подчеркиваний в имени компа. Т.е. сетевое имя должно быть well-formed.
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38277606
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вам же ошибка вроде как говорит в чем дело - не определен канал
добавьте канал сюда

<destination id="genericManager">
<properties>
<factory>spring</factory>
<source>genericManager</source>
</properties>
</destination>
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38288105
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breathвам же ошибка вроде как говорит в чем дело - не определен канал
добавьте канал сюда

<destination id="genericManager">
<properties>
<factory>spring</factory>
<source>genericManager</source>
</properties>
</destination>

А куда это - сюда? Что это за файл настроек? Что-то типа spring-integration.xml?
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38288545
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Что-то типа spring-integration.xml?
нет скорей всего, в ваши /WEB-INF/flex/ конфиги
как понял вам нужно именно jms(messaging-config.xml), а не Remoting Service(remoting-config.xml),

http://livedocs.adobe.com/blazeds/1/blazeds_devguide/
http://micropilot.tistory.com/entry/Server-Push-example
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38288915
Vadim Romanenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
breathнет скорей всего, в ваши /WEB-INF/flex/ конфиги
как понял вам нужно именно jms(messaging-config.xml), а не Remoting Service(remoting-config.xml),

Да дело в том, что доку я уже перешерстил прямо, вдоль и поперек.
При сравнении доки и blazeDS turnkey - выходит, что либо дока врет, либо турнкей как-то построен с применением тайных знаний. Ну нет того, что приведено в доке - в настройках прожекта в турнкее..
Мне нужно и ремотинг, и мессажинг, в том-то и дело.
В аттаче - свежее содержимое web-inf/flex
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38289282
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а если так,
remoting-config.xml
..
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
    <destination id="genericManager">
     <adapter ref="java-object"/>
     <channels>
       <channel ref="my-amf"/>
     </channels>
        <properties>
            <factory>spring</factory>
            <source>genericManager</source>
        </properties>
    </destination>

...
...
Рейтинг: 0 / 0
Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
    #38289293
breath
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дополнение,
это для вызова из flash через
var ro:RemoteObject = new RemoteObject("genericManager");
ro.showBusyCursor = true;
ro.addEventListener("result", result);
ro.addEventListener("fault", fault);
ro.callJavaMethod();
...

для jms(messaging-config.xml) реализовывать свой адаптер вроде как нужно, вот пример с ejb
http://biemond.blogspot.ru/2010/01/flex-data-push-with-blazeds-and-ejb3.html, но он тут как провайдер данных просто меняете на что угодно.
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Tomcat + Flex + BlazeDS + JMS (ActiveMQ)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]