java - Sending a BlobMessage using JmsTemplate with CachingConnectionFactory -
i using activemq message broker , have jms requirement of sending big document input stream processed consumers. issue have if use spring's org.springframework.jms.connection.cachingconnectionfactory wrap activemqconnectionfactory, i'll have cast session object (javax.jms.session) org.apache.activemq.activemqsession suggested in here (sending files using active mq blobmessage).
exception if cast generic session object activemqsession because spring provides proxy javax.jms.session , not target object proxies (ie org.apache.activemq.activemqsession). solution resorted use plain activemqconnectionfactory instead of using cachingconnectionfactory. there way me keep cachingconnectionfactory without getting classcastexception sample code below?
jmstemplate.send(new messagecreator() { public message createmessage(session session) throws jmsexception { org.apache.activemq.activemqsession activemqsession = ((org.apache.activemq.activemqsession) session); blobmessage message = activemqsession.createblobmessage(inputstream); logger.debug("created blob message"); return message; } });
and here's have in application context prevent classcastexception being thrown. see commented blocks shows old configuration have throws exception:
<bean id="jmstemplate" class="org.springframework.jms.core.jmstemplate"> <property name="connectionfactory" ref="connectionfactory"/> <property name="defaultdestination" ref="gtjobrequestqueue"/> </bean> <!-- <bean id="connectionfactory" class="org.springframework.jms.connection.cachingconnectionfactory"> --> <!-- <property name="targetconnectionfactory" ref="activemqconnectionfactory" /> --> <!-- <property name="sessioncachesize" value="3"/> --> <!-- <property name="cacheproducers" value="true"/> --> <!-- </bean> --> <!-- <bean id="activemqconnectionfactory" class="org.apache.activemq.spring.activemqconnectionfactory"> --> <bean id="connectionfactory" class="org.apache.activemq.spring.activemqconnectionfactory"> <property name="brokerurl" value="${aurin.data-provider.broker.url}"/> <property name="prefetchpolicy" ref="prefetchpolicy" /> </bean>
Comments
Post a Comment