I'm still drawing a blank on the JNDI config for JMS. Can anyone who's successfully configured CXF with JMS transport, referencing a message queue defined as a (WebSphere) JNDI resource point me in the right direction?
Thanks, Jeff On Mon, Sep 13, 2010 at 8:00 PM, Jeffrey Knight <[email protected]> wrote: > 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 >> >
