Zum Inhalt springen

Übertragen von Java-Objekten


blubbla

Empfohlene Beiträge

Ja, die wichtigsten Anforderungen (heterogene, legacy Komponenten mit verschiedenen Ressourcen innerhalb einer globalen Transaktion ansprechen unter Verwendung eines Transaktionsmanagers) habe ich schon ganz gut lösen können. Man braucht dazu wirklich eigene, 2PC-fähige JTA-Komponenten, die gewissermaßen als Proxy für legacy Komponenten dienen. Aber das hört sich wilder an, als es ist, und läuft auch ganz stabil. Ohne die JavaEE Standard-Technologien wäre es glaub ich nicht gegangen - so einen Transaktionsmanager kann man nicht eben mal neu und auf seine Bedürfnisse angepasst schreiben.

Der Nachteil ist natürlich, dass ich nun schon etwas von JavaEE abhängig bin - deshalb auch der Einsatz von JMS, weil das einfach recht naheliegt wenn es um Enterprise Appl. Integration geht.

Von der Datenstruktur her sehe ich schon viele Parallelen zum HDF-Format - ich habe mehrere Gruppen (Parameter), die Bestimmte Eigenschaften habe (z.B. einen Namen als String, einen Typ als int etc...), und jede Gruppe enthält ein 2D Array mit den eigentlich (primitiven) Daten.

Als nächstes würd ich gerne ausprobieren, wie ich einen HDF4/5 Stream erzeuge, ohne dass ich die Daten direkt ins Filesystem schreiben muss. Bis jetzt hab ich aber noch keine Beispiel dafür gefunden - alles ist sehr Dateibasiert.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Als nächstes würd ich gerne ausprobieren, wie ich einen HDF4/5 Stream erzeuge, ohne dass ich die Daten direkt ins Filesystem schreiben muss. Bis jetzt hab ich aber noch keine Beispiel dafür gefunden - alles ist sehr Dateibasiert.

Ich arbeite mit HDF5 nur unter C/C++ (evtl einmal hier rein schauen HDF5 User's Guide ).

Im Kapitel 3.8 steht entsprechend etwas zu den IO Zugriffen: HDF5 User's Guide

Ich denke, wenn Du das ganze streambasiert machen willst, musst Du Deinen eigenen virtuellen Filelayer schreiben HDF5 Virtual File Layer

Ich denke Du musst den Java Stream über einen entsprechenden virtuellen Filelayer den HDF Komponenten unterlegen. Ich denke so etwas musst Du dann via JNI/JNA entwickeln, wobei ich aber überlegen würde, da Du ja anscheinend "nur" Daten transportieren willst, ob Du nicht einfach eine HDF Datei temporär erzeugst und diese dann einfach als Bytestream überträgst und am Zielsystem wieder in eine temporäre Datei umwandelst.

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 4 Wochen später...

Hier ein kleines Update, vllt hilft es jemanden der an einem ähnlichen Problem sitzt:

Das HDF-Format sieht zwar sehr vielversprechend aus und meine ersten TEsts damit waren auch sehr gelungen - allerdings hat mir die Zeit gefehlt, das ganze entsprechend mit Streams als Ein/Ausgabe zu benutzen - Zugriffe aufs File-System kann ich in meinem Rahmen (JavaEE, EJB) leider nicht ohne weiters durchführen.

Aber die Lösung, die mir erstmal weiter geholfen hat, war erstaunlich einfach:

Anstatt ein 2D-Array (z.B. double[][], String[][]) zu serialisieren, was entsprechend lange gedauert hat, habe ich das ganze über die Externalizable-Schnittstelle in ein einfaches byte-Array (byte[ 1d.lenght * 2d.lenght ] z.B.) kopiert und neben dem Array noch die Größe der 1 und 2. Dimension sowie den Datentyp mitgegeben.

Auf der Empfänger-Seite habe ich dann einfach in der read-Methode des Externalizable-Objekts das 2D-Array angelegt ( also z.B. new double[ 1d.length ][ 2d.lenght ] ) und die Werte entsprechend wieder reinkopiert.

Lange Rede, kurzer Sinn: Bei meinem Test-Datensatz, der insgesamt ca. 150.000 Werte enthielt (in String[][], double[][], int[][] und short[][]) dauerte das einfache Serialisieren auf meiner virtuellen Test-Maschine ca. 8 Sekunden, mit der byte[]-Serialisierung und Verwendung von Externalizable jetzt im Durchschnitt 60 Millisekunden...

Besonders elegant ist das Ganze nicht, aber es funktioniert erstmal ;)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...