2012-02-17 5 views
2

私は自分のサーバーでSpring MVC Webアプリケーションを実行しています。最近、ログインしたユーザーに役割が変更されたことを通知する機能を追加して、ログアウトして再度ログインできるようにしたいと考えました。JMX/JMSを使用してWebアプリケーションのすべてのセッションにメッセージをブロードキャストしますか?

私はJMXを使用することを考えました。小さなテストを行いましたが、メッセージをブロードキャストしない以外は問題なく動作しました。例えば、私が2人のログインした人を持っている場合、1人しかメッセージを受信して​​いません。

私の質問は、Webアプリケーションのすべてのインスタンス(アクティブセッション)にJMXを使用してメッセージをブロードキャストできるかどうかです。

<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aop="http://www.springframework.org/schema/aop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.0.xsd"> 

<bean id="connectionFactory" 
     class="org.apache.activemq.ActiveMQConnectionFactory"> 
    <property name="brokerURL" value="tcp://localhost:61616"/> 
</bean> 
<bean id="msgDestination" 
     class="org.apache.activemq.command.ActiveMQTopic"> 
    <constructor-arg value="userToLogout.topic"/> 
</bean> 
<bean id="jmsTemplate" 
     class="org.springframework.jms.core.JmsTemplate"> 
    <property name="connectionFactory" ref="connectionFactory"/> 
    <property name="pubSubDomain" value="true"/> 
    <property name="receiveTimeout" value="10000"/> 
</bean> 
<bean id="userNotifier" 
     class="com.cap.messaging.UserNotifier"> 
    <property name="destination" ref="msgDestination"/> 
    <property name="jmsTemplate" ref="jmsTemplate"/> 
</bean> 
<bean id="userNotificationListener" 
     class="com.cap.messaging.UserNotificationListener"> 
</bean> 
<bean 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
    <property name="connectionFactory" ref="connectionFactory" /> 
    <property name="destinationName" value="userToLogout.topic" /> 
    <property name="messageListener" ref="userNotificationListener" /> 
</bean> 

今取り組んこのありえない: -

編集JMS

を使用してだから私は今、JMSをしようとしています、ここに私の設定ファイルです。しかし、私はActiveMQTueをActiveMQQueueに変更すると動作します。私はここで何が欠けているのですか?

+0

誰かがこのソリューションに興味を持っている場合は、ApplicationスコープのBeanを追加して、パブリッシュ/サブスクライブ通信をシミュレートしました。ちょっとトリックをしました。 – Elio

答えて

1

私は短い答えはノーだと思います。 JMXは、TCP/IPソケット上でRMIを使用する単一の接続APIです。あなたができることは、すべてのインスタンスにシリアルにユニキャストするか、スレッドを使用して、多数のJMXクライアント接続上ですべてのWebアプリケーションセッションにパラレルに送信することです。

+0

それではJMSで可能でしょうか? JMSを使ってトピックを作成できます。私はatmを試していますが、トピックを作成することは今のところうまくいきません。 – Elio

+0

もちろん、JMSを使用して、すべてのサーバーを購読できます。使用できる多くの異なるリモートパッケージがあります。しかし、詳細については別の質問をする必要があります。 – Gray

+0

クイックアンサーのおかげで、私は自分の質問を編集しました。基本的に私が興味を持っているのは通知の側面です。私はすでにログアウトする必要のあるユーザーリストを保持するアプリケーションワイドBeanなどの合理的な代替案を考えましたが、最後の手段として残しています。 – Elio

関連する問題