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:
[code]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.");
}
}[/code]
E esse é o do cliente:
[code]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());
}
}
}[/code]
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?