package org.mobicents.slee.resource;
import java.util.Timer;
import javax.slee.InvalidArgumentException;
import javax.slee.SLEEException;
import javax.slee.ServiceID;
import javax.slee.facilities.AlarmFacility;
import javax.slee.facilities.EventLookupFacility;
import javax.slee.facilities.ServiceLookupFacility;
import javax.slee.facilities.Tracer;
import javax.slee.management.ManagementException;
import javax.slee.profile.ProfileTable;
import javax.slee.profile.UnrecognizedProfileTableNameException;
import javax.slee.resource.ResourceAdaptorContext;
import javax.slee.resource.ResourceAdaptorID;
import javax.slee.resource.ResourceAdaptorTypeID;
import javax.slee.resource.SleeEndpoint;
import javax.slee.transaction.SleeTransactionManager;
import javax.slee.usage.NoUsageParametersInterfaceDefinedException;
import javax.slee.usage.UnrecognizedUsageParameterSetNameException;
import org.mobicents.slee.container.SleeContainer;
import org.mobicents.slee.container.management.jmx.ResourceUsageMBeanImpl;
import org.mobicents.slee.runtime.eventrouter.EventRouterThreadLocals;
import org.mobicents.slee.runtime.facilities.TracerImpl;
public class ResourceAdaptorContextImpl implements ResourceAdaptorContext {
private final ResourceAdaptorEntity raEntity;
private final SleeEndpointImpl sleeEndpointImpl;
private final SleeContainer sleeContainer;
private final ServiceLookupFacility serviceLookupFacility;
private final EventLookupFacility eventLookupFacility;
private final ResourceAdaptorEntityTimer timer;
public ResourceAdaptorContextImpl(ResourceAdaptorEntity raEntity, SleeContainer sleeContainer) {
this.raEntity = raEntity;
this.sleeContainer = sleeContainer;
this.sleeEndpointImpl = new SleeEndpointImpl(raEntity,sleeContainer);
this.eventLookupFacility = new EventLookupFacilityImpl(raEntity,sleeContainer);
this.serviceLookupFacility = new ServiceLookupFacilityImpl(raEntity,sleeContainer);
// FIXME replace by fault tolerant timer shared by all ra entities
this.timer = new ResourceAdaptorEntityTimer(new Timer());
}
public AlarmFacility getAlarmFacility() {
return this.raEntity.getAlarmFacility();
}
public Object getDefaultUsageParameterSet()
throws NoUsageParametersInterfaceDefinedException, SLEEException {
ResourceUsageMBeanImpl resourceUsageMBeanImpl = raEntity.getResourceUsageMBean();
if (resourceUsageMBeanImpl == null) {
throw new NoUsageParametersInterfaceDefinedException("the entity "+raEntity.getName()+" doesn't define usage param");
}
else {
return raEntity.getResourceUsageMBean().getDefaultInstalledUsageParameterSet();
}
}
public String getEntityName() {
return this.raEntity.getName();
}
public EventLookupFacility getEventLookupFacility() {
return eventLookupFacility;
}
public ServiceID getInvokingService() {
return EventRouterThreadLocals.getInvokingService();
}
public ProfileTable getProfileTable(String profileTableName)
throws NullPointerException, UnrecognizedProfileTableNameException,
SLEEException {
return sleeContainer.getProfileFacility().getProfileTable(profileTableName);
}
public ResourceAdaptorID getResourceAdaptor() {
return this.raEntity.getResourceAdaptorID();
}
public ResourceAdaptorTypeID[] getResourceAdaptorTypes() {
return raEntity.getComponent().getSpecsDescriptor().getResourceAdaptorTypes();
}
public ServiceLookupFacility getServiceLookupFacility() {
return serviceLookupFacility;
}
public SleeEndpoint getSleeEndpoint() {
return sleeEndpointImpl;
}
public SleeTransactionManager getSleeTransactionManager() {
return sleeContainer.getTransactionManager();
}
public Timer getTimer() {
return timer;
}
public Tracer getTracer(String tracerName) throws NullPointerException,
IllegalArgumentException, SLEEException {
try {
TracerImpl.checkTracerName(tracerName, raEntity.getNotificationSource());
} catch (InvalidArgumentException e1) {
throw new IllegalArgumentException(e1);
}
try {
return this.sleeContainer.getTraceMBean().createTracer(raEntity.getNotificationSource(), tracerName, true);
} catch (ManagementException e) {
throw new SLEEException("Failed to crate tracer: "+tracerName,e);
}
}
public Object getUsageParameterSet(String paramSetName)
throws NullPointerException,
NoUsageParametersInterfaceDefinedException,
UnrecognizedUsageParameterSetNameException, SLEEException {
if (paramSetName == null) {
throw new NullPointerException("null param set name");
}
ResourceUsageMBeanImpl resourceUsageMBeanImpl = raEntity.getResourceUsageMBean();
if (resourceUsageMBeanImpl == null) {
throw new NoUsageParametersInterfaceDefinedException("the entity "+raEntity.getName()+" doesn't define usage param");
}
else {
Object result = raEntity.getResourceUsageMBean().getInstalledUsageParameterSet(paramSetName);
if (result == null) {
throw new UnrecognizedUsageParameterSetNameException(paramSetName);
}
return result;
}
}
}