View Javadoc

1   /***
2   *
3   * Copyright 2004 Hiram Chirino
4   *
5   * Licensed under the Apache License, Version 2.0 (the "License");
6   * you may not use this file except in compliance with the License.
7   * You may obtain a copy of the License at
8   *
9   * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  **/
18  package org.codehaus.activemq.ra;
19  
20  import java.lang.reflect.Method;
21  
22  import javax.jms.ConnectionConsumer;
23  import javax.jms.JMSException;
24  import javax.jms.Message;
25  import javax.jms.MessageListener;
26  import javax.jms.Session;
27  import javax.resource.ResourceException;
28  import javax.resource.spi.endpoint.MessageEndpointFactory;
29  import javax.resource.spi.work.WorkException;
30  import javax.resource.spi.work.WorkManager;
31  
32  import org.apache.commons.logging.Log;
33  import org.apache.commons.logging.LogFactory;
34  
35  /***
36   * @version $Revision: 1.2 $ $Date: 2004/07/30 01:52:52 $
37   */
38  public abstract class ActiveMQBaseEndpointWorker {
39  
40      private static final Log log = LogFactory.getLog(ActiveMQBaseEndpointWorker.class);
41  	public static final Method ON_MESSAGE_METHOD;
42  	
43      static {
44          try {
45              ON_MESSAGE_METHOD = MessageListener.class.getMethod("onMessage", new Class[]{Message.class});
46          } catch (Exception e) {
47              throw new ExceptionInInitializerError(e);
48          }
49      }
50  
51  	protected ActiveMQResourceAdapter adapter;
52  	protected ActiveMQEndpointActivationKey endpointActivationKey;
53  	protected MessageEndpointFactory endpointFactory;
54  	protected WorkManager workManager;
55  	protected boolean transacted;
56  
57  	/***
58  	 * @param s
59  	 */
60  	public static void safeClose(Session s) {
61  	    try {
62  	        if (s != null) {
63  	            s.close();
64  	        }
65  	    } catch (JMSException e) {
66  	    }
67  	}
68  
69  	/***
70  	 * @param cc
71  	 */
72  	public static void safeClose(ConnectionConsumer cc) {
73  	    try {
74  	        if (cc != null) {
75  	            cc.close();
76  	        }
77  	    } catch (JMSException e) {
78  	    }
79  	}
80  
81  	public ActiveMQBaseEndpointWorker(ActiveMQResourceAdapter adapter, ActiveMQEndpointActivationKey key) throws ResourceException {
82          this.endpointActivationKey = key;
83          this.adapter = adapter;        
84          this.endpointFactory = endpointActivationKey.getMessageEndpointFactory();
85          this.workManager = adapter.getBootstrapContext().getWorkManager();
86          try {
87  			this.transacted = endpointFactory.isDeliveryTransacted(ON_MESSAGE_METHOD);
88  		} catch (NoSuchMethodException e) {
89  			throw new ResourceException("Endpoint does not implement the onMessage method.");
90  		}
91      }
92  
93  	public abstract void start() throws WorkException, ResourceException;
94  
95  	public abstract void stop() throws InterruptedException;
96      
97  
98  }