Registro no BD com RMI

1 resposta
muniquewassem

Oi gente!

Bem, eu comecei ver RMI semana passada e preciso criar uma aplicação que receba uma mensagem do cliente e armazene em um banco de dados. Já criei o BD e as classes, além da interface, mas tenho a impressão que estou esquecendo de algo vital no meu código... bem, ele não funciona e já não tenho mais idéia do que estou fazendo errado.

Esse é o código da implementação:

import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.sql.*;


//cria a classe e extende unicastremoteobject e implementa a interface simuladorremoto
public class SimuladorImpl extends UnicastRemoteObject implements Simulador {

    //construtor e conexao com banco de dados
    public SimuladorImpl() throws RemoteException {}
        public String dbUrl = "jdbc:mysql://localhost:3306/simulador"; //endereco do bd
        public String dbDriver = "com.mysql.jdbc.Driver"; //endereco do driver
        public String dbUser = "root";
        public String dbSenha = "root";
    
    
    public void setMensagem(SimuladorInterface tentar) throws RemoteException{
        
        Connection conexao = null; //DEFININDO OBJETO DE CONEXAO COM BD.
        try{
            try {
                Class.forName(dbDriver);
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
            conexao = DriverManager.getConnection(dbUrl, dbUser, dbSenha);
            conexao.setAutoCommit(false);
            Statement stat = conexao.createStatement();
            String sql = "insert into simulacao (mensagem) values ('" + tentar.lerMensagem() + "')";
            System.out.println(sql);
            stat.executeUpdate(sql);
            conexao.commit();
            stat.close();
            conexao.close();
        } catch(SQLException e){
            try {
                conexao.rollback();
                conexao.close();
            } catch(Exception ex){
                ex.printStackTrace();
            }
        }
    }
        
    //implementa a interface
    public SimuladorInterface getMensagem(String mensagem) throws RemoteException{
        SimuladorInterface simulador = new SimuladorInterface(); //cria novo objeto simuladorinterface
        Connection conexao = null; //nova conexao
        try {
            try {
                Class.forName(dbDriver);//?
            } catch (ClassNotFoundException ex) {
                ex.printStackTrace();
            }
            conexao = DriverManager.getConnection(dbUrl, dbUser, dbSenha);
            Statement stat = conexao.createStatement();
            String sql = "SELECT * FROM simulador" + " WHERE mensagem LIKE '" + "%' ORDER BY nome";
            ResultSet resultado = stat.executeQuery(sql);

            while (resultado.next()) {
                simulador.enviarMensagem(resultado.getString(1));
            }
            resultado.close();
            stat.close();
            conexao.close();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return simulador;
    }

    @Override
    public void enviarMensagem(String msg) throws RemoteException {
        throw new UnsupportedOperationException("Not supported yet.");
    }

    @Override
    public String lerMensagem() throws RemoteException {
        throw new UnsupportedOperationException("Not supported yet.");
    }
    
}

E esse é o do cliente:

public class SimuladorInterface{
    
    
    private String mensagem;
    
    public SimuladorInterface() throws RemoteException{
    }
    
    public String lerMensagem() throws RemoteException{
        return mensagem;
    }
    
    public void enviarMensagem(String mensagem) {
        this.mensagem = mensagem;
    }
    
    public static void main(String args[]) {
        try {
            Simulador m = (Simulador) Naming.lookup("rmi://localhost/MensageiroService"); //instancia o objeto remoto
            System.out.println(m.lerMensagem()); //le mensagem chegada do servidor
            m.enviarMensagem("Hello World!"); //envia mensagem ao servidor
        } catch (MalformedURLException e) { //pega uma exceção
            System.out.println();
            System.out.println("MalformedURLException: " + e.toString());
        } catch (RemoteException e) { //pega uma exceção
            System.out.println();
            System.out.println("RemoteException: " + e.toString());
        } catch (NotBoundException e) { //pega uma exceção
            System.out.println();
            System.out.println("NotBoundException: " + e.toString());
        } catch (Exception e) { //pega uma exceção
            System.out.println();
            System.out.println("Exception: " + e.toString());
        }
    }
}

Enfim, eu estava testando 3 exemplos ao mesmo tempo e tenho certeza que acabei fazendo merda. Se preciso posto os outros códigos, mas por enquanto, alguém pode me dar uma mão com isso?

1 Resposta

C

Aparentemente vc está usando métodos não implementados…

@Override  
     public void enviarMensagem(String msg) throws RemoteException {  
         throw new UnsupportedOperationException("Not supported yet.");  
     }  
  
     @Override  
     public String lerMensagem() throws RemoteException {  
         throw new UnsupportedOperationException("Not supported yet.");  
     }

posso estar falando besteira…

Criado 9 de maio de 2011
Ultima resposta 10 de mai. de 2011
Respostas 1
Participantes 2