/******************************************************************************* * Copyright (c) 2007-2008 Cambridge Semantics Incorporated. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Cambridge Semantics Incorporated *******************************************************************************/ package org.openanzo.execution.java; import java.util.Dictionary; import java.util.Hashtable; import org.openanzo.exceptions.AnzoException; import org.openanzo.exceptions.LogUtils; import org.openanzo.execution.BaseExecutorActivator; import org.openanzo.execution.BaseServiceExecutor; import org.openanzo.osgi.GenericObjectClassDef; import org.openanzo.osgi.IServiceTrackerListener; import org.openanzo.osgi.OsgiServiceTracker; import org.openanzo.osgi.attributes.ServicesAttributes; import org.osgi.service.metatype.AttributeDefinition; import org.osgi.service.metatype.ObjectClassDefinition; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Activator for the JavaExector * * */ public class JavaExecutorActivator extends BaseExecutorActivator { private static final Logger log = LoggerFactory.getLogger(JavaExecutorActivator.class); /** Service PID for the JavaExecutor */ public static final String SERVICE_PID = "org.openanzo.execution.java.JavaServiceExecutor"; private OsgiServiceTracker<ISemanticServiceFactory> serviceFactoryTracker = null; private OsgiServiceTracker<IBundledSemanticService> serviceTracker = null; GenericObjectClassDef classDef; public ObjectClassDefinition getObjectClassDefinition(String id, String locale) { return classDef != null ? classDef : (classDef = new GenericObjectClassDef(SERVICE_PID, getBundleName(), getBundleDescription(), new AttributeDefinition[] { ServicesAttributes.Enabled }, null)); } @Override public String getServicePid() { return SERVICE_PID; } @Override public void start() { super.start(); serviceFactoryTracker = new OsgiServiceTracker<ISemanticServiceFactory>(new IServiceTrackerListener<ISemanticServiceFactory>() { public Class<ISemanticServiceFactory> getComponentType() { return ISemanticServiceFactory.class; } public void unregisterService(ISemanticServiceFactory serviceFactory) { JavaServiceExecutor exec = (JavaServiceExecutor) executor; exec.unregisterServiceFactory(serviceFactory.getClass().getName()); } public void registerService(ISemanticServiceFactory serviceFactory) { try { JavaServiceExecutor exec = (JavaServiceExecutor) executor; exec.registerServiceFactory(serviceFactory.getClass().getName(), serviceFactory); // if (services != null) { // for (JavaSemanticService service : services) { // context.registerService(IStatisticsProvider.class.getName(), service, null); // } // } } catch (AnzoException e) { log.error(LogUtils.LIFECYCLE_MARKER, "Error registering java execution service factory:" + serviceFactory.getClass().getName(), e); } } }, context); serviceFactoryTracker.open(); serviceTracker = new OsgiServiceTracker<IBundledSemanticService>(new IServiceTrackerListener<IBundledSemanticService>() { public Class<IBundledSemanticService> getComponentType() { return IBundledSemanticService.class; } public void unregisterService(IBundledSemanticService service) { JavaServiceExecutor exec = (JavaServiceExecutor) executor; exec.unregisterService(service); } public void registerService(final IBundledSemanticService service) { Thread t1 = new Thread() { @Override public void run() { try { JavaServiceExecutor exec = (JavaServiceExecutor) executor; registry.beginUpdatingRegistry(); exec.registerService(service, registry); registry.commitRegistry(); } catch (AnzoException e) { log.error(LogUtils.LIFECYCLE_MARKER, "Error registering java bundled execution service:" + service.getName(), e); } } }; t1.start(); } }, context); serviceTracker.open(); } @Override public void stop(boolean bundleStopping) { super.stop(bundleStopping); if (serviceFactoryTracker != null) { serviceFactoryTracker.close(); serviceFactoryTracker = null; } if (serviceTracker != null) { serviceTracker.close(); serviceTracker = null; } } @Override public Dictionary<? extends Object, ? extends Object> getDefaultConfigProperties() { return new Hashtable<Object, Object>(); } @Override public BaseServiceExecutor getExecutor(Dictionary<? extends Object, ? extends Object> configProperties) { return new JavaServiceExecutor(); } }