1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

RMI Problem

  • WorstCase
  • 6. Juli 2011 um 11:37
  • Unerledigt
  • WorstCase
    6
    WorstCase
    Mitglied
    Reaktionen
    18
    Punkte
    373
    Beiträge
    59
    • 6. Juli 2011 um 11:37
    • #1

    Hallo, ich habe da ein Problem wenn ich versuche meine Interface Implementierung zu binden. Der Server wirft mir dann folgende Exception:

    Code
    java.rmi.MarshalException: error marshalling arguments; nested exception is:      java.io.NotSerializableException: java.util.concurrent.ThreadPoolExecutor

    Kann sich jemand vorstellen warum das bei einer java.util Klasse passiert?
    Schließlich liegt diese Klasse werder in meiner server.codebase, in der ich nur eine .jar mit zwei Interfaces liegen habe, noch in der Datei, die ich mit dem policy file am server freigebe (diese beinhaltet die .class Dateien der Implementierungen der beiden Interfaces).
    Die Interfaces selbst verwenden aber schon noch andere, eigene Klassen. Ist das der Grund für meine Probleme?

    MfG

    das - ist - das - haus - vom - ni - ko - laus

  • Paulchen
    1
    Paulchen
    Gast
    • 6. Juli 2011 um 11:59
    • #2

    Das Marshalling ist ja dazu da, die Daten, die über's Netzwerk übertragen werden sollen, in eine Form zu bringen, die über's Netzwerk transferiert werden kann. Dazu bedient sich RMI des Mechanismus der Serialisierung. Jedes Objekt, das übertragen werden soll, muss dazu serialisierbar sein (das Interface Serializable implementieren), dazu zählen auch die Instanzvariablen eines solchen Objekts. Die Meldung klingt jetzt so als würdest du ein Objekt übertragen wollen, in dem du ein Feld vom Typ ThreadPoolExecutor hast, und der ist nicht serialisierbar. Du kannst versuchen, den ThreadPoolExecutor in einer anderen Klasse unterzubringen, oder ihn mit dem Schlüsselwort "transient" zu markieren, dann wird er nicht serialisiert, musst aber darauf gefasst sein, dass du ihn auf der Gegenseite nicht zur Verfügung hast.

    Wenn du Remote-Objekte übergibst, musst du weiters darauf achten, dass die alle exportiert sind.

  • WorstCase
    6
    WorstCase
    Mitglied
    Reaktionen
    18
    Punkte
    373
    Beiträge
    59
    • 6. Juli 2011 um 12:32
    • #3

    Vielen Dank!
    Das Problem war, dass ich Idiot weder von UnicastRemoteObject abgeleitet, noch manuell exportObject aufgerufen habe.
    Dein letzter Satz hat das Desaster also genau beschrieben :winking_face:

    das - ist - das - haus - vom - ni - ko - laus

  • Maximilian Rupp 27. Dezember 2024 um 00:26

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung