Perhaps I can use Spring's JMS Config ? http://onjava.com/pub/a/onjava/2006/02/22/asynchronous-messaging-with-spring-jms.html?page=4
On Mon, Sep 13, 2010 at 7:31 PM, Jeffrey Knight <[email protected]> wrote: > Hello > > I've developed a CXF service that uses JMS transport. My configuration > [1] is all in the applicationContext.xml rather than WSDL or in the > code as part of the @WebService. > > Now, instead of targeting the JMS directly, I want to use a JNDI > resource defined in WebSphere. > I haven't been able to find any documentation on how to do this with > CXF (but I keep finding information on "<jms:conduit" and > "<jms:destination" > configurations which I believe have been superseded by the JMSConfigFeature). > > I'm expecting that I will NOT need the tcp://... broker url, since > that's already configured in the JNDI resource itself. > I should only need: > - JNDI name (as configured in WebSphere) > - targetDestination (the JNDI name of the target queue) > - replyDestination (then JNDI name of the target queue) > - username (optional) > - password (optional). > > But I'm confused about the "wrapped connection factory" and > org.apache.cxf.transport.jms.JNDIConfiguration pieces. > > Where does the JNDI configuration go, and what parameters do I need? > > <jaxws:endpoint > xmlns:batch="urn://my.namespace.here" id="MyId" > address="jms://" transportId="http://cxf.apache.org/transports/jms" > serviceName="ns1:MyService" > endpointName="ns1:MyPort" > implementor="com.some.path.MyImpl" > wsdlLocation="jar:file:WEB-INF/lib/MyWebServiceContracts.jar!/some/path/My.wsdl"> > <jaxws:features> > <bean class="org.apache.cxf.transport.jms.JMSConfigFeature"> > <property name="jmsConfig" ref="jmsConfig" /> > </bean> > </jaxws:features> > </jaxws:endpoint> > > <bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration"> > > <!-- Do I need a wrapped connection factory to access a JNDI > resource ? --> > <property name="connectionFactory" ref="wrappedConnectionFactory" /> > > <!-- These should be the JNDI names of the queues ... --> > <property name="targetDestination" value="myRequestQueue"/> > <property name="replyDestination" value="myResponseQueue"/> > > <!-- I'm guessing I'll need this ... --> > <property name="jndiConfig" ref="jndiConfig" /> > </bean> > > <!-- Maybe I don't need the wrapped connection at all for a JNDI-JMS > config ? --> > <bean id="wrappedConnectionFactory" > class="org.springframework.jms.connection.SingleConnectionFactory"> > <property name="targetConnectionFactory"> > > <!-- Shouldn't need this: the JNDI resource handles this. So maybe I > don't need this wrapped factory ? --> > <!-- bean class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" value="tcp://localhost:61616" /> > </bean --> > </property> > </bean> > > <!-- Is this where the JNDI name belongs? --> > <bean id="jndiConfig" class="org.apache.cxf.transport.jms.JNDIConfiguration"> > <property name="environment"> > <props> > <prop > key="java.naming.factory.initial">org.apache.activemq.jndi.ActiveMQInitialContextFactory</prop> > > <!-- does the name of the JNDI resource go here ?? --> > > <!-- Shouldn't need this: the JNDI resource handles this --> > <!-- prop > key="java.naming.provider.url">tcp://localhost:61616</prop --> > </props> > </property> > </bean> > > > > [2] Current applicationContext.xml, targeting the message queue directly > (works) > > <jaxws:endpoint > xmlns:batch="urn://my.namespace.here" id="MyId" > address="jms://" transportId="http://cxf.apache.org/transports/jms" > serviceName="ns1:MyService" > endpointName="ns1:MyPort" > implementor="com.some.path.MyImpl" > wsdlLocation="jar:file:WEB-INF/lib/MyWebServiceContracts.jar!/some/path/My.wsdl"> > <jaxws:features> > <bean class="org.apache.cxf.transport.jms.JMSConfigFeature"> > <property name="jmsConfig" ref="jmsConfig" /> > </bean> > </jaxws:features> > </jaxws:endpoint> > > <bean id="jmsConfig" class="org.apache.cxf.transport.jms.JMSConfiguration"> > <property name="connectionFactory" ref="wrappedConnectionFactory" /> > <property name="targetDestination" value="myRequestQueue"/> > <property name="replyDestination" value="myResponseQueue"/> > <!-- false means use queues, true means use topics --> > <property name="pubSubDomain" value="false"/> > </bean> > > <bean id="wrappedConnectionFactory" > class="org.springframework.jms.connection.SingleConnectionFactory"> > <property name="targetConnectionFactory"> > <bean class="org.apache.activemq.ActiveMQConnectionFactory"> > <property name="brokerURL" value="tcp://localhost:61616" /> > </bean> > </property> > </bean> > > -Jeff >
