RMI - Observable

4 respostas
U

Boa tarde galera, como vai ?

Bom, estou com um pequeno problema. Tenho uma classe chamada Client, está por sua vez implementa a interface Observer.
Tenho uma interface que se chama IUser, essa por sua vez tem os métodos login, logout e addObservers.
Tenho uma classe User que implementa a interface IUser, essa por sua vez extend a classe Observable.
Quando o usuário inicia a aplicação, a mesma efetua a busca do usuário em um banco de dados para validar usuário e senha, após o usuário ser devidamente válidado a aplicação tenta registrar um Observador ( Classe Client ) para a classe ( User ) através do método addObservers, mas ocorre o seguinte erro quando tento executar:

error marshalling arguments; nested exception is:
java.io.NotSerializableException: <meu package>

Quando instancio um objeto do tipo User
User user = new User() eu consigo registrar um objeto utilizando o método addObservers.

Como poderia resolver esse probleminha ?

Muito agradecido se puderem me ajudar.

Valeus.

4 Respostas

_fs

Seu objeto possui alguma propriedade não serializável. Pode postar o código da classe onde a exceção ocorre?

U

E ai cara, como vai ?

Bom, essa é a classe que estou tentando passar como Observer.

import java.rmi.*;
import java.util.*;

public class Client implements Observer
{
   private IUser user;
   private Vector data;
   private Scanner dataIn;
   private String observerName = null;
	
   // Método construtor público
   public Client()
   {
   	try
		{
   		//this.dataIn = new Scanner( System.in );
   		//this.data = new Vector();
         this.user = ( IUser ) Naming.lookup(
       	       "rmi://localhost:1099/UserService" );
		}
      catch ( Exception e )
		{
         System.out.println( e.getMessage() );
         System.exit( 0 );
		}
      
      this.login();
      this.logout();
   }
  
   private void login()
   {
   	try
		{
   		System.out.print( "\nUser....: " ); 
         this.data.addElement( this.dataIn.nextLine() );
         
         System.out.print( "Password: " ); 
         this.data.addElement( this.dataIn.nextLine() );
   
         if ( this.user.login( String.valueOf( this.data.get( 0 ) ),
               String.valueOf( this.data.get( 1 ) ) ) )
         {
         	System.out.println( "\n+----------+" );
            System.out.println( "| Login OK |" );
            System.out.println( "+----------+" );
         }
         else
         {
         	this.data.removeAllElements();

         	System.out.println( "\n+--------------+" );
            System.out.println( "| Login Failed |" );
            System.out.println( "+--------------+" );
         	
         	this.login();
         }
		}
      catch ( Exception e )
		{
         System.out.println( "Erro: " + e.getMessage() );
		}
   }
   
   private void logout()
   {
      try
		{
      	System.out.println( "\nPressione enter para efetuar o logon" );
      	this.dataIn.nextLine();

			this.user.logout( String.valueOf( this.data.get( 0 ) ) );
		}
      catch ( Exception e )
		{
      	System.out.println( "Erro: " + e.getMessage() );
	   }
   }
   
   public void update( Observable o, Object arg )
   {
   	
   }

   // Inicia o cliente
   public static void main( String args[] )
   {
      new Client();	
   }
}[code]
[/code]
mister_m

Não examinei direito seu código, mas tente declarar o Scanner como transient.

U

Bom dia galera, tudo na paz ?

Cara era isso mesmo, mudei o Scanner para transient e depois coloquei a classe Client implementando Serializable e funcionou tudo certinho. Valeu pela ajuda.

Very thanks !! :thumbup:

Criado 25 de abril de 2005
Ultima resposta 27 de abr. de 2005
Respostas 4
Participantes 3