Rmi

3 respostas
P

So mais 1 duvida… tipows eu to pegando dados de uns textfield e quero enviar pro servidor e o servidor enviar pro banco de dados.
A principio estava dando certo porem eu descobri q o proprio cliente estava enviado os dados para o banco (pelo fato q cliente e servidor ser a mesma maquina)… entao achei q o problema era a falta de stub e skeleton. Alguem pode dar 1 luz o q esta errado?

Servidor.java

package Servidor;

import java.rmi.Remote;
import java.rmi.RemoteException;
import Beans.*;

public interface Servidor extends Remote{    
	public Cadastro getCadastro() throws RemoteException;
}

ServidorImpl.java

package Servidor;

import java.rmi.registry.Registry;
import java.rmi.registry.LocateRegistry ;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.rmi.AlreadyBoundException;
import java.rmi.server.UnicastRemoteObject;
import java.io.IOException;
import Beans.*;

public class ServidorImpl implements Servidor{  
	private Cadastro cadastro;  
	public ServidorImpl() {  
		cadastro = new Cadastro();  
		inicia();  
	}     
	public Cadastro getCadastro(){  
		return cadastro;  
	}   
	public void inicia(){  
		try{        
			Servidor stub = (Servidor) UnicastRemoteObject.exportObject (this, 0);  
			Registry registry = LocateRegistry.createRegistry(7000);     
			registry.bind ("War", stub);  
			
			System.out.println ("Servidor iniciado");   
			}catch(RemoteException Re){      
				System.out.println(Re.getMessage());  
			}catch(AlreadyBoundException ABe){   
				System.out.println(ABe.getMessage());  
			}catch(IOException IOe){    
				System.out.println(IOe.getMessage());  
			}   
		} 
	public static void main(String[] args) {
		try {
			 new ServidorImpl();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

Cliente.java

package mCliente;

import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;
import java.rmi.RemoteException;
import java.rmi.NotBoundException; 
import javax.swing.*;
import Beans.*;
import Servidor.*;

public class Cliente {  
Registry registry;
Servidor stub;
boolean status;

	public Cliente() {
		status = false;
	}  
	
	public boolean runConexao(){
		try{          
			registry = LocateRegistry.getRegistry("localhost", 7000);  
			stub = (Servidor) registry.lookup ("War"); 
			status = true;
		}catch(RemoteException Re){  
			JOptionPane.showMessageDialog(null,Re.getMessage(),"ERROR!!",0);  
		}catch(NotBoundException NBe){   
			JOptionPane.showMessageDialog(null,NBe.getMessage(),"ERROR!!",0); 
		} 
		return status;
	}
	
	public void bdInsereDados(String nome, String nick, String email, String login, String senha, String cidade, String uf){
		try{
			Cadastro cadastro;
			cadastro = stub.getCadastro();
			cadastro.Cadastrar(nome, nick, email, login, senha, cidade, uf);
		}catch (RemoteException e){
			JOptionPane.showMessageDialog(null,"Erro ao enviar os dados!","ERROR!!",0);
		}
	}
}

O metodo q deveria enviar os dados para o servidor eh o bdInsereDados.

Obs: No caso cliente e servidor sao programas diferentes e estao em projetos diferentes!

3 Respostas

J

Quem tem que chamar o metodo cadastrar é o servidor, não o cliente. E crie um objeto pra representar esses dados, a gente não trabalha com dados soltos em orientação a objetos.

P

a ideia eh a seguinte… la no programa cliente tem 1 formulario… quando o usuario clicar no botao cadastrar o cliente envia pro servidor… como vo chamar o metodo cadastrar no servidor se o evento eh disparado no programa cliente?

P

velho vlw muitooo conseguir enviar as info pro servidor…
olhas as modificacoes q eu fiz ve se ta realmente certo:

Inseri 1 metodo no ServidorImpl.java

public void bdInsereDados(String nome, String nick, String email, String login, String senha, String cidade, String uf){
		try{
			cadastro.Cadastrar(nome, nick, email, login, senha, cidade, uf);
		}catch (Exception e){
			JOptionPane.showMessageDialog(null,"Erro ao enviar os dados!","ERROR!!",0);
		}
	}

e o metodo insere do cliente ficou assim:

public void bdInsereDados(String nome, String nick, String email, String login, String senha, String cidade, String uf){
		try{
			stub.bdInsereDados(nome, nick, email, login, senha, cidade, uf);
		}catch (RemoteException e){
			JOptionPane.showMessageDialog(null,"Erro ao enviar os dados!","ERROR!!",0);
		}
	}

Meu problema eh q direto ta dando o seguinte error:
Connection refused to host: localhost; nested exception is:
java.net.ConnectException: Connection refused: connect

Ve ae se pode me ajudar… Eu quero tipows implementar o servidor e cliente… porem a cada implementacao do servidor preciso fechar o q eu rodei anteriormente e rodar 1 novo… achoq estou com + de 1 servidor na mesma porta por isso ta dando refuse porem n to sabendo como fecha-los, as vezes funciona as vezes n funciona… nem reiniciando ta funcionando. VLW!

Criado 27 de outubro de 2006
Ultima resposta 27 de out. de 2006
Respostas 3
Participantes 2