Modified: trunk/components/base/src/main/java/org/servicemix/components/jms/JmsReceiverComponent.java (844 => 845)
--- trunk/components/base/src/main/java/org/servicemix/components/jms/JmsReceiverComponent.java 2005-11-15 17:21:47 UTC (rev 844)
+++ trunk/components/base/src/main/java/org/servicemix/components/jms/JmsReceiverComponent.java 2005-11-15 17:22:45 UTC (rev 845)
@@ -1,19 +1,19 @@
-/**
- *
+/**
+ *
* Copyright 2005 LogicBlaze, Inc. http://www.logicblaze.com
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
* http://www.apache.org/licenses/LICENSE-2.0
- *
+ *
* Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
**/
package org.servicemix.components.jms;
@@ -30,7 +30,7 @@
/**
* A component which uses a [EMAIL PROTECTED] JmsTemplate} to consume messages from a
* destination.
- *
+ *
* @version $Revision$
*/
public class JmsReceiverComponent extends JmsInBinding implements InitializingBean, DisposableBean {
@@ -46,21 +46,59 @@
throw new IllegalArgumentException("Must have a template set");
}
connectionFactory = template.getConnectionFactory();
- connection = connectionFactory.createConnection();
-
- session = connection.createSession(template.isSessionTransacted(), template.getSessionAcknowledgeMode());
+//PS Fix: START
+ /*
+ * Component code did not work for JMS 1.02 compliant provider because uses APIs
+ * that did not exist in JMS 1.02 : ConnectionFactory.createConnection,
+ * Connection.createSession
+ */
+ if (template instanceof org.springframework.jms.core.JmsTemplate102) {
+ //Note1 - would've preferred to call JmsTemplate102 methods but they are protected.
+ if (template.isPubSubDomain()) {
+ javax.jms.TopicConnection tc;
+ connection = tc = ((javax.jms.TopicConnectionFactory)connectionFactory).createTopicConnection();
+ session = tc.createTopicSession(template.isSessionTransacted(), template.getSessionAcknowledgeMode());
+ }
+ else {
+ javax.jms.QueueConnection qc;
+ connection = qc = ((javax.jms.QueueConnectionFactory)connectionFactory).createQueueConnection();
+ session = qc.createQueueSession(template.isSessionTransacted(), template.getSessionAcknowledgeMode());
+ }
+ } else { // JMS 1.1 style
+ connection = connectionFactory.createConnection();
+ session = connection.createSession(template.isSessionTransacted(), template.getSessionAcknowledgeMode());
+ }
+//PS Fix: END
Destination defaultDestination = template.getDefaultDestination();
if (defaultDestination == null) {
defaultDestination = template.getDestinationResolver().resolveDestinationName(session, template.getDefaultDestinationName(),
template.isPubSubDomain());
}
- consumer = session.createConsumer(defaultDestination, selector);
+//PS Fix: START
+ /*
+ * Component code did not work for JMS 1.02 compliant provider because uses APIs
+ * that did not exist in JMS 1.02: Session.createConsumer
+ */
+ if (template instanceof org.springframework.jms.core.JmsTemplate102) {
+ //Note1 - would've preferred to call JmsTemplate102.createConsumer but it is protected. Code below is same.
+ //Note2 - assert that defaultDestination is correct type according to isPubSubDomain()
+ if (template.isPubSubDomain()) {
+ consumer = ((javax.jms.TopicSession)session).createSubscriber((javax.jms.Topic)defaultDestination, selector, template.isPubSubNoLocal());
+ } else {
+ consumer = ((javax.jms.QueueSession)session).createReceiver((javax.jms.Queue)defaultDestination, selector);
+ }
+ } else { // JMS 1.1 style
+ consumer = session.createConsumer(defaultDestination, selector);
+ }
+//PS Fix: END
consumer.setMessageListener(this);
connection.start();
}
public void destroy() throws Exception {
+//PS Fix: START
+ /*
if (consumer != null) {
consumer.close();
consumer = null;
@@ -73,6 +111,21 @@
connection.close();
connection = null;
}
+ */
+ try {
+ if (connection != null) {
+ connection.close();
+ } else if (session != null) {
+ session.close();
+ } else if (consumer != null) {
+ consumer.close();
+ }
+ } finally {
+ connection = null;
+ session = null;
+ consumer = null;
+ }
+//PS Fix: END
}
public JmsTemplate getTemplate() {
@@ -90,4 +143,6 @@
public void setSelector(String selector) {
this.selector = selector;
}
+
}
+