rmi ssl zu große Objekte übergeben -> Exception

Status
Nicht offen für weitere Antworten.

Tallan

Bekanntes Mitglied
Hallo zusammen,

ich rufe per Server aus der DB ein longblob Feld mit 160 MB ab, dieses wird in einem bytearray gespeichert (dafür wurde die heapgröße der vom mittels -mx1024M erhöt).
Nun möchte ich dieses Objekt per RMI als Parameter übergeben.
Leider kommt es dabei zu folgender Fehlermeldung :

java.rmi.MarshalException: error marshalling arguments; nested exception is:
javax.net.ssl.SSLException: Connection has been shutdown: javax.net.ssl.SSLException: java.net.SocketException: Connection reset by peer: socket write error
....

Mit kleineren Datenmengen ( ein paar MB ) geht das ganze ohne Probleme.
Der Fehler tritt auf der Serverseite auf wenn der Server versucht dem Client die Daten als Parameter zu übergeben.

Den Heapspace auf der Clientseite habe ich ebenfalls auf 1024M gesetzt das sollte also kein Porblem sein.
Es sieht für mich so aus als würde die SSL verbindung wegen der zu Großen Datenmenge getrennt werden?!?

Hat jemand diesbezüglich eine Idee?
 
T

tuxedo

Gast
Ja, wie wär's mit "nicht alles auf einmal lesen"...
An solche Blobs kommt man auch via Stream und kann häppchenweise lesen und somit auch häppchenweise mit RMI übertragen.

btw: Sofern SSL nicht die Fehlerursache ist, müsste selbiges Szenario mit Simon funktionieren :)
 

Tallan

Bekanntes Mitglied
Ja, wie wär's mit "nicht alles auf einmal lesen"...
An solche Blobs kommt man auch via Stream und kann häppchenweise lesen und somit auch häppchenweise mit RMI übertragen.

btw: Sofern SSL nicht die Fehlerursache ist, müsste selbiges Szenario mit Simon funktionieren :)


daran hab ich auch schon gedacht allerdings ist mir dabei eine effektive umsetzung noch nicht ganz klar

Das ganze ist so angelegt das der Server die Daten aus der DB ausließt diese Prozess läuft in einem Thread welcher dann auf dem client eine Methode aufruft um sie zu übergeben, hierfür wird auf clientseite auch ein thread gestartet um die daten zu erhalten und verarbeiten.

Daher müssten bei einer häbchenweisen übergabe die Daten von thread an thread gesendet werden, geht das so einfach überhaupt?
 
S

SlaterB

Gast
ob man bei RMI überhaupt einen Stream übertragen kann ist schon ne interessante Frage,

auf jeden gehen müsste, die große Datei in 10 kleine zu übertragen und die beim Client zu sammeln + gegebenenfalls wieder zusammenzufügen,
oder falls die Daten Stream-artig verarbeitet werden:
1/10 der Datei vom Server laden, in einen Stream speisen,
falls dieser ausgelesen ist zweites Zehntel nachladen, wieder im Stream verfügbar machen usw.
 
T

tuxedo

Gast
RMI kann keine Streams. Deshalb auch der Vorschlag den Blob auf Serverseite als Stream anzuzapfen (statt komplett auf einmal alles zu lesen) und dann häppchenweise vom Stream lesen und diese Häppchen mit je einem Methodenaufruf zum Client zu schicken.

- Alex
 
T

tuxedo

Gast
Naja, ohne den RMIIO Code gesehen zu haben: Die Deckeln das häppchenweise übertragen einfach. RMI an sich ist nach wie vor nicht im Stande zu streamen.

- Alex
 

Tallan

Bekanntes Mitglied
Naja, ohne den RMIIO Code gesehen zu haben: Die Deckeln das häppchenweise übertragen einfach. RMI an sich ist nach wie vor nicht im Stande zu streamen.

- Alex

aber das wird doch sowieso in packeten übertragen und nicht an einem stück und die array größe selbst ist ja soweit auch ok da sowohl client als auch server damit umgehen können, es hängt eben nur an der übertragung
 
T

tuxedo

Gast
Wie groß ist denn das Array? Ich bin mir sicher du kannst 100Gbyte in 8192byte Päckchen mit RMI über SSL übertragen ....

Ob aber ein beliebig großes Array, welches auf Client oder auch Serverseite in den Heap passt am Stück übertragen werden kann weiß ich nicht.

Nebenbei: RMI ist nicht für große Datenübertragung gedacht/gemacht. Da ist zu viel Reflection und Proxy-technik drin als dass das wirklich super-performant läuft.
Simon hat hierfür die "RawChannels". Da hat man nur den Protokoll-Overhead (glaub es waren/sind 9bytes pro Paket beliebiger Größe) und kein Reflection und Proxy mit involviert :)
 
S

SlaterB

Gast
wieviel Reflection ist denn bei einem einzigen byte-Array von 8 KB oder auch 8 MB wenn RMI das selber zerlegen kann?

große Datenmengen aus einzeln modellierten Objekten, das ist natürlich Arbeit, ob mit RMI oder sonstwen,
aber wenn es nur ein Objekt ist, ist dann ein riesiges Array nicht genauso aufwändig wie ein kleines String-Objekt,
von der Übertragungsmenge abgesehen?
 
