Erro ao retornar ResultSet

Ola !

Estou com o seguinte problema:
Tenho uma consulta SQL, que é feita em uma classe que
fica no servidor (estou utilizando RMI).
Estou chamando um método desta classe, que retorna
um java.sql.ResultSet.
Porém, quando chamo este método, ele consegue fazer
a consulta no BD, mas quando retorna na classe cliente
esta apresentando os erros abaixo (fiz o teste com String,
ai ele retorna corretamente, tem alguma coisa errado no ResutSet):

java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:164)
at CLocadoraImpl_Stub.pesquisarCliente(Unknown Source)
at ClPesquisaGeral$ClickButton.actionPerformed(ClPesquisaGeral.java:133)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1590)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:140)
at java.awt.Dialog.show(Dialog.java:538)
at ClPesquisaGeral.<init>(ClPesquisaGeral.java:119)
at ClCliente$ClickButton.actionPerformed(ClCliente.java:158)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1764)
at javax.swing.AbstractButton$ForwardActionEvents.actionPerformed(AbstractButton.java:1817)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:419)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:257)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:245)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at javax.swing.plaf.basic.BasicInternalFrameUI$GlassPaneDispatcher.retargetMouseEvent(BasicInternalFrameUI.java:1407)
at javax.swing.plaf.basic.BasicInternalFrameUI$GlassPaneDispatcher.forwardMouseEvent(BasicInternalFrameUI.java:1343)
at javax.swing.plaf.basic.BasicInternalFrameUI$GlassPaneDispatcher.mouseReleased(BasicInternalFrameUI.java:1273)
at java.awt.Component.processMouseEvent(Component.java:5134)
at java.awt.Component.processEvent(Component.java:4931)
at java.awt.Container.processEvent(Container.java:1566)
at java.awt.Component.dispatchEventImpl(Component.java:3639)
at java.awt.Container.dispatchEventImpl(Container.java:1623)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:3450)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:3165)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:3095)
at java.awt.Container.dispatchEventImpl(Container.java:1609)
at java.awt.Window.dispatchEventImpl(Window.java:1590)
at java.awt.Component.dispatchEvent(Component.java:3480)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:450)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:197)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:150)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:144)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:136)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:99)
Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1278)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:324)
at sun.rmi.server.UnicastRef.unmarshalValue(UnicastRef.java:297)
at sun.rmi.server.UnicastRef.invoke(UnicastRef.java:146)
… 58 more
Caused by: java.io.NotSerializableException: sun.jdbc.odbc.JdbcOdbcResultSet
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1054)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:278)
at sun.rmi.server.UnicastRef.marshalValue(UnicastRef.java:265)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:271)
at sun.rmi.transport.Transport$1.run(Transport.java:148)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:144)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:460)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:701)
at java.lang.Thread.run(Thread.java:536)

Grato
Renato

Bom, nem sei se posso te ajudar, mas acho que seria melhor voce colocar a parte do codigo onde voce usa o resultSet para dar uma olhada…

Ola Petrucci !

// Trecho da Classe cliente:

private class ClickButton implements ActionListener
{
java.sql.ResultSet result;

public void actionPerformed( ActionEvent e )
{
if (e.getSource() == bt1) {
try {
CLocadora obj = (CLocadora) Naming.lookup("//localhost/CLocadoraServer");
result = obj.pesquisarCliente(); // DA ERRO AQUI //
}
catch (Exception xe){
xe.printStackTrace();
}
}
}
}

// Trecho da classe Server:

public ResultSet pesquisarCliente() throws RemoteException {
                conectaBanco();		
	
    Statement statement;
	ResultSet resultSet;
	resultSet = null;
	
	try {
	 String query = "SELECT * FROM cliente";
	
	 statement = connection.createStatement();
	 resultSet = statement.executeQuery( query );		 
	 
	 statement.close();
	 
	 
	 }
	 catch ( SQLException sqlex ) {
	 sqlex.printStackTrace();
	 }
	 
  return resultSet;		 
}


private void conectaBanco() throws RemoteException {		 
	 String url = "jdbc:odbc:DSN_LOCADORA";
	 String username = "renatop";
	 String password = "prenato";
	
	 // Carrega o driver para permitir conexão ao banco de dados
	 try {
	 Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
	
	 connection = DriverManager.getConnection(
	 url, username, password );
	 }
	 catch ( ClassNotFoundException cnfex ) {
	 System.err.println(
	 "Failed to load JDBC/ODBC driver." );
	 cnfex.printStackTrace();
	 System.exit( 1 ); // termina o programa
	 }
	catch ( SQLException sqlex ) {
	 System.err.println( "Unable to connect" );
	 sqlex.printStackTrace();
	 }
}

Caso vc precisar de mais alguma informação, é só responder…

Obrigado …
Renato

Ola renatop,

Desculpe pela demora na resposta…Cara, infelizmente eu sou muito ruinzinho em java (rsrs) e nao manjo nada de RMI, mas consegui achar isso aqui no javadoc…

http://java.sun.com/j2se/1.4.2/docs/api/java/rmi/UnmarshalException.html

Logo de cara fala em que situações esse erro ocorre…

Quote do ServerSide…

UnmarshalException
’Usually this means you are attempting to transfer an object over the network that is not serializable. Check all your value objects. "

Tomara que seja de alguma ajuda…

Te +

Ae Petrucci…

Agora foi… coloquei a classe como publica implementando
serializable…

Valeu…
Renato…

Legal que vc conseguiu resolver entao…O bom é que aprendo tambem…hehe

Te +

Poxa essa eu sabia :sad:

Pena que cheguei tarde pra ajudar…

hehe… uma das poucas que sabia responder e ja resolveram…