package org.jboss.resource.adapter.jms;
import java.util.Iterator;
import java.util.Map;
import javax.resource.ResourceException;
import javax.resource.spi.ActivationSpec;
import javax.resource.spi.BootstrapContext;
import javax.resource.spi.ResourceAdapter;
import javax.resource.spi.ResourceAdapterInternalException;
import javax.resource.spi.endpoint.MessageEndpointFactory;
import javax.resource.spi.work.WorkManager;
import javax.transaction.xa.XAResource;
import org.jboss.logging.Logger;
import org.jboss.resource.adapter.jms.inflow.JmsActivation;
import org.jboss.resource.adapter.jms.inflow.JmsActivationSpec;
import EDU.oswego.cs.dl.util.concurrent.ConcurrentReaderHashMap;
public class JmsResourceAdapter implements ResourceAdapter
{
private static final Logger log = Logger.getLogger(JmsResourceAdapter.class);
private BootstrapContext ctx;
private ConcurrentReaderHashMap activations = new ConcurrentReaderHashMap();
public WorkManager getWorkManager()
{
return ctx.getWorkManager();
}
public void endpointActivation(MessageEndpointFactory endpointFactory, ActivationSpec spec) throws ResourceException
{
JmsActivation activation = new JmsActivation(this, endpointFactory, (JmsActivationSpec) spec);
activations.put(spec, activation);
activation.start();
}
public void endpointDeactivation(MessageEndpointFactory endpointFactory, ActivationSpec spec)
{
JmsActivation activation = (JmsActivation) activations.remove(spec);
if (activation != null)
activation.stop();
}
public XAResource[] getXAResources(ActivationSpec[] specs) throws ResourceException
{
return null;
}
public void start(BootstrapContext ctx) throws ResourceAdapterInternalException
{
this.ctx = ctx;
}
public void stop()
{
for (Iterator i = activations.entrySet().iterator(); i.hasNext();)
{
Map.Entry entry = (Map.Entry) i.next();
try
{
JmsActivation activation = (JmsActivation) entry.getValue();
activation.stop();
}
catch (Exception ignored)
{
log.debug("Ignored", ignored);
}
i.remove();
}
}
}