RMI Unserializable Exception

eQuest

Mitglied
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.

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:

eRaaaa

Top Contributor
ResultSet ist nicht mit der Markierungsschnittstelle ausgestattet(wahrshceinlich), daher kannst du dein Objekt nicht serialisieren, weil das eben auch nur andere serialisierbare Objekte beinhalten kann oder explizit durch transient gekennzeichnet wird, dass dieses nicht serialisiert werden soll, was hier wohl aber wenig Sinn machen würde. Die Frage, wieso man ein ResultSet serialisiert, stell ich jetzt mal nicht, aber könntest du nicht die einzelnen Werte innerhalb des ResultSets, also die Spalten-Werte in ein Objekt speichern? Und dieses dann serialisieren?
 
Zuletzt bearbeitet:

eRaaaa

Top Contributor
Java:
public class LinkedList<E>
    extends AbstractSequentialList<E>
    implements List<E>, Deque<E>, Cloneable, java.io.Serializable
-> :toll:
 

Ice-Tea

Bekanntes Mitglied
Sehe ich das richtig, das du SQL-Anweisungen durchreichst?

Da ich keiune Schulische Ausbildung genießen konnte ( ich allerdings nen dicken Kopf habe - nicht falscht verstehn ;) ) habe ich versucht von diesem Kozept aus Sicherheitsgründen abstand zu halten.

Wenn ich von Client SQL-Anweisungen an den Server weiterreiche, ist doch eine Injection ein Kinderspiel oder sehe ich das falsch?

Nichts gegen dein Kozept, interessiert mich grade nur
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T Webserviceaufruf verursacht eine Exception Netzwerkprogrammierung 3
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
D Exception Handling bei In/Outputsockets in eigenen Threads Netzwerkprogrammierung 1
A Cast Exception bei einfachem RMI Beispiel Netzwerkprogrammierung 3
M Socket Exception tritt auf - weiß nicht weiter Netzwerkprogrammierung 3
K Socket Exception Connection reset Netzwerkprogrammierung 9
C ObjectInputReader wirft beim zweiten Aufruf eine Exception Netzwerkprogrammierung 3
M Socket TCP keep alive Exception wird nicht ausgelöst Netzwerkprogrammierung 11
G Exception: Connection reset by peer: socket write error Netzwerkprogrammierung 2
A Socket Socket Verbindung unterbrochen --> keine Exception Netzwerkprogrammierung 7
H Socket Closed Exception verhindern Netzwerkprogrammierung 3
M RMI unmarshaling exception ??? Netzwerkprogrammierung 2
D Socket Streams schliessen .. Exception gewollt? Netzwerkprogrammierung 4
K Socket Socket Exception Netzwerkprogrammierung 3
F Bekomme NoSuchElement Exception Netzwerkprogrammierung 5
S RMI Exception Netzwerkprogrammierung 2
T rmi ssl zu große Objekte übergeben -> Exception Netzwerkprogrammierung 10
clupus Exception beim Schließen eines Sockets Netzwerkprogrammierung 6
G Exception javax.naming.CommunicationException Netzwerkprogrammierung 16
G Nullpointer Exception - Multithreading Netzwerkprogrammierung 25
G XML-RPC -> Exception $Proxy0-Unknown Source-No such handl Netzwerkprogrammierung 8
T Exception serialisieren? Netzwerkprogrammierung 5
K öffnen des socket schlägt fehl -> ABER: keine exception . Netzwerkprogrammierung 2
M ois nicht null, aber ois.getObject liefer exception Netzwerkprogrammierung 3
R ObjectOutput- / ObjectInputStream Exception? Netzwerkprogrammierung 2
D EA-Exception Network Adapter macht probleme Netzwerkprogrammierung 2
F Java Mail . Exception java.lang.NoClassDefFoundError Netzwerkprogrammierung 2
M Exception in thread "main" java.lang.NoClassDefFou Netzwerkprogrammierung 2
J JavaMail Exception bei senden an anderen Server. Netzwerkprogrammierung 8
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
R LINUX: getHostAddress() und getHostName() werfen Exception Netzwerkprogrammierung 6
8 PrintWriter Exception Netzwerkprogrammierung 3
D socket exception + timing probleme Netzwerkprogrammierung 2
A Exception bei Cookie lesen Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben