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

Laubstein_M_cio

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;
    }
Laubstein_M_cio

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

Laubstein_M_cio

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?

Laubstein_M_cio
# 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");
Laubstein_M_cio

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

Laubstein_M_cio

# 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?

Laubstein_M_cio

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?

Laubstein_M_cio

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?

klawdja

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