Frédéric Pirson created CXF-6624:
------------------------------------

             Summary: [SOAP][JMS] javax.jms.IllegalStateException when setting 
the exception listener
                 Key: CXF-6624
                 URL: https://issues.apache.org/jira/browse/CXF-6624
             Project: CXF
          Issue Type: Bug
          Components: JMS, Transports
    Affects Versions: 3.1.1
            Reporter: Frédéric Pirson


Hello,

I need to use soap over jms via tibco for some service.

Spring config : 
{code:xml}
    <jaxws:endpoint
            
xmlns:tns="http://blabla.be/WSDL/BE/BE_RiskAcceptance_BUS/1/GetRiskAcceptanceStatus/1";
            id="GetRiskAcceptanceStatus"
            serviceName="tns:GetRiskAcceptanceStatus"
            endpointName="tns:GetRiskAcceptanceStatus_Binding_JMS"
            implementor="#GetRiskAcceptanceStatusService" 
transportId="http://cxf.apache.org/transports/jms";
            
address="jms:jndi:ESB.BE.BS.RiskAcceptance.BE_RiskAcceptance_BUS.1.GetRiskAcceptanceStatus.1.Request"
            >
        <jaxws:features>
            <ref bean="jmsConfigFeatureGetRiskAcceptanceStatus"/>
        </jaxws:features>
    </jaxws:endpoint>
{code}

When deployment occurs, I see every 5s some reconnection.

I analyzed what occurs and it comes from 
org.apache.cxf.transport.jms.JMSDestination. 

{code:java}
   private JMSListenerContainer createTargetDestinationListener() {
        Session session = null;
        try {
            connection = JMSFactory.createConnection(jmsConfig);
            connection.setExceptionListener(new ExceptionListener() {
                public void onException(JMSException exception) {
                    if (!shutdown) {
                        LOG.log(Level.WARNING, "Exception on JMS connection. 
Trying to reconnect", exception);
                        restartConnection();
                    }
                }
            });
            session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
            Destination destination = jmsConfig.getTargetDestination(session);

            PollingMessageListenerContainer container = new 
PollingMessageListenerContainer(connection, 
                                                                                
            destination, this);
            
container.setConcurrentConsumers(jmsConfig.getConcurrentConsumers());
            container.setTransactionManager(jmsConfig.getTransactionManager());
            container.setMessageSelector(jmsConfig.getMessageSelector());
            container.setTransacted(jmsConfig.isSessionTransacted());
            
container.setDurableSubscriptionName(jmsConfig.getDurableSubscriptionName());

            Executor executor = JMSFactory.createExecutor(bus, 
"jms-destination");
            container.setExecutor(executor);
            container.start();
            suspendedContinuations.setListenerContainer(container);
            connection.start();
            return container;
        } catch (JMSException e) {
            throw JMSUtil.convertJmsException(e);
        } finally {
            ResourceCloser.close(session);
        }
    }
{code}

The setExceptionListener invoked on a 
org.jboss.resource.adapter.jms.JmsSessionFactory throw directly that exception 
with message : "This method is not applicable inside the application server. 
See the J2EE spec, e.g. J2EE1.4 Section 6.6";

For the specs : http://java.cnam.fr/iagl/biblio/spec/j2ee-1_4-fr-spec.pdf page 
103 + 104 

Something I do wrong or issue in jms transport ?

Regards



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to