Oi, estou precisando fazer com que meu servidor de RMI atenda ao acesso concorrente das máquinas clientes pois, da forma que está ele só atende uma requisição por vez mas, quando chegam duas simultaneamente ele descarta uma e gera uma exceção.
Alguma idéia sobre como posso fazer? Como posso implementá-lo?
Uma vez implementei um servidor usando Threads mas, estava trabalhado com Sockets, daí eu abria uma nova thread para cada conexão, mas, com o servidor de RMI não estou conseguindo!
Segue o codigo que estou usando.
P.S: Não tem com o eu postar (toda) as classes cliente e servidora pois são muito grandes (tem muitos métodos implementados) mas, vou colocar
a chamada de um deles por exemplo.
//Esta é a chamada na classe CLIENTE
Dados d1;
String nomePonto;
try
{
nomePonto = d1.consultaPontoAtend("Select nome_ponto from ponto_atendimento where codigo_pa = '" + c1.getText() + "' and loja = '" + c6.getText() + "'");
}
catch (Exception erro)
{
System.out.println(erro);
}
import java.rmi.*;
import java.util.*;
public interface Dados extends Remote
{
String consultaPontoAtend(String comandoSQL) throws RemoteException;
}
import java.rmi.*;
import java.rmi.server.*;
import java.util.*;
public class DadosImpl extends UnicastRemoteObject
implements Dados
{
BancoDados base;//esta classe eu criei para fazer o acesso ao meu banco de dados
base = new BancoDados();
base.defineDriver("org.gjt.mm.mysql.Driver");
base.defineEndereco("jdbc:mysql://localhost:3306/BD");
base.defineUsuario("host");
base.defineSenha("");
public String consultaPontoAtend(String comandoSQL) throws RemoteException
{
base.abreConexao();
base.executaConsulta(comandoSQL);
String s = "";
if (base.proximoRegistro())
{
s = base.retornaString("nome_ponto");
}
base.fechaConexao();
return(s);
}
}
E este é o código do servidor:
import java.rmi.*;
import java.rmi.server.*;
public class Servidor
{
public static void main(String[] args)
{
try
{
// Nome pelo qual o serviço será posteriormente localizado
String nomeServico = "TESTE";
// Cria objeto servidor
DadosImpl d1 = new DadosImpl();
// Registra a ligação nome-objeto servidor no rmiregistry
Naming.rebind(nomeServico, d1);
// Servidor preparado para receber solicitações de clientes
System.out.println("-------------------- Servidor RMI vs-1.0 - Lucra LTDA --------------------");
System.out.println("* Conectado!");
System.out.println("* Status: Esperando ...\n");
}
catch (Exception erro)
{
System.out.println(erro);
}
}
}
Agradeço toda e qualquer ajuda!