package org.mobicents.slee.resource; import java.io.IOException; import java.io.ObjectInputStream; import java.io.Serializable; import javax.slee.ActivityContextInterface; import javax.slee.FactoryException; import javax.slee.UnrecognizedActivityException; import javax.slee.resource.ActivityHandle; import javax.slee.resource.ResourceAdaptorTypeID; import org.mobicents.slee.container.SleeContainer; import org.mobicents.slee.runtime.activity.ActivityContext; import org.mobicents.slee.runtime.activity.ActivityContextHandle; import org.mobicents.slee.runtime.activity.ActivityContextHandlerFactory; import org.mobicents.slee.runtime.activity.ActivityContextInterfaceImpl; /** * Implementation of the abstract resource adaptor aci factory code. * * @author martins * */ public class AbstractActivityContextInterfaceFactory implements Serializable { /** * */ private static final long serialVersionUID = 1L; /** * */ private transient SleeContainer sleeContainer; /** * */ private final ResourceAdaptorTypeID resourceAdaptorTypeID; /** * * @param sleeContainer * @param resourceAdaptorTypeID */ protected AbstractActivityContextInterfaceFactory( SleeContainer sleeContainer, ResourceAdaptorTypeID resourceAdaptorTypeID) { this.sleeContainer = sleeContainer; this.resourceAdaptorTypeID = resourceAdaptorTypeID; } /** * This method returns the aci for the specified activity, if exists, it * should be invoked by each impl of methods of an ra type aci factory. * * @param activity * @return * @throws NullPointerException * @throws UnrecognizedActivityException * @throws FactoryException */ protected ActivityContextInterface getACI(Object activity) throws NullPointerException, UnrecognizedActivityException, FactoryException { if (activity == null) { throw new NullPointerException("null activity object"); } ActivityHandle handle = null; for (ResourceAdaptorEntity raEntity : sleeContainer .getResourceManagement().getResourceAdaptorEntitiesPerType() .get(resourceAdaptorTypeID)) { handle = raEntity.getResourceAdaptorObject().getActivityHandle( activity); if (handle != null) { ActivityContextHandle ach = ActivityContextHandlerFactory .createExternalActivityContextHandle( raEntity.getName(), handle); ActivityContext ac = sleeContainer.getActivityContextFactory() .getActivityContext(ach); if (ac != null) { return new ActivityContextInterfaceImpl(ac); } break; } } throw new UnrecognizedActivityException(activity.toString()); } @Override public int hashCode() { return resourceAdaptorTypeID.hashCode(); } @Override public boolean equals(Object obj) { if (obj != null && obj.getClass() == this.getClass()) { return ((AbstractActivityContextInterfaceFactory) obj).resourceAdaptorTypeID .equals(this.resourceAdaptorTypeID); } else { return false; } } private void readObject(ObjectInputStream is) throws ClassNotFoundException, IOException { is.defaultReadObject(); sleeContainer = SleeContainer.lookupFromJndi(); } }