Package org.eclipse.ecf.internal.examples.remoteservices.hello.consumer.rs

Source Code of org.eclipse.ecf.internal.examples.remoteservices.hello.consumer.rs.Activator

/****************************************************************************
* Copyright (c) 2013 Composent, Inc. and others.
* 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:
*    Composent, Inc. - initial API and implementation
*****************************************************************************/
package org.eclipse.ecf.internal.examples.remoteservices.hello.consumer.rs;

import org.eclipse.core.runtime.Assert;
import org.eclipse.ecf.core.IContainer;
import org.eclipse.ecf.core.IContainerManager;
import org.eclipse.ecf.core.identity.IDFactory;
import org.eclipse.ecf.examples.remoteservices.hello.IHello;
import org.eclipse.ecf.remoteservice.IRemoteCall;
import org.eclipse.ecf.remoteservice.IRemoteCallListener;
import org.eclipse.ecf.remoteservice.IRemoteService;
import org.eclipse.ecf.remoteservice.IRemoteServiceContainerAdapter;
import org.eclipse.ecf.remoteservice.IRemoteServiceReference;
import org.eclipse.ecf.remoteservice.events.IRemoteCallCompleteEvent;
import org.eclipse.ecf.remoteservice.events.IRemoteCallEvent;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.util.tracker.ServiceTracker;

/**
* The activator class controls the plug-in life cycle
*/
public class Activator implements BundleActivator {

  public static final String ROSGI_SERVICE_HOST = "r-osgi://localhost:9278";

  private BundleContext context;
  private ServiceTracker containerManagerServiceTracker;
  private IContainer container;

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext)
   */
  public void start(BundleContext context) throws Exception {
    this.context = context;
    // 1. Create R-OSGi Container
    IContainerManager containerManager = getContainerManagerService();
    container = containerManager.getContainerFactory().createContainer(
        "ecf.r_osgi.peer");
    // 2. Get remote service container adapter
    IRemoteServiceContainerAdapter containerAdapter = (IRemoteServiceContainerAdapter) container
        .getAdapter(IRemoteServiceContainerAdapter.class);
    // 3. Lookup IRemoteServiceReference
    IRemoteServiceReference[] helloReferences = containerAdapter
        .getRemoteServiceReferences(IDFactory.getDefault().createID(
            container.getConnectNamespace(), ROSGI_SERVICE_HOST),
            IHello.class.getName(), null);
    Assert.isNotNull(helloReferences);
    Assert.isTrue(helloReferences.length > 0);
    // 4. Get remote service for reference
    IRemoteService remoteService = containerAdapter
        .getRemoteService(helloReferences[0]);
    // 5. Get the proxy
    IHello proxy = (IHello) remoteService.getProxy();
    // 6. Finally...call the proxy
    proxy.hello("RemoteService Consumer");

    // Call asynchronously via listener
    callViaListener(remoteService);
  }

  void callViaListener(IRemoteService remoteService) {
    remoteService.callAsync(createRemoteCall(), createRemoteCallListener());
    System.out.println("callAsync invoked");
  }

  IRemoteCall createRemoteCall() {
    return new IRemoteCall() {

      public String getMethod() {
        return "hello";
      }

      public Object[] getParameters() {
        return new Object[] { "Asynch RemoteService Consumer" };
      }

      public long getTimeout() {
        return 0;
      }
    };
  }

  IRemoteCallListener createRemoteCallListener() {
    return new IRemoteCallListener() {

      public void handleEvent(IRemoteCallEvent event) {
        if (event instanceof IRemoteCallCompleteEvent) {
          IRemoteCallCompleteEvent cce = (IRemoteCallCompleteEvent) event;
          if (!cce.hadException())
            System.out
                .println("Remote call completed successfully!");
          else
            System.out
                .println("Remote call completed with exception: "
                    + cce.getException());
        }
      }
    };
  }

  /*
   * (non-Javadoc)
   *
   * @see
   * org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext)
   */
  public void stop(BundleContext context) throws Exception {
    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();
  }

}
TOP

Related Classes of org.eclipse.ecf.internal.examples.remoteservices.hello.consumer.rs.Activator

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.