001 /** 002 * 003 * Copyright 2004 Hiram Chirino 004 * 005 * Licensed under the Apache License, Version 2.0 (the "License"); 006 * you may not use this file except in compliance with the License. 007 * You may obtain a copy of the License at 008 * 009 * http://www.apache.org/licenses/LICENSE-2.0 010 * 011 * Unless required by applicable law or agreed to in writing, software 012 * distributed under the License is distributed on an "AS IS" BASIS, 013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 014 * See the License for the specific language governing permissions and 015 * limitations under the License. 016 * 017 **/ 018 package org.activemq.ra; 019 020 import java.lang.reflect.Method; 021 022 import javax.jms.Connection; 023 import javax.jms.ConnectionConsumer; 024 import javax.jms.JMSException; 025 import javax.jms.Message; 026 import javax.jms.MessageListener; 027 import javax.jms.Session; 028 import javax.resource.ResourceException; 029 import javax.resource.spi.endpoint.MessageEndpointFactory; 030 import javax.resource.spi.work.WorkException; 031 import javax.resource.spi.work.WorkManager; 032 033 import org.apache.commons.logging.Log; 034 import org.apache.commons.logging.LogFactory; 035 036 /** 037 * @version $Revision: 1.1.1.1 $ $Date: 2005/03/11 21:15:09 $ 038 */ 039 public abstract class ActiveMQBaseEndpointWorker { 040 041 private static final Log log = LogFactory.getLog(ActiveMQBaseEndpointWorker.class); 042 public static final Method ON_MESSAGE_METHOD; 043 044 static { 045 try { 046 ON_MESSAGE_METHOD = MessageListener.class.getMethod("onMessage", new Class[]{Message.class}); 047 } 048 catch (Exception e) { 049 throw new ExceptionInInitializerError(e); 050 } 051 } 052 053 protected ActiveMQResourceAdapter adapter; 054 protected ActiveMQEndpointActivationKey endpointActivationKey; 055 protected MessageEndpointFactory endpointFactory; 056 protected WorkManager workManager; 057 protected boolean transacted; 058 059 /** 060 * @param s 061 */ 062 public static void safeClose(Session s) { 063 try { 064 if (s != null) { 065 s.close(); 066 } 067 } 068 catch (JMSException e) { 069 } 070 } 071 072 /** 073 * @param c 074 */ 075 public static void safeClose(Connection c) { 076 try { 077 if (c != null) { 078 c.close(); 079 } 080 } 081 catch (JMSException e) { 082 } 083 } 084 085 /** 086 * @param cc 087 */ 088 public static void safeClose(ConnectionConsumer cc) { 089 try { 090 if (cc != null) { 091 cc.close(); 092 } 093 } 094 catch (JMSException e) { 095 } 096 } 097 098 public ActiveMQBaseEndpointWorker(ActiveMQResourceAdapter adapter, ActiveMQEndpointActivationKey key) throws ResourceException { 099 this.endpointActivationKey = key; 100 this.adapter = adapter; 101 this.endpointFactory = endpointActivationKey.getMessageEndpointFactory(); 102 this.workManager = adapter.getBootstrapContext().getWorkManager(); 103 try { 104 this.transacted = endpointFactory.isDeliveryTransacted(ON_MESSAGE_METHOD); 105 } 106 catch (NoSuchMethodException e) { 107 throw new ResourceException("Endpoint does not implement the onMessage method."); 108 } 109 } 110 111 public abstract void start() throws WorkException, ResourceException; 112 113 public abstract void stop() throws InterruptedException; 114 115 116 }