1 29 30 package com.caucho.jms.jca; 31 32 import com.caucho.log.Log; 33 import com.caucho.util.L10N; 34 35 import javax.jms.JMSException ; 36 import javax.resource.ResourceException ; 37 import javax.resource.spi.ActivationSpec ; 38 import javax.resource.spi.InvalidPropertyException ; 39 import javax.resource.spi.ResourceAdapter ; 40 import javax.resource.spi.endpoint.MessageEndpointFactory ; 41 import java.util.ArrayList ; 42 import java.util.logging.Level ; 43 import java.util.logging.Logger ; 44 45 48 public class MessageListenerSpec implements ActivationSpec { 49 private static final L10N L = new L10N(MessageListenerSpec.class); 50 private static final Logger log = Log.open(MessageListenerSpec.class); 51 52 private ResourceAdapterImpl _ra; 53 54 private MessageEndpointFactory _factory; 55 56 private ArrayList <MessageListenerTask> _endpoints = 57 new ArrayList <MessageListenerTask>(); 58 59 62 public ResourceAdapter getResourceAdapter() 63 { 64 return _ra; 65 } 66 67 72 public void setResourceAdapter(ResourceAdapter ra) 73 throws ResourceException  74 { 75 if (! (ra instanceof ResourceAdapterImpl)) 76 throw new ResourceException (L.l("'{0}' is not a valid resource adapter for the JMS MessageListenerSpec", 77 ra.getClass().getName())); 78 79 _ra = (ResourceAdapterImpl) ra; 80 } 81 82 85 void setEndpointFactory(MessageEndpointFactory factory) 86 { 87 _factory = factory; 88 } 89 90 93 public void validate() 94 throws InvalidPropertyException  95 { 96 } 97 98 101 void start() 102 throws ResourceException  103 { 104 try { 105 ListenerEndpoint endpoint; 106 endpoint = (ListenerEndpoint) _factory.createEndpoint(null); 107 108 MessageListenerTask task = new MessageListenerTask(_ra, endpoint); 109 110 _endpoints.add(task); 111 112 _ra.getWorkManager().startWork(task); 113 } catch (JMSException e) { 114 throw new ResourceException (e); 115 } 116 } 117 118 121 void stop() 122 throws JMSException  123 { 124 for (int i = 0; i < _endpoints.size(); i++) { 125 MessageListenerTask task = _endpoints.get(i); 126 127 try { 128 task.release(); 129 } catch (Throwable e) { 130 log.log(Level.WARNING, e.toString(), e); 131 } 132 } 133 134 _endpoints.clear(); 135 } 136 } 137 138 | Popular Tags |