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,
            
              
              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: 
                < 
               
              
             
            It looks to me from the stack traces that the client cannot
            connect to the service host.  This could be because 
             
            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.
            
              
                
                 
                  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? 
                 
                
               
             
            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:
             
               
                public static final String DEFAULT_CONTAINER_ID =
              "r-osgi://localhost:9279"; 
               
             
            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). 
             
            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
     
     
  
 |