| Hi Ronen, 
 On 3/28/2011 5:33 AM, ronen hamias wrote:
 
      
        Hi Scott and thanks for the help   i am using ECF on the server since i do not have client
          side i am using ECF as (server side) service communication
          framework based on OSGi i have changed the port as suggested and got the following
          error:  <stuff deleted> it seem that this line of code returns null:
   
              // 3. Lookup IRemoteServiceReference IRemoteServiceReference[] helloReferences =
              containerAdapter.getRemoteServiceReferences(IDFactory.getDefault().createID(container.getConnectNamespace(),
          ROSGI_SERVICE_HOST),IHello.class.getName(), null); my consumer service cannot locate my
              services Right.  So it *looks* like there is still something wrong with the
    value of the ROSGI_SERVICE_HOST or DEFAULT_CONTAINER_ID.  They need
    to both be equal to  "r-osgi://localhost:9278"
 
 Also...is it possible that the service host is not registered before
    the client tries to connect?  (i.e. you are setting up a race, where
    the consumer connects and tries to access the host before the
    service host registration completes?
 
 A third possibility:  the *package* of your service interface
    (IHello) must be exported.  If you have created your own/new IHello,
    in your own/new package, then you should make sure that that package
    is exported.
 
 Further...I would suggest that you start from a codebase that is
    known to work...e.g. the hello examples.  If you must call
    getRemoteServiceReferences directly in your code (rather than using
    the OSGi remote services...which does this automatically for
    you...and I would suggest using), then I would suggest starting from
    these two example projects...as they are known to work just fine:
 
 org.eclipse.ecf.examples.remoteservices.hello.host.rs   (hello host
    example using remote services api directly)
 org.eclipse.ecf.examples.remoteservices.hello.consumer.rs (hello
    consumer example using remote services api directly)
 
 It looks from your code that you have already consulted these
    projects...so are you able to locally start/run the products in:
 
 /org.eclipse.ecf.examples.remoteservices.hello.host.rs/products/Hello
    Service Host RS.product
 (for host)
 
 org.eclipse.ecf.examples.remoteservices.hello.consumer.rs/products/Hello
    Service Consumer RS.product
 (for consumer)
 
 ?
 
 Hope this helps.
 
 Scott
 
 
 
 
      
        
          i guess i am missing somthing please advise Ronen
 On Sun, Mar 27, 2011 at 5:30 PM, Scott
          Lewis <slewis@xxxxxxxxxxxxx> 
          wrote:
           Hi Ronen,
            
              It looks to me from the stack traces that the client cannot
            connect to the service host.  This could be because
              On 3/27/2011 6:34 AM, ronen hamias wrote:
               Hi All,
 i am trying to distribute simple hello world
                implementation
 
 when i invoke my client i get this error:
 <
 
 
 a) the service host is not exporting correctly,
 b) the client is trying to access the incorrect host/port;
 
 Basically, the client/consumer is saying that it can't reach
            the host it's trying to reach.
 
              Well, it looks to me as if you are exporting the service
            with the wrong/incorrect endpoint it.  That is, when you
            start the service host app (I assume you are starting it
            first), r-osgi will use port *9278*, but because you use
            this:
                
                my client source code looks like this:
 ----------------------------------------------------------------------------------------------------------------------------------------------------------
 package pt.hello.client;
 
 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.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;
 
 import pt.hello.IHello;
 
 /**
 * The activator class controls the plug-in life cycle
 */
 public class Activator implements BundleActivator {
 
 public static final String ROSGI_SERVICE_HOST =
                  "r-osgi://localhost:9279";
 
 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");
 }
 
 
 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();
 }
 
 }
 ----------------------------------------------------------------------------------------------------------------------------------------------------------
 my server side source code looks like this:
 ----------------------------------------------------------------------------------------------------------------------------------------------------------
 
 package pt.hello.service;
 
 
 import java.util.Properties;
 
 import
                  org.eclipse.ecf.osgi.services.distribution.IDistributionConstants;
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
 import pt.hello.IHello;
 
 public class Activator implements BundleActivator{
 private static final String containerType =
                  "ecf.r_osgi.peer";
 public static final String DEFAULT_CONTAINER_ID =
                  "r-osgi://localhost:9279";
 private String containerId = DEFAULT_CONTAINER_ID;
 private ServiceRegistration helloRegistration;
 
 /*
 * (non-Javadoc)
 * @see
org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
 */
 @Override
 public void start(BundleContext context) throws
                  Exception{
 registerHelloRemoteService(context);
 System.out.println("IHello RemoteService
                  registered");
 }
 
 void registerHelloRemoteService(BundleContext
                  context) {
 // Setup properties for remote service
                  distribution, as per OSGi 4.2
 // remote services
 // specification (chap 13 in compendium spec)
 Properties props = new Properties();
 // add OSGi service property indicated export
                  of all interfaces exposed
 // by service (wildcard)
 props.put(IDistributionConstants.SERVICE_EXPORTED_INTERFACES,
 IDistributionConstants.SERVICE_EXPORTED_INTERFACES_WILDCARD);
 // add OSGi service property specifying config
 props.put(IDistributionConstants.SERVICE_EXPORTED_CONFIGS,
 containerType);
 // add ECF service property specifying
                  container factory args
 props.put(
 IDistributionConstants.SERVICE_EXPORTED_CONTAINER_FACTORY_ARGUMENTS,
 containerId);
 // register remote service
 helloRegistration = context.registerService(
 IHello.class.getName(), new
                  HelloImpl(), props);
 // tell everyone
 System.out.println("Host: Hello Service
                  Registered");
 }
 
 void unregisterHelloRemoteService() {
 if (helloRegistration != null) {
 helloRegistration.unregister();
 helloRegistration = null;
 }
 // tell everyone
 System.out.println("Host: Hello Remote Service
                  Unregistered");
 }
 
 /*
 * (non-Javadoc)
 * @see
org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
 */
 @Override
 public void stop(BundleContext context) throws
                  Exception{}
 }
 
 i guess i am missing somthing... can someone direct me
                  what i am doing wrong?
 
 The endpoint will be exported with endpoint id =
            "r-osgi://localhost:9279".   And when the client attempts to
            connect to r-osgi://localhost:9279 it fails (because the
            service host is listening on 9278).
 public static final String DEFAULT_CONTAINER_ID =
              "r-osgi://localhost:9279";
 
 
 
 It is possible to tell the r-osgi provider to use a specific
            port (e.g. 9279)...but because r-osgi existed prior to ECF's
            usage as a remote services provider this is done via system
            properties.  These r-OSGi-specific properties are described
            here
 
 http://wiki.eclipse.org/R-OSGi_Properties
 
 Hope this helps.
 
 Incidently...why are you using the OSGi remote services on
            the host, but not on the client?  You can do this, but it
            makes the client more complicated (i.e. the need for all the
            code that uses the ECF remote services API directly...e.g.
            containerAdapter.getRemoteReferences(...), etc).
 
 Scott
 
 
 _______________________________________________
 ecf-dev mailing list
 ecf-dev@xxxxxxxxxxx
 https://dev.eclipse.org/mailman/listinfo/ecf-dev
 
        --  
        Ronen Hamias 
        Cell Phone: +972-50-2289988
       
_______________________________________________
ecf-dev mailing list
ecf-dev@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/ecf-dev 
 |