Conexão com RMI

16 respostas
S

estou utilizando a mesma aplicação em computadores.. onde uma aplicação eh o servidor e irá fazer a conexão com o banco localhost..
outro pc irá fazer toda parte te conexão la no servidor...

meu codigo:
public class Conexao implements Serializable {

   // private static Connection conn1;
    private static String driver;
    private static String url;
    private static String user;
    private static String password;


    public static Connection getConnection()
    {
        Connection conn1 = null;

        try {
            // Informa qual o driver jdbc
            Class.forName("org.postgresql.Driver");

            // Cria uma conexão com o banco de dados
            conn1 = DriverManager.getConnection
       ("jdbc:postgresql://189.65.192.168:5432/pfc","postgres","jhonatan");
        }
        catch (Exception e)
        {
            System.out.println("Ocorreu um erro no metodo Util.getConexao(): " + e.getMessage());
        }






        return(conn1);}
    }
public class Servidor {
	 public Servidor(DomainObject domainObject) {
		         try {
		             IFachada fachada = new Fachada(domainObject);
		             Naming.rebind("rmi://189.65.192.168:1099/ServicesServer", fachada);
		         }
		         catch( Exception e ) {
		             System.out.println( "Trouble: " + e );
		         }
		     }

		     public static void main(String[] args) {
		    	 System.out.println("Servidro de inciado!!!");
		        // new Servidor(domainObject);
		    }  
}
o lookup da outra maquina:
public class ConectorRemoto {
public static IFachada getFachada()throws MalformedURLException, RemoteException, NotBoundException{

    IFachada fachada = (IFachada) Naming.lookup( "rmi://localhost/ServicesServer" );
    return fachada;

mais quando rodo a aplicação da nullpointerexception... nem faz a conexão com o banco

16 Respostas

L

Primeiro de tudo nunca irá conectar com o banco, já que eu não vejo niguém instanciando a classe Conexão.

Segundo a sua classe Servidor não esta servindo de nada com o trecho // new Servidor(domainObject); comentado, fora que a mensagem de conexão com sucesso deve estar depois hehe

Terceiro, você iniciou o rmiregistry?

Quarto, você criou o Stub?

Quinto, onde em qual parte da aplicação esta ocorrendo o NullPointer???

Até mais.

Obs: O que uma classe chamada Fachada esta fazendo como serviço remoto e recebendo um objeto de dominio? Explique isso.

S

Minha Fachada, la do controle, faz todas as chamadas dos metodos e validações... instanciando os daos..
O DomainObject é um entidade onde todas minhas classes por exemplo, ocorrencia,veiculo, cliente etc... herdam dessa classe DomainObject...

Na minha maquina que será o servidor eu criei o stub da Fachada.... inicicei o RMIregistry

Quando rodo a aplicação localhost a camada de persistencia funciona normal... agora colocando o ip de outra maquina ele da nullpointerexception nesse codigo:

ele carrega uma combobox

public List Combo(DomainObject domainObject) throws RemoteException {
    List<Ocorrencia> strList = new ArrayList<Ocorrencia>();
    try {


//VEJA AKI INSTANCIANDO A CLASSE DE CONEXÃO
    Connection conn = Conexao.getConnection();

    String sql = null;
    sql = "select idtiposervico,nomeservico from tiposervico ";

    PreparedStatement pst = conn.prepareStatement(sql);

    ResultSet rs = pst.executeQuery();

    while (rs.next()) {
    Ocorrencia ocorrencia = new Ocorrencia();
    Servicos servico = new Servicos();
    TipoServico tipo = new TipoServico();

    tipo.setIdServico(rs.getInt("idtiposervico"));
    tipo.setDescricaoServico(rs.getString("nomeservico"));


    servico.setTiposervico(tipo);


    ocorrencia.setServicos(servico);



    strList.add(ocorrencia);




    }

    pst.close();
    rs.close();


    } catch (Exception e) {

    e.printStackTrace();
    JOptionPane.showMessageDialog(null, e.getMessage());

    }



    return strList;
    }
L

A sua classe Conector Remoto não esta com o ip da outra maquina.

Pode mostrar a linha do NullPointer?

S
PreparedStatement pst = conn.prepareStatement(sql);

Estou com os 2 pcs aki do meu lado.. o que esta acessando o meu banco de dados que é o servidor da erro na linha acima...

no meu lookup eu fiz assim:

public class ConectorRemoto {public static IFachada getFachada()throws MalformedURLException, RemoteException, NotBoundException{

    IFachada fachada = (IFachada) Naming.lookup( "rmi://169.254.48.173/ServicesServer" );
    return fachada;}}

coloquei o ip da maquina dele... rodei o meu servidor

coloquei no lookup da outra maquina o meu ip e rodei no outro pc a visão para um cadastro... e da o nullpointer citado acima

L

O objeto sql e o conn foram instanciados ou estão nulos?

Debuga quando chegar na linha, só coloque o mouse em cima da palavra que vc logo vai notar a cagada.

S

ele eh um objecto que criei

Connection conn = Conexao.getConnection();

quando debuguei o conn fiik null.

e dps ele nem passa pelo sql… cai direto no catch… sera que o problema esta na conexão com o banco de um pc para o outro?

L
# public static Connection getConnection()  
#     {  
#         Connection conn1 = null;  
#   
#         try {  
#             // Informa qual o driver jdbc  
#             Class.forName("org.postgresql.Driver");  
#   
#             // Cria uma conexão com o banco de dados  
#             conn1 = DriverManager.getConnection  
#        ("jdbc:postgresql://189.65.192.168:5432/pfc","postgres","jhonatan");  
#         }  
#         catch (Exception e)  
#         {  
#             System.out.println("Ocorreu um erro no metodo Util.getConexao(): " + e.getMessage());  
#         }

Poe um BreakPoint no catch acima e veja a exceção que esta lançando, e mais uma coisa, você não esta tratando a exceção aí acima, se uma exceção ocorre e a sua aplicação não pode prosseguir você deve lançar um RuntimeException, okk???

Falow

S

cara fiz o debug na classe de conexão… a zica esta la na conexão… ele não passa por essa linha

("jdbc:postgresql://189.65.192.168:5432:5432/pfc","postgres","jhonatan");
L

Uh,mas você não fez o que eu pedi… qual a mensagem do problema filho?

S

bom rsrs como faço um runtimeException?

eu fiz um printStackTrace pra exibir o erro… mais ele fik null

L

# catch (Exception e)

# {

# System.out.println("Ocorreu um erro no metodo Util.getConexao(): " + e.getMessage()); // Poe um BreakPoint nessa linha e me diz o que o e.getMessage() fala

# }

O Runtime é assim

# catch (Exception e)

# {

# new RuntimeException(“Puta que o pariu fudeu de vezz”, e); // Nunca esqueça de passar o e, se não você perderá o Stack Trace do erro inicial

# }

Falow

S

Debuguei e o “e” diz que a tentiva de conexão falhou.

Usando RMI, tem que fazer alguma outra configuração?

L

Então Megafit, o problema não tem nada a ver com o RMI, o problema de conexão você pode perguntar pra Cláudia que ela vai te passar tudo certo, ou tenta pegar um tutorial JDBC com conexão com o POSTGRE.

S

Então alemão… mais pq fazendo localhost ele funfa?

L

Novamente, isto não tem nada a ver com o RMI, por um acaso você tem o banco instalado e acessivel aqui 89.65.192.168:5432:5432 , com as configurações corretas?

K

nossa… vô ??? será?? rss bom vamos tentar… deixa eu olhar dinovu…

Criado 14 de novembro de 2009
Ultima resposta 14 de nov. de 2009
Respostas 16
Participantes 3