Создание брокера объектов с использованием RMI - PullRequest
0 голосов
/ 04 мая 2019

Я строю объектный брокер, используя Java RMI.Внешние серверы могут зарегистрироваться в нем, а после этого они также могут зарегистрировать свои сервисы.

Также есть клиентская программа, которая запрашивает выполнение зарегистрированных методов.Эти методы имеют разные имена, разные параметры, разные типы параметров и разные возвращаемые типы.Это метод, который клиенты могут выполнять:

public String ejecutar_servicio(String nom_servicio, Vector<String> parametros_servicio) throws RemoteException{
    try {
        for(Servidor servidor : servidores){
            for(Servicio servicio : servidor.getServicios){
                if(servicio.getNombre().equals(nom_servicio) && parametros_servicio.size() == servicio.numParametros()){
                    servidor.getNombreRegistrado() server = (servidor.getNombreRegistrado()) Naming.lookup("//" + servidor.getHostname() + "/" + servidor.getNombreRegistrado());
                    return server.nom_servicio(parametros_servicio);
                }
            }
        }
        return "Servicio no encontrado";
    }
    catch (SecurityException ex) {
        return ex.toString();
    }
    catch (NoSuchMethodException ex) {
        return ex.toString();
    }
}

Очевидно, что предыдущий метод не может быть использован, как сейчас.Я хотел бы знать способ достижения этого поведения, который включает в себя объявление объектов типов, которые будут известны только во время выполнения, и приведение к типам, известным только во время выполнения.

Это класс, определенный для регистрациии сохраните список серверов:

private class Servidor{
    private String hostname;
    private String nombreRegistrado;
    private List<Servicio> servicios = new ArrayList<>();

    public Servidor(String hostname, String nombreRegistrado){
        this.hostname = hostname;
        this.nombreRegistrado = nombreRegistrado;
    }

    void registrarServicio(Servicio servicio){
        servicios.add(servicio);
    }

    String getNombreRegistrado() {
        return nombreRegistrado;
    }

    List<Servicio> getServicios(){
        return servicios;
    }

    String getHostname(){
        return hostname;
    }
}

И это класс, определенный для их служб:

private class Servicio{
    private String nombreServicio;
    private Vector listaParametros;
    private String tipoRetorno;

    public Servicio(String nombreServicio, Vector<String> listaParametros, String tipoRetorno){
        this.nombreServicio = nombreServicio;
        this.listaParametros = listaParametros;
        this.tipoRetorno = tipoRetorno;
    }

    public String getNombre(){
        return this.nombreServicio;
    }

    public int numParametros(){
        return this.listaParametros.size();
    }

    public String getTipoRetorno(){
        return this.tipoRetorno;
    }
}
...