jms - how to make jsp receive activemq offline message -
i have web app, want is: if user executes struts action successfully, user b can receive message when he/she opens jsp page.
my web.xml is:
<context-param> <param-name>org.apache.activemq.brokerurl</param-name> <param-value>tcp://localhost:61616</param-value> </context-param> <context-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:applicationcontext.xml</param-value> </context-param> <listener> <listener-class>org.springframework.web.context.contextloaderlistener</listener-class> </listener> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.strutsprepareandexecutefilter</filter-class> <async-supported>true</async-supported> </filter> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <servlet> <servlet-name>ajaxservlet</servlet-name> <servlet-class>org.apache.activemq.web.ajaxservlet</servlet-class> <async-supported>true</async-supported> </servlet> <servlet-mapping> <servlet-name>ajaxservlet</servlet-name> <url-pattern>/amq/*</url-pattern> </servlet-mapping>
jsp :
<head> <script type="text/javascript" src="<%=path%>/js/jquery.min.1.8.3.js"></script> <script type="text/javascript" src="js/amq_jquery_adapter.js"></script> <script type="text/javascript" src="js/amq.js"></script> <script type="text/javascript"> var amq = org.activemq.amq; amq.init({ uri: 'amq', logging: true, timeout: 20 }); var myhandler = { rcvmessage: function(message) { alert("received "+message); } }; amq.addlistener("myid", "topic://msgtopic",myhandler.rcvmessage); </script> </head>
context.xml of tomcat :
<resource name="jms/activemqconnfact" authc="container" type="org.apache.activemq.pool.pooledconnectionfactory" description="jms connection factory" factory="org.apache.activemq.jndi.jndireferencefactory" brokerurl="tcp://localhost:61616" brokername="localhost" maxconnections="10" /> <resource name="jms/msgtopic" authc="container" type="org.apache.activemq.command.activemqtopic" description="my sending topic" factory="org.apache.activemq.jndi.jndireferencefactory" physicalname="msgtopic" />
spring config xml :
<bean id="jmstemplate" class="org.springframework.jms.core.jmstemplate"> <constructor-arg ref="activemqconnectionfactory" /> <property name="sessiontransacted" value="false" /> <property name="defaultdestination" ref="jmstemplatedest" /> <property name="deliverypersistent" value="false" /> </bean> <bean id="msgaction" class="example.amq.web.msgaction" /> <bean id="mydestinationresolver" class="org.springframework.jms.support.destination.beanfactorydestinationresolver" /> <jee:jndi-lookup id="activemqconnectionfactory" jndi-name="jms/activemqconnfact" expected-type="javax.jms.connectionfactory" /> <jee:jndi-lookup id="jmstemplatedest" jndi-name="jms/msgtopic" expected-type="javax.jms.topic" /> </beans>
struts.xml:
<struts> <constant name="struts.action.excludepattern" value="/amq/*"/> <constant name="struts.devmode" value="false" /> <package name="default" extends="struts-default"> <action name="sendmsg" method="sendmsg" class="msgaction"> </action> </package> </struts>
struts action :
public class msgaction { @autowired private jmstemplate jmstemplate; public void sendmsg() { this.jmstemplate.send(new messagecreator(){ @override public message createmessage(session session) throws jmsexception { textmessage txtmsg = session.createtextmessage(); txtmsg.settext("hello activemq!"); return txtmsg; } }); } }
the activemq web console looks like:
topic name "msgtopic".
if open jsp, trigger send message action, there alert message on jsp page, if close jsp, trigger send message action, , open jsp latter, there no alert message.
so how make jsp can receive message sent when jsp closed?
Comments
Post a Comment