| /******************************************************************************* |
| * Copyright (c) 2015 Composent, Inc. 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: Scott Lewis - initial API and implementation |
| ******************************************************************************/ |
| package com.mycorp.examples.timeservice.host; |
| |
| import java.util.Dictionary; |
| import java.util.Hashtable; |
| import java.util.Properties; |
| |
| import org.eclipse.ecf.osgi.services.remoteserviceadmin.DebugRemoteServiceAdminListener; |
| import org.osgi.framework.BundleActivator; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.framework.ServiceRegistration; |
| import org.osgi.service.remoteserviceadmin.RemoteServiceAdminListener; |
| |
| import com.mycorp.examples.timeservice.ITimeService; |
| |
| public class Activator implements BundleActivator { |
| |
| private static final boolean verbose = Boolean.valueOf(System.getProperty( |
| "verboseRemoteServiceAdmin", "true")); |
| |
| private ServiceRegistration<ITimeService> timeServiceRegistration; |
| |
| public void start(BundleContext context) throws Exception { |
| // If verbose is not turned off then register debug listener |
| if (verbose) |
| context.registerService(RemoteServiceAdminListener.class, |
| new DebugRemoteServiceAdminListener(), null); |
| |
| // Create remote service properties |
| Dictionary<String, Object> props = createRemoteServiceProperties(); |
| |
| // Create MyTimeService impl and register/export as a remote service |
| // via the remote service properties |
| timeServiceRegistration = context.registerService(ITimeService.class, |
| new TimeServiceImpl(), props); |
| |
| // Print out the service registration |
| System.out.println("TimeService host registered with registration=" |
| + timeServiceRegistration); |
| } |
| |
| public void stop(BundleContext context) throws Exception { |
| if (timeServiceRegistration != null) { |
| timeServiceRegistration.unregister(); |
| timeServiceRegistration = null; |
| } |
| } |
| |
| private static final String SERVICE_EXPORTED_CONFIGS = "service.exported.configs"; |
| private static final String DEFAULT_CONFIG = "ecf.generic.server"; |
| |
| private Dictionary<String, Object> createRemoteServiceProperties() { |
| Hashtable<String, Object> result = new Hashtable<String, Object>(); |
| // This property is required by the Remote Services specification |
| // (chapter 100 in enterprise specification), and when set results |
| // in RSA impl exporting as a remote service |
| result.put("service.exported.interfaces", "*"); |
| // async interfaces is an ECF Remote Services service property |
| // that allows any declared asynchronous interfaces |
| // to be used by consumers. |
| // See https://wiki.eclipse.org/ECF/Asynchronous_Remote_Services |
| result.put("ecf.exported.async.interfaces", "*"); |
| // get system properties |
| Properties props = System.getProperties(); |
| // Get OSGi service.exported.configs property |
| String config = props.getProperty(SERVICE_EXPORTED_CONFIGS); |
| if (config == null) { |
| config = DEFAULT_CONFIG; |
| result.put(DEFAULT_CONFIG + ".port", "3288"); |
| result.put(DEFAULT_CONFIG + ".hostname", "localhost"); |
| } |
| |
| result.put(SERVICE_EXPORTED_CONFIGS, config); |
| // add any config properties. config properties start with |
| // the config name '.' property |
| for (Object k : props.keySet()) { |
| if (k instanceof String) { |
| String key = (String) k; |
| if (key.startsWith(config)) |
| result.put(key, props.get(key)); |
| } |
| } |
| return result; |
| } |
| |
| } |