Hi Aleksandar,

the sample code you provided seems to be a bit redundant. For example you 
define a TibjmsConnectionFactory 
and also refrerence one from jndi. You should decide to do one way here either 
jndi or direct definition.

Here at EnBW we do not use jndi and it works quite well in production. You 
showed two different ways to configure the endpoint. The first using xml is the 
old style config. I would not recommend doing it in this way. The second way is 
the brand new url based config that only works with CXF 2.3.0. Do you use this 
version?

At EnBW we use the JmsConfigFeature. (see 
http://cxf.apache.org/docs/using-the-jmsconfigfeature.html).
This style is available since 2.1.3 and quite well tested. In this case you 
simply define a jaxws:client or jaxws:endpoint in spring and inject it into 
your spring beans that need the service. 

So I suggest you use this style. If there are problems I can surely help if you 
submit your spring config and the error logs.

When communicating with Tibco BW endpoints you will stumble into a problem with 
correlation ids.  (see https://issues.apache.org/jira/browse/CXF-2760). The 
flag useMessageIDAsCorrealationID can help in this case.


Best regards

Christian




Christian Schneider
Informationsverarbeitung 
Business Solutions
Handel und Dispatching

Tel : +49-(0)721-63-15482

EnBW Systeme Infrastruktur Support GmbH
Sitz der Gesellschaft: Karlsruhe
Handelsregister: Amtsgericht Mannheim ­ HRB 108550
Vorsitzender des Aufsichtsrats: Dr. Bernhard Beck
Geschäftsführer: Jochen Adenau, Hans-Günther Meier


-----Ursprüngliche Nachricht-----
Von: Aleksandar Valchev [mailto:[email protected]] 
Gesendet: Dienstag, 26. Oktober 2010 08:56
An: [email protected]
Betreff: Publish endpoint with SOAP over JMS

Hi everyone,

I'm trying to use SOAP over JMS with TIBCO EMS server. My cxf.xml configuration 
file contains:

<jms:destination 
name="{http://avalchev.com/Portfolio/}PortfolioPortImpl.jms-destination";>
      <jms:sessionPool
          lowWaterMark="10"
          highWaterMark="5000"/>
      <jms:address
          destinationStyle="queue"
          jndiConnectionFactoryName="QueueConnectionFactory"
          jndiDestinationName="test.q"
          connectionUserName="admin"
          connectionPassword="">
          <jms:JMSNamingProperty name="java.naming.factory.initial" 
value="com.tibco.tibjms.naming.TibjmsInitialContextFactory"/>
          <jms:JMSNamingProperty name="java.naming.provider.url" 
value="tibjmsnaming://localhost:7222"/>
      </jms:address>
      <jms:jmsConfig-ref>jmsConf2</jms:jmsConfig-ref>
  </jms:destination>

  <bean id="jmsConf2" class="org.apache.cxf.transport.jms.JMSConfiguration"
      p:connectionFactory-ref="jmsConnectionFactory"
      p:timeToLive="500"
      p:sessionTransacted="false"
      p:targetDestination="test.q"
      p:pubSubDomain="false"
      p:usingEndpointInfo="false"
    p:receiveTimeout="1500"
      p:concurrentConsumers="3"
      p:maxConcurrentConsumers="5"
      p:maxSuspendedContinuations="2"
      p:acceptMessagesWhileStopping="true"
  />

    <bean id="jmsConnectionFactory" 
class="com.tibco.tibjms.TibjmsQueueConnectionFactory"
    p:serverUrl="tcp://localhost:7222" />


For publishing endpoint I'm using the following code:

      String JMS_ENDPOINT_URI = 
"jms:queue:test.cxf.jmstransport.queue?timeToLive=1000"
        + "&jndiConnectionFactoryName=QueueConnectionFactory"
        + "&jndiInitialContextFactory"
        + "=com.tibco.tibjms.naming.TibjmsInitialContextFactory" +
                  "&jndiURL=tibjmsnaming://apstib001-dev:7222";

        Object implementor = new PortfolioPortImpl();
        JaxWsServerFactoryBean svrFactory = new JaxWsServerFactoryBean();
        svrFactory.setServiceClass(PortfolioPort.class);
        
svrFactory.setTransportId(JMSSpecConstants.SOAP_JMS_SPECIFICATION_TRANSPORTID);
        svrFactory.setAddress(JMS_ENDPOINT_URI);
        svrFactory.setServiceBean(implementor);
        svrFactory.create();

I want to use CXF in production, so is JaxWsServerFactoryBean ready for 
production. I'm not going to use application server like JBoss.

Is there any other more "production ready" code for publishing JMS endpoint?




This message is strictly confidential as between the sender and the intended 
recipient. If you are not the intended recipient of the message, please notify 
the sender immediately and delete this e-mail from your system. It is not 
possible to guarantee the integrity of e-mails sent through the Internet. It is 
therefore not recommended to include unencrypted confidential data, such as 
personal details, in e-mails. The content of the message does not bind Lombard 
International Assurance S.A. ("Lombard") in any way and any information in this 
e-mail on the services offered by Lombard is intended to provide general 
guidance only. Nothing in this e-mail is intended as an offer or solicitation 
for the purchase or sale of any life assurance, pension or other financial 
product. Neither is the information intended to constitute any form of legal, 
fiscal or investment advice and it should therefore be used only in conjunction 
with appropriate professional advice obtained from a suitably qualified 
professional source. 

Reply via email to