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)