[prev in list] [next in list] [prev in thread] [next in thread]
List: activemq-commits
Subject: svn commit: r642166 -
From: jstrachan () apache ! org
Date: 2008-03-28 9:42:50
Message-ID: 20080328094251.438B11A983A () eris ! apache ! org
[Download RAW message or body]
Author: jstrachan
Date: Fri Mar 28 02:42:40 2008
New Revision: 642166
URL: http://svn.apache.org/viewvc?rev=642166&view=rev
Log:
added a fix for http://issues.apache.org/activemq/browse/AMQ-1636 to avoid creating \
unnecessary connections when sending messages from Camel
Modified:
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java
Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apach \
e/activemq/camel/component/ActiveMQConfiguration.java?rev=642166&r1=642165&r2=642166&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java \
(original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/camel/component/ActiveMQConfiguration.java \
Fri Mar 28 02:42:40 2008 @@ -16,17 +16,23 @@
*/
package org.apache.activemq.camel.component;
-import org.apache.activemq.pool.PooledConnectionFactory;
-import org.apache.activemq.spring.ActiveMQConnectionFactory;
-import org.apache.camel.component.jms.JmsConfiguration;
+import java.lang.reflect.Constructor;
+import java.lang.reflect.InvocationTargetException;
import javax.jms.ConnectionFactory;
+import org.apache.activemq.spring.ActiveMQConnectionFactory;
+import org.apache.camel.component.jms.JmsConfiguration;
+import org.springframework.jms.connection.SingleConnectionFactory;
+import org.springframework.jms.core.JmsTemplate;
+
/**
* @version $Revision$
*/
public class ActiveMQConfiguration extends JmsConfiguration {
private String brokerURL = ActiveMQConnectionFactory.DEFAULT_BROKER_URL;
+ private boolean useSingleConnection = true;
+ private boolean usePooledConnection = false;
public ActiveMQConfiguration() {
}
@@ -45,6 +51,40 @@
this.brokerURL = brokerURL;
}
+ public boolean isUseSingleConnection() {
+ return useSingleConnection;
+ }
+
+ /**
+ * Enables or disables whether a Spring {@link SingleConnectionFactory} will be \
used so that when + * messages are sent to ActiveMQ from outside of a message \
consuming thread, pooling will be used rather + * than the default with the \
Spring {@link JmsTemplate} which will create a new connection, session, producer + \
* for each message then close them all down again. + * <p/>
+ * The default value is true so that a single connection is used by default.
+ *
+ * @param useSingleConnection
+ */
+ public void setUseSingleConnection(boolean useSingleConnection) {
+ this.useSingleConnection = useSingleConnection;
+ }
+
+ public boolean isUsePooledConnection() {
+ return usePooledConnection;
+ }
+
+ /**
+ * Enables or disables whether a PooledConnectionFactory will be used so that \
when + * messages are sent to ActiveMQ from outside of a message consuming \
thread, pooling will be used rather + * than the default with the Spring {@link \
JmsTemplate} which will create a new connection, session, producer + * for each \
message then close them all down again. + * <p/>
+ * The default value is false by default as it requires an extra dependency on \
commons-pool. + */
+ public void setUsePooledConnection(boolean usePooledConnection) {
+ this.usePooledConnection = usePooledConnection;
+ }
+
@Override
protected ConnectionFactory createConnectionFactory() {
ActiveMQConnectionFactory answer = new ActiveMQConnectionFactory();
@@ -52,6 +92,46 @@
answer.setBeanName("Camel");
}
answer.setBrokerURL(getBrokerURL());
- return answer;
+ if (isUsePooledConnection()) {
+ return createPooledConnectionFactory(answer);
+ }
+ else if (isUseSingleConnection()) {
+ return new SingleConnectionFactory(answer);
+ //return new PooledConnectionFactory(answer);
+ }
+ else {
+ return answer;
+ }
+ }
+
+ protected ConnectionFactory \
createPooledConnectionFactory(ActiveMQConnectionFactory connectionFactory) { + \
// lets not use classes directly to avoid a runtime dependency on commons-pool + \
// for folks not using this option + try {
+ Class type = \
loadClass("org.apache.activemq.pool.PooledConnectionFactory", \
getClass().getClassLoader()); + Constructor constructor = \
type.getConstructor(ActiveMQConnectionFactory.class); + return \
(ConnectionFactory) constructor.newInstance(connectionFactory); + }
+ catch (Exception e) {
+ throw new RuntimeException("Failed to instantiate \
PooledConnectionFactory: " + e, e); + }
+ }
+
+ public static Class<?> loadClass(String name, ClassLoader loader) throws \
ClassNotFoundException { + ClassLoader contextClassLoader = \
Thread.currentThread().getContextClassLoader(); + if (contextClassLoader != \
null) { + try {
+ return contextClassLoader.loadClass(name);
+ }
+ catch (ClassNotFoundException e) {
+ try {
+ return loader.loadClass(name);
+ }
+ catch (ClassNotFoundException e1) {
+ throw e1;
+ }
+ }
+ }
+ return null;
}
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic