/* * Copyright 2008 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.rioproject.impl.fdh; import net.jini.core.lookup.ServiceID; import org.rioproject.associations.AssociationDescriptor; import org.rioproject.impl.loader.ClassBundleLoader; import org.rioproject.opstring.ClassBundle; import org.rioproject.opstring.ServiceElement; /** * The FaultDetectionHandlerFactory class provides static methods to create FaultDetectionHandler instances * * @author Dennis Reedy */ public final class FaultDetectionHandlerFactory { private FaultDetectionHandlerFactory(){} /** * Get a FaultDetectionHandler from the ServiceElement * * @param sElem The ServiceElement * @param cl The delegation ClassLoader used to load the * FaultDetectionHandler, or the current thread's context class * loader if cl is null. * @return A FaultDetectionHandler created and * initialized. A new FaultDetectionHandler will be created each time. * If there are problems creating the FaultDetectionHandler a null will * be returned * * @throws Exception If there are errors creating the FaultDetectionHandler */ public static FaultDetectionHandler<ServiceID> getFaultDetectionHandler(final ServiceElement sElem, final ClassLoader cl) throws Exception { return (getFaultDetectionHandler(sElem.getFaultDetectionHandlerBundle(), cl)); } /** * Get a FaultDetectionHandler from the AssociationDescriptor * * @param aDesc The AssociationDescriptor * @param cl The delegation ClassLoader used to load the * FaultDetectionHandler, or the current thread's context class * loader if cl is null. * @return A FaultDetectionHandler created and * initialized. A new FaultDetectionHandler will be created each time. * If there are problems creating the FaultDetectionHandler a null will * be returned * * @throws Exception If there are errors creating the FaultDetectionHandler */ public static FaultDetectionHandler<ServiceID> getFaultDetectionHandler(final AssociationDescriptor aDesc, final ClassLoader cl) throws Exception { return (getFaultDetectionHandler(aDesc.getFaultDetectionHandlerBundle(), cl)); } /** * Load the FaultDetectionHandler from a ClassBundle * * @param fdhBundle The ClassBundle * @param cl The delegation ClassLoader used to load the * FaultDetectionHandler, or the current thread's context class * loader if cl is null. * @return A FaultDetectionHandler created and * initialized. A new FaultDetectionHandler will be created each time. If * the fdhBundle is null, an * {@link AdminFaultDetectionHandler} will be * created. If there are problems creating the FaultDetectionHandler a * null will be returned * * @throws Exception If there are errors creating the FaultDetectionHandler */ @SuppressWarnings("unchecked") public static FaultDetectionHandler<ServiceID> getFaultDetectionHandler(final ClassBundle fdhBundle, final ClassLoader cl) throws Exception { Class fdhClass; ClassBundle theFdhBundle = getClassBundle(fdhBundle); if(cl==null) fdhClass = ClassBundleLoader.loadClass(theFdhBundle); else fdhClass = ClassBundleLoader.loadClass(cl, theFdhBundle); return (FaultDetectionHandler)fdhClass.newInstance(); } private static ClassBundle getClassBundle(ClassBundle cb) { if(cb==null) return new ClassBundle(AdminFaultDetectionHandler.class.getName()); return cb; } }