Hi Leute,
habe ein Problem bezüglich RMI und serialisierbaren Objekten, bei dem ich eure Hilfe brauche
Also so wie ich das verstehe, kann man jedes Objekt serialisieren, indem man java.io.Serializable implementiert, seh ich das richtig? Denn komischerweiße bekomme ich eine Unserializable Exception. Ich habe hier eine kleine Verwaltungssoftware von Pizzenbestellungen.
DatabaseImpl wird per rmi über die Klasse Listener aufgerufen (also Listener ist praktisch der Client, welcher sich das Objekt über Naming.lookup holt und dann auf die Funktionen von DatabaseImpl zugreift).
Diese Klasse hat Funktionen, die entweder null oder Result liefern. Result ist eine von mit generierte Klasse:
und hier noch der "Server"
Ok und ich bekomme folgende Fehlermeldung:
Ich komme wirklich nichtmehr weiter .. anscheinend ist das Problem ja, dass Result bzw. das Attribut ResultSet nicht serialisiert werden kann, oder liege ich hier falsch?
Ich danke euch für eure Zeit, die ihr investiert, um das hier mal alles zu lesen und mir zu helfen
habe ein Problem bezüglich RMI und serialisierbaren Objekten, bei dem ich eure Hilfe brauche
Also so wie ich das verstehe, kann man jedes Objekt serialisieren, indem man java.io.Serializable implementiert, seh ich das richtig? Denn komischerweiße bekomme ich eine Unserializable Exception. Ich habe hier eine kleine Verwaltungssoftware von Pizzenbestellungen.
Java:
public interface Database extends Remote{
public void Execute_Query(String sql) throws RemoteException;
public Result Execute_Select(String sql) throws RemoteException;
public Result Execute_Update(String sql) throws RemoteException;
public void initialize() throws RemoteException;
//public void update() throws RemoteException;
}
Java:
public class DatabaseImpl extends UnicastRemoteObject implements Database{
protected DatabaseImpl() throws RemoteException {
super();
initialize();
// TODO Auto-generated constructor stub
}
private static final long serialVersionUID = 1L;
private Connection connection = null;
@Override
public void Execute_Query(String sql) throws RemoteException {
// TODO Auto-generated method stub
Statement sqlAnw;
try{
sqlAnw = connection.createStatement();
sqlAnw.executeQuery(sql);
}catch(SQLException e){
e.printStackTrace();
}
}
@Override
public Result Execute_Select(String sql) throws RemoteException {
// TODO Auto-generated method stub
Statement sqlAnw;
ResultSet rs;
try{
sqlAnw = connection.createStatement();
rs = sqlAnw.executeQuery(sql);
return new Result(rs);
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
@Override
public Result Execute_Update(String sql) throws RemoteException {
// TODO Auto-generated method stub
Statement sqlAnw;
ResultSet rs;
try{
sqlAnw = connection.createStatement();
sqlAnw.executeUpdate(sql,1);
rs = sqlAnw.getGeneratedKeys();
return new Result(rs);
}catch(SQLException e){
e.printStackTrace();
}
return null;
}
public void initialize(){
try {
Class.forName("org.postgresql.Driver").newInstance();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InstantiationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IllegalAccessException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
connection = DriverManager
.getConnection("jdbc:postgresql://127.0.0.1/Pizzaverwaltung",
"postgres", "...");
System.out.println("Connection established");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
DatabaseImpl wird per rmi über die Klasse Listener aufgerufen (also Listener ist praktisch der Client, welcher sich das Objekt über Naming.lookup holt und dann auf die Funktionen von DatabaseImpl zugreift).
Diese Klasse hat Funktionen, die entweder null oder Result liefern. Result ist eine von mit generierte Klasse:
Java:
public class Result implements Serializable{
private static final long serialVersionUID = 1L;
//Attribute
private ResultSet result = null;
public ResultSet getResult() {
return result;
}
public Result(ResultSet result) {
this.result = result;
}
public void setResult(ResultSet result) {
this.result = result;
}
}
und hier noch der "Server"
Java:
public class DatabaseReg {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DatabaseImpl dataimpl = null;
try {
dataimpl = new DatabaseImpl();
Naming.rebind("User", dataimpl);
System.out.println("User registriert");
} catch (RemoteException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
Ok und ich bekomme folgende Fehlermeldung:
Code:
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.postgresql.jdbc3.Jdbc3ResultSet
at sun.rmi.server.UnicastRef.invoke(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
at $Proxy0.Execute_Select(Unknown Source)
at Listener.action_anzeigen_aendern(Listener.java:132)
at Pizza_Panel_Anzeigen$1.actionPerformed(Pizza_Panel_Anzeigen.java:65)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: org.postgresql.jdbc3.Jdbc3ResultSet
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at sun.rmi.server.UnicastRef.unmarshalValue(Unknown Source)
... 31 more
Caused by: java.io.NotSerializableException: org.postgresql.jdbc3.Jdbc3ResultSet
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source)
at java.io.ObjectOutputStream.writeSerialData(Unknown Source)
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at sun.rmi.server.UnicastRef.marshalValue(Unknown Source)
at sun.rmi.server.UnicastServerRef.dispatch(Unknown Source)
at sun.rmi.transport.Transport$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(Unknown Source)
at sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at Listener.action_anzeigen_aendern(Listener.java:140)
at Pizza_Panel_Anzeigen$1.actionPerformed(Pizza_Panel_Anzeigen.java:65)
at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)
Ich komme wirklich nichtmehr weiter .. anscheinend ist das Problem ja, dass Result bzw. das Attribut ResultSet nicht serialisiert werden kann, oder liege ich hier falsch?
Ich danke euch für eure Zeit, die ihr investiert, um das hier mal alles zu lesen und mir zu helfen
Zuletzt bearbeitet: