Ajuda com RMI

3 respostas
juliosampaio1988

Estamos fazendo um projeto a pedido do professor da faculdade onde temos que usar tecnologia RMI.

Estamos com ideia de uma aplicação para gerenciar uma rede locadoras.

Onde a ideia é a seguinte:

O cliente 1, chega na locadora A e pede para locar um DVD. O cliente 1 foi, anteriormente, cadastrado na locadora B, logo, a locadora A, vai requisitar as informações do cliente 1 para o servidor central. O servidor central localizará o cliente e solicitará as informações do mesmo à sua locadora de cadastro. Com as informações em mãos, o funcionário decidirá se o cliente pode ou não locar o DVD.

De acordo com essa ideia acima citada e a modelagem em anexo, qual seria a melhor forma de usar RMI?

Obs: (Seria viável trabalhar com RMI somente nos métodos de manipulação de dados, ou seja aqueles métodos que vão trabalhar com o Banco de Dados?)

Agradeço sugestões: :slight_smile:


3 Respostas

luciano2

Para trabalhar com objetos remotos para manipulação de dados no banco seu banco vai ter que estar disponivel para ser acessado da sua maquina cliente a distância, não aconselho a utlizar RMI para acessar banco. O ideal é que tenha uma interface de comunicação com os DAO´s e é bom que sua RMI utilize Socket´s SSL.

juliosampaio1988

Seria algo mais ou menos assim?

import java.io.Serializable;
import java.util.HashMap;

/**
 *  Esta interface deve ser implementada pelos DAOs das classes
 *  */
public interface Dao extends Serializable{


    public boolean insert(Object o);

    public boolean update(Object o);

    public boolean delete(Object o);

    public Object getThis(int id);

    public HashMap<String,Object> getAll();

    public HashMap<String,Object> getWhere(String field,String operator,String value);

    public HashMap<String,Object> query(String query);

}
import java.rmi.Remote;
import java.rmi.RemoteException;

/**
 *
 * Definição da Interface Remota, que executará os métodos de uma classe, que implemente a interface Dao, no servidor
 */
public interface  IDataBaseRequest extends Remote{


    public boolean executeInsert(Dao dao,Object o) throws RemoteException;

    public boolean executeUpdate(Dao dao,Object o) throws RemoteException;

    ..... outros métodos que executem as ações de um objeto que impelente Dao

}
/*
* Classe de implementação da interface remota
*/
public class DataBaseRequest extends UnicastRemoteObject implements IDataBaseRequest {

    public DataBaseRequest() throws RemoteException {
        super();
    }

    public boolean executeInsert(Dao dao, Object o) throws RemoteException;
        return dao.insert(o);
    }

    public boolean executeUpdate(Dao dao, Object o) throws RemoteException;
        return dao.update(o);
    }

    public static void main(String[] args) {
        if (System.getSecurityManager() == null) {
            System.setSecurityManager(new RMISecurityManager());
        }
        String name = "//localhost/DataBaseRequest";
        try {
            DataBaseRequest dbr = new DataBaseRequest();
            Naming.rebind(name, dbr);
            System.out.println("ok");
        } catch (Exception e) {
            System.err.println("erro" + e.getMessage());
            e.printStackTrace();
        }
    }
}

Muito obrigado por estar ajudando!!
Agradeço mais sugestões!

juliosampaio1988

:? Alguém mais pode ajudar?? :lol:

Criado 12 de junho de 2010
Ultima resposta 13 de jun. de 2010
Respostas 3
Participantes 2