Evocb

Evocb.jpg

Overview

EVO/CB is a distributed object system that is constructed on top of publish/subscribe event systems. This design decision implies modeling method calls as events and subscriptions over the underlying messaging middleware.

The current prototype is a free and open source software released under the terms of the LGPL License and written in Java.

Example

The following classes implement a simple client-server program using the Evo middleware that change a remote value.

Evo class—Defines the interface that is used by the client and implemented by the server.

import evo.ERemote;
import evo.annotation.*;
import evo.exception.*;

@RemoteInterface
public interface Evo extends ERemote {

  @RemoteMethod
  public void setValue (String value) throws RemoteException;
}

EvoImpl and EvoServer classes—Listens to Evo requests and implements the interface which is used by the client to invoke remote methods.

import evo.RemoteObject;
import evo.exception.RemoteException;

public class EvoImpl extends RemoteObject implements Evo {

  private String value = "sample";
  
  public EvoImpl() {}

  public EvoImpl (Properties env) throws RemoteException {
    super (env);
  }

  public void setValue (String value) throws RemoteException {
    this.value = value;
  }
}
import java.util.Properties;
import evo.Naming;
import evo.util.Environment;

public class EvoServer {

    public static void main(String[] args) {
        try {           
            Naming.startRegistry();         
            Properties env = Environment.getEnv ();         
            Evo server = new EvoImpl (env);         
            Naming.bind("evo://remote",server);         
            System.in.read();
                        
        }catch (Exception e) {
             e.printStackTrace();
        }   
    }
}

EvoClient class—This is the client which gets the reference (a proxy) to the remote object and invokes its method to set a value.

import evo.Naming;

public class EvoClient {

    public static void main(String[] args) throws Exception {
        
        Naming.loadRegistry();
        Evo client = (Evo) Naming.lookup("evo://remote");
        
        client.setValue("newValue");
        
        client.close();
        Naming.unloadRegistry();
    }
}

See also

  • Remote method invocation
  • Event-based systems
  • Message-oriented middleware
  • Publish/subscribe