T

tuxedo

Gast
Reflection hat ja nix mit zerlegung oder der Art von Parametern zu tun. Bei RMI werden Methoden per Reflection und Proxys gesucht, gefunden und ausgeführt. Das kostet unnötig Zeit, auch wenn man primitive Übertragen will.

Das was du meinst ist die Serialisierung. Bei primitiven wird da kein Object*Stream bemüht sondern wie bei Data*Stream direkt von und nach byte gewandelt. Das ist natürlich deutlich schneller. Aber der Methodenaufruf mit Reflection und Proxy findet nach wie vor statt. Und genau das kann SIMON mit seinen RawChannels besser.

- Alex
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
staxx6 Mehr/ kleine oder Weniger/ große Pakete? Netzwerkprogrammierung 8
G Alternative Rückgabe große ArrayList Netzwerkprogrammierung 2
Iron Monkey Große Daten ins Vector füllen Netzwerkprogrammierung 4
T JSON-Objekte richtig parsen Netzwerkprogrammierung 8
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
A RMI RMI - Thread Objekte übertragen und auf anderer Machine weiterlaufen lassen Netzwerkprogrammierung 0
C List Deserialisierung entfernt Objekte Netzwerkprogrammierung 2
F HTTP Serialisierte Objekte aus Datei von Server Netzwerkprogrammierung 1
H Socket Objekte über Socket? Allgemeine Verständnisprobleme in Sachen Socket Netzwerkprogrammierung 3
V Socket Objekte werden nicht aktualisiert Netzwerkprogrammierung 2
S Socket Über UDP Objekte verschicken Netzwerkprogrammierung 9
B Eigene Objekte per RMI übergeben Netzwerkprogrammierung 2
S Kapselung der Netz-Objekte Netzwerkprogrammierung 3
B verschiedene Serialisierte Objekte identifizieren? Netzwerkprogrammierung 5
T Objekte im NIO unblocking mode versenden Netzwerkprogrammierung 11
C Socket ObjectInputStream liest nur Objekte der jeweiligen Programminstanz Netzwerkprogrammierung 5
G Frage zu Servlets und deren Objekte + Bilder in Servlets anzeigen? Netzwerkprogrammierung 11
G Objekte per TCP verschicken + Thread Netzwerkprogrammierung 4
T Laufen Objekte, die vom Cajo-Server geliefert werden, lokal auf dem Client? Netzwerkprogrammierung 4
T Inputstream -> verschiedene Objekte lesen Netzwerkprogrammierung 3
I Objekte über das Netzwerk Netzwerkprogrammierung 5
M Messenger - String oder Objekte Netzwerkprogrammierung 4
S Netzwerk und Objekte Netzwerkprogrammierung 5
S RMI 1.) Entfernte Objekte "Zwischenspeichern" 2.) Threadsicherheit Netzwerkprogrammierung 2
A Konflikt: Blocking und Non-Blocking bei Objekte versenden Netzwerkprogrammierung 4
N RMI und Datenbank Objekte Netzwerkprogrammierung 3
P Objekte über DatagramSocket versenden Netzwerkprogrammierung 12
R Mittels BufferedReader Objekte lesen? Netzwerkprogrammierung 5
M Objekte senden zwischen Java und PHP mit SOAP Netzwerkprogrammierung 9
A Objekte in übergebenen Objekten mit WebServices? Netzwerkprogrammierung 6
A RMI wie kann ich objekte übergeben? Netzwerkprogrammierung 5
P Serialialiserte Objekte übers Netzwerk verschicken Netzwerkprogrammierung 9
S Objekte zwischen Client und Server über Sockets senden Netzwerkprogrammierung 2
E Bilder übergeben Netzwerkprogrammierung 16
E Socket Werte mit DataInput- und Output- Stream übergeben Netzwerkprogrammierung 1
E Socket Parameter über Sockets übergeben und auslesen ! Netzwerkprogrammierung 5
B Daten an Javaprogramm per URI Aufruf übergeben Netzwerkprogrammierung 7
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
L HTTP Daten an Server übergeben Netzwerkprogrammierung 2
X Über eine Socket-Verbindung Arrays übergeben Netzwerkprogrammierung 5
M String an PHP Script aus Java übergeben Netzwerkprogrammierung 12
L Sockets übergeben Netzwerkprogrammierung 4
O Methoden vom Server zu Client übergeben Netzwerkprogrammierung 2
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
P Buchstaben übergeben Netzwerkprogrammierung 12
C Webservice, ArrayList übergeben Netzwerkprogrammierung 3
A Streams per RMI übergeben Netzwerkprogrammierung 6
D HTTP Request erstellen (Form Name übergeben!) Netzwerkprogrammierung 3
D wie kann ich rmic ein .jar file übergeben? Netzwerkprogrammierung 3
E In Webseite einloggen/ GET, POST an PHP-Script übergeben Netzwerkprogrammierung 2
M IP Adressen auslesen und in Windows/Linux übergeben Netzwerkprogrammierung 5

Ähnliche Java Themen


Oben