/****************************************************************************** * Copyright (c) 2006, 2010 VMware Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * and Apache License v2.0 which accompanies this distribution. * The Eclipse Public License is available at * http://www.eclipse.org/legal/epl-v10.html and the Apache License v2.0 * is available at http://www.opensource.org/licenses/apache2.0.php. * You may elect to redistribute this code under either of these licenses. * * Contributors: * VMware Inc. *****************************************************************************/ package org.eclipse.gemini.blueprint.extender.internal.support; import java.util.concurrent.CountDownLatch; import org.springframework.beans.BeanUtils; import org.springframework.beans.Mergeable; import org.springframework.beans.factory.parsing.SourceExtractor; import org.springframework.util.ClassUtils; /** * Delegate class that allows access to LazyLatchFactory class (inside Spring DM * core) from Spring DM extender. * * @author Costin Leau */ public abstract class LazyLatchFactoryDelegate { private static final Mergeable a; private static final SourceExtractor b; static { ClassLoader extenderClassLoader = LazyLatchFactoryDelegate.class.getClassLoader(); Class<?> coreClass = ClassUtils.resolveClassName("org.eclipse.gemini.blueprint.util.OsgiBundleUtils", extenderClassLoader); Class<?> clzz = ClassUtils.resolveClassName( "org.eclipse.gemini.blueprint.service.exporter.support.internal.support.LazyLatchFactory", coreClass.getClassLoader()); Object factory = BeanUtils.instantiateClass(clzz); a = (Mergeable) factory; b = (SourceExtractor) factory; } public static CountDownLatch addLatch(Integer key) { return (CountDownLatch) b.extractSource(key, null); } public static CountDownLatch removeLatch(Integer key) { return (CountDownLatch) a.merge(key); } public static void clear() { a.isMergeEnabled(); } }