Author: dkulp
Date: Wed Jan 27 17:51:18 2010
New Revision: 903762
URL: http://svn.apache.org/viewvc?rev=903762&view=rev
Log:
[CXF-2630] Use some reflection to set the task executor to work with
both Spring 2.5.x and 3.x
Modified:
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/Messages.properties
Modified:
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java?rev=903762&r1=903761&r2=903762&view=diff
==============================================================================
---
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
(original)
+++
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/JMSFactory.java
Wed Jan 27 17:51:18 2010
@@ -19,6 +19,7 @@
package org.apache.cxf.transport.jms;
import java.lang.reflect.Method;
+import java.util.logging.Level;
import java.util.logging.Logger;
import javax.jms.ConnectionFactory;
@@ -32,6 +33,7 @@
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.service.model.EndpointInfo;
+import org.springframework.core.task.TaskExecutor;
import org.springframework.jms.connection.SingleConnectionFactory;
import
org.springframework.jms.connection.UserCredentialsConnectionFactoryAdapter;
import org.springframework.jms.core.JmsTemplate;
@@ -260,6 +262,7 @@
jmsListener.setDestinationResolver(jmsConfig.getDestinationResolver());
}
if (jmsConfig.getTaskExecutor() != null) {
+ setTaskExecutor(jmsListener, jmsConfig.getTaskExecutor());
jmsListener.setTaskExecutor(jmsConfig.getTaskExecutor());
}
if (destination != null) {
@@ -276,6 +279,31 @@
jmsListener.start();
return jmsListener;
}
+
+ private static void setTaskExecutor(DefaultMessageListenerContainer
jmsListener, TaskExecutor exec) {
+ //CXF-2630 - The method sig for
DefaultMessageListenerContainer.setTaskExecutor changed between
+ //Spring 2.5 and 3.0 and code compiled for one won't run on the other.
Thus, we need
+ //to revert to using some reflection to make this call
+ Exception ex = null;
+ for (Method m : jmsListener.getClass().getMethods()) {
+ if ("setTaskExecutor".equals(m.getName())
+ && m.getParameterTypes().length == 1
+ && m.getParameterTypes()[0].isInstance(exec)) {
+ try {
+ m.invoke(jmsListener, exec);
+ return;
+ } catch (Exception e) {
+ ex = e;
+ }
+ }
+ }
+ //if we get here, we couldn't find a valid method or something else
went wrong
+ if (ex != null) {
+ LOG.log(Level.WARNING, "ERROR_SETTING_TASKEXECUTOR", ex);
+ } else {
+ LOG.log(Level.WARNING, "NO_SETTASKEXECUTOR_METHOD",
jmsListener.getClass().getName());
+ }
+ }
/**
* If the destinationName given is null then a temporary destination is
created else the destination name
Modified:
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/Messages.properties
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/Messages.properties?rev=903762&r1=903761&r2=903762&view=diff
==============================================================================
---
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/Messages.properties
(original)
+++
cxf/trunk/rt/transports/jms/src/main/java/org/apache/cxf/transport/jms/Messages.properties
Wed Jan 27 17:51:18 2010
@@ -25,3 +25,5 @@
JMSCONFIG_REQUIRED = You have to set the property jmsConfig
INVALID_ENCODING_MSG = Invalid character set {0} in the message.
INVALID_MESSAGE_TYPE = Invalid configuration for message type, if the MTOM
enabled, the message type should be binary.
+ERROR_SETTING_TASKEXECUTOR = Could not set TaskExecutor on
DefaultMessageListenerContainer.
+NO_SETTASKEXECUTOR_METHOD = Could not set TaskExecutor on
DefaultMessageListenerContainer as a setTaskExecutor method could not be found
on class {0}.
\ No newline at end of file