Mehrere JVMs die auf eine Klasse mit statischen Variablen zugreift

Kian

Aktives Mitglied
Hallo,
ich habe folgendes Problem:
Ich habe mehrere Prozesse von denen jeder in einer eigenen JVM läuft. Ich möchte aber das jeder dieser Prozesse bzw. JVMs auf eine Klasse mit statischen Variablen zugreift. D.h. diese Klasse soll nur einmal angelegt werden und von allen JVMs verwendet werden können.

Hat jemand eine Idee wie ich das machen könnte?

Danke.
 
Ich hoffe du willst nicht irgendwie auf die Variablen zugreifen sondern schön brav getter aufrufen ... ansonsten müsste ich das als schweren Designfehler bezeichnen.

Wie das geht, findest du unter dem Stichwort Interprozesskommunikation.
 
Wenn es tatsächlich verschiedene Prozesse sind, kannst Du die Klassenzugriffe keinesfalls einfach so machen. Die Klasse ist im Prozess abgeschirmt und Du kommst von außerhalb des Prozesses nicht ran. Du musst eine Möglichkeit implementieren, wie sich die Prozesse unterhalten können -> also siehe Andi_CH's Vorschlag.
 
Ist es irgendwie möglich eine Art Singleton-Klasse zu erstellen, die einmal Hostweit über alle JVMs existiert? Wenn ja, wie würde die dann aussehen?

Interprozesskommunikation über JMX, JMS oder Sockets fällt flach, da ich es nicht verwenden darf.
Es handelt sich bei den Prozessen um Log4J-Appender die auf einem Websphere laufen. Und diese Appender sollen auf eine gemeinsame Datenbasis zugreifen, was beim Websphere(J2EE) ein Problem darstellt, da er mehrere JVMs startet in der dann die Teile der Webapplikation laufen.
 
zb mit Sockets über localhost kommunizieren... und bitte jetzt nicht fragen wie das geht, da gibts ca eine Million Tutorials im Netz ;-)
 
Also ohne Sockets wird das schon schwer. Dann gäbe es noch shared memory. Aber bitte Andi_CH's Ratschlag und lies Dich selbstständig in das Thema Interprozesskommunikation ein!
 
Dann wird's schwierig. Vielleicht geht es über das Dateisystem für Files. Sicherlich nicht besonders performant. Unter Unix gibt es z.B. Named Pipes, die zur IPC verwendet werden.
 
Oder Du nutzt eine File-Fifo, (was auch auf Pipes hinausläuft); Das wäre auch Möglich. Der eine schreibt in die Datei, der andere bekommt es sofort.
 
Wie ich bereits schon zuvor erwähnt habe, darf ich Sockets nicht verwenden.

Sockets sind nur eine Variante der Interprozesskommunikaiton - ich glaube nicht, dass in deiner Aufgabenstellung steht was du nicht verwenden darfst - es steht doch eher da was du verwenden sollst, oder dann ist es aus den vergangenen Lektionen klar was du verwenden sollst, weil es wohl genau um das Thema gegangen ist.

Es gibt da noch RPC, SOA etc. (Na ja, ich weiss nicht mal genau was das ist, aber es tönt gut und gehört zum Thema Interprozesskommunikation 😀 )
 
Zuletzt bearbeitet:
Sockets sind nur eine Variante der Interprozesskommunikaiton - [...] Es gibt da noch RPC, SOA etc.
Also wenn Du mit SOA die "Serviceorientierte Architektur" meinst, dann hilft ihm das gar nicht. Das beschreibt leider nur das Paradigma, Systeme verteilt zu entwickeln/zu betreiben, aber nicht wie/womit.
Und RPC basiert meines Wissens auf Sockets.
 
Vielleicht war es auch SOAP? Ich weiss doch nicht mehr und es hat mich auch nicht übermassig interessiert, weil das vorwiegend die Bankenwelt und die der riesigen Unternehmen betrifft. Meine kleinen Softwaren kamen bis jetzt ohne sowas aus.

Basiert nicht alles was Netzwek ist im Endeffekt auf Sockets?
 
Mir fallen jetzt auf die Schnelle folgende Möglichkeiten ein:
  • Named Pipes (geht das mit Windows?)
  • Shared Memory
  • Datei/en
  • Datenbank (evtl wieder Sockets)
 
Darf ich fragen was das für eine kuriose Aufgabe ist, die es nicht erlaubt Sockets zu verwenden? Einer der elementaren Bausteine zur IPC überhaupt, ganz egal ob im Netzwerk oder nicht...
 

Zurück
Oben