| package org.eclipse.ecf.internal.examples.remoteservices.hello.host.rs; |
| |
| import org.eclipse.ecf.core.IContainer; |
| import org.eclipse.ecf.core.IContainerManager; |
| import org.eclipse.ecf.examples.remoteservices.hello.IHello; |
| import org.eclipse.ecf.examples.remoteservices.hello.impl.Hello; |
| import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter; |
| import org.eclipse.ecf.remoteservice.IRemoteServiceRegistration; |
| import org.osgi.framework.BundleActivator; |
| import org.osgi.framework.BundleContext; |
| import org.osgi.util.tracker.ServiceTracker; |
| |
| public class Activator implements BundleActivator { |
| |
| private BundleContext context; |
| private ServiceTracker containerManagerServiceTracker; |
| private IContainer container; |
| private IRemoteServiceRegistration serviceRegistration; |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext |
| * ) |
| */ |
| public void start(BundleContext context) throws Exception { |
| this.context = context; |
| // Create R-OSGi Container |
| IContainerManager containerManager = getContainerManagerService(); |
| container = containerManager.getContainerFactory().createContainer( |
| "ecf.r_osgi.peer"); |
| // Get remote service container adapter |
| IRemoteServiceContainerAdapter containerAdapter = (IRemoteServiceContainerAdapter) container |
| .getAdapter(IRemoteServiceContainerAdapter.class); |
| // Register remote service |
| serviceRegistration = containerAdapter.registerRemoteService( |
| new String[] { IHello.class.getName() }, new Hello(), null); |
| System.out.println("IHello RemoteService registered"); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see |
| * org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext) |
| */ |
| public void stop(BundleContext context) throws Exception { |
| if (serviceRegistration != null) { |
| serviceRegistration.unregister(); |
| serviceRegistration = null; |
| } |
| if (container != null) { |
| container.disconnect(); |
| container = null; |
| } |
| if (containerManagerServiceTracker != null) { |
| containerManagerServiceTracker.close(); |
| containerManagerServiceTracker = null; |
| } |
| this.context = null; |
| } |
| |
| private IContainerManager getContainerManagerService() { |
| if (containerManagerServiceTracker == null) { |
| containerManagerServiceTracker = new ServiceTracker(context, |
| IContainerManager.class.getName(), null); |
| containerManagerServiceTracker.open(); |
| } |
| return (IContainerManager) containerManagerServiceTracker.getService(); |
| } |
| } |