Remote-Objekt-Server : Alternative Methodenaufruflogik zu Reflection und hart codiert

DougUndPizza

Mitglied
Hallo allerseits,

dies ist mein erster Thread. Ich lese hin und wieder in diesem netten Forum und kam bisher meistens durch die Suchfunktion und die Themen und Antworten von Euch allen weiter. Danke dafür.


Da ich gerade dabei bin, den Netzwerkzugriff für ein bestimmtes Objekt zu implementieren, kam mir die Idee, den Server möglichst allgemein zu halten, sodass beliebige Objekte im Konstruktor übergeben und damit übers Netzwerk erreicht werden können.


- Der Server hat eine Instanz des Objekts, das manipuliert werden soll. Dieses wird wahrscheinlich im Konstruktor übergeben
- Das Objekt hat einen Zustand und Methoden, um diesen Zustand zu manipulieren. Darüber hinaus gibt es Methoden, die Rückgabewerte haben und nicht den Zustand des Objektes betreffen.

Die Kommunikation ist bis jetzt soweit, dass Methodenaufrufobjekte mit Parametern vom Proxy zum Server gesentet werden können(mit ID) und der Server entsprechende RückgabeObjekte(mit gleicher ID) zurücksenden kann. Das ganze funktioniert in beide Richtungen mit serialisierten Objekten und eigenen "Codecs" fürs De-/Serialisieren.

Nun bin ich an dem Punkt, wo auf der Serverseite aus den "MethodenAufrufObjekten" konkrete Methodenaufrufe werden müssen.

1. Das Erste, was mir dazu einfiel, war Reflection.
Java:
...
Object meineInstanz;

public Object reflectionMethodenAufruf(MethodenAufrufObject methodenAufruf)
{  
    return Class.forName(meineInstanz.getClass().getName()).getMethod(methodenAufruf.getMethodenName(), methodenAufruf.getParameter());
    
}
...

- Das bringt mich aber nicht weiter, da Reflection für jeden Methodenaufruf ein neues Objekt erzeugt, und ich damit keine vorhande Instanz benutzen kann. Damit könnte ich also nicht den Zustand meiner konkreten Instanz manipulieren (korrigiert mich, wenn ich hier falsch liege)

2. Hart codierte Methodenaufruflogik à la
Java:
public Object methodenAufruf(MethodAufrufObject methodenAufrufObject)
{
    if(methodenAufrufObject.getMethodenName().equals"tuWasMethode")
    {
        return meineInstanz.tuWasMethode();
    }
    if...
}

3. Konkrete Instanz des Objektes zusammen mit entsprechender Methodenaufruflogik an den Server übergeben (Strategy Pattern). - Also "2." auslagern.
Dadurch bliebe der Server dynamisch für beliebige Objekte.


Was besseres ist mir bisher nicht eingefallen. :noe:

Habt ihr vielleicht eine andere/elegantere Lösung? :toll:


P.S. Die Codeschnipsel sind nur zum Verdeutlichen der Ideen und funktionieren nicht.
 
Zuletzt bearbeitet:

DougUndPizza

Mitglied
Wieso das rad neu erfinden?

Nutze rmi oder ejb dafür


Hab ich vergessen oben dazu zu schreiben: In dem Fall geht es mir quasi darum, das Rad neu zu erfinden.

- ich möchte möglichst wenig Overhead im Netzwerkverkehr haben. - Daher die eigenen Serialisierungsvorschriften und nicht die Java Objectinput-/ObjectOutputStreams (die glaub ich bei RMI genutzt werden).
- der Methodenaufruf soll auf Serverseite möglichst schlank und schnell sein (auch aus dem Grund ungern Reflection)
- es geht mir um den Lerneffekt
 
Zuletzt bearbeitet:

Kr0e

Gesperrter Benutzer
Hi!

Hab da mal was vor einiger Zeit angefangen doch aufgrund von Zeitknappheit zur Zeit eingestellt.

Hier:

Eigenes RMI Protokoll:

foxnet-rmi - Fast and efficient remote method invocation - Google Project Hosting

Eigene, ziemlich schnelle Serialisireung:

foxnet-codec - A lightweight and easy to use yet fast Java Serialization API - Google Project Hosting


Die beiden Projekte sind noch nicht fertig und im Umbruch... Aber da kannt du mal reinschauenn wenn du Source brauchst. Mein RMI Projekt untersützt ziemlich viel davon, was auch RMI kann. Also Callbacks etc.


Gruß,

Chris

PS: Das was du brauchst nennt sich Dynamic Proxy API. DArauf basiert RMI in jeder Hinsicht... RMI ist ansich wirklcih leicht zu implementieren, dank der Dynamic PRoxy API kann mans selbst machen und muss nicht das unflexbile RMI von Java einsetzen..
 
Zuletzt bearbeitet:
T

tuxedo

Gast
Wenn hier schon Werbung gemacht, dann bitte vollständig:

Eine weitere RMI Alternative: SIMON (siehe auch meine Signatur)

Das ganze ist ebenfalls recht schlank und performant (siehe: SIMON Performance)

Zur Serialisierung allgemein:
Wie wär's mit Externalize? Schlanker und performanter geht's nicht. Du musst nur in allen zu übertragenden Objekten zwei Methoden implementieren. Sowohl RMI als auch SIMON berücksichtigen das. Einfach "implements Externalizable" in die Klassensignatur einfügen und die hinzukommenden Methoden implementieren. In den Methoden dann die notwendigen Instanzvariablen in den Stream schreiben, bzw. lesen. Fertig. Übrigens: Je flacher deine Objektstruktur, desto schneller wird die Standard Serialisierung in Java.
Hast du allerdings eine große/tiefe Objektstruktur und kannst auf das letzte Quäntchen Performance verzichten, macht die Wahl einer schnellen Serialisierungsimplementierung Sinn.

Gruß
Alex
 

Kr0e

Gesperrter Benutzer
DAs war keine WErbung, er will es lernen und da dachte mir, bevor er sich alles bei google zusammen sucht kann er ja mal reinschauen.. Ich habe sowieso kaum noch Zeit aufgrund meiner Arbeit =(
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Java RMI bricht ab wenn Remote eine Methode ausgeführt werden soll Netzwerkprogrammierung 5
S .jar läuft local, aber nicht remote (SSH/Terminal) Netzwerkprogrammierung 10
L Remote Desktop per Java steuern Netzwerkprogrammierung 4
J Prüfen, ob remote UDT Server erreichbar ist Netzwerkprogrammierung 0
K Ansprechen eines Remote Druckers Netzwerkprogrammierung 2
S Socket Remote Administration Tool / Fernwartungsprogramm Netzwerkprogrammierung 9
S Socket Remote Desktop Netzwerkprogrammierung 19
X SSH Verbindung zu Remote Datenbank Netzwerkprogrammierung 2
J Windows Unix remote Netzwerkprogrammierung 2
W RMI Verschiedene Unterobjekte trotz selbem Remote Object Netzwerkprogrammierung 2
W scan remote UDP port Netzwerkprogrammierung 6
K Remote - Desktop Netzwerkprogrammierung 15
J Socket - Remote/Client Mac-Adresse? Netzwerkprogrammierung 3
G Remote der serialisieren Netzwerkprogrammierung 3
K Remote Shell in Java? Netzwerkprogrammierung 6
R RMI: Remote Object ohne Naming Service benutzen? Netzwerkprogrammierung 2
R PID's auf remote PC unter Windows herrausfinden Netzwerkprogrammierung 2
J Objekt mit RSA und AES verschlüsseln und entschlüsseln HILFE Netzwerkprogrammierung 4
OnDemand Json Objekt leeres Array beim lesen Netzwerkprogrammierung 9
I Socket ObjectOutputStream-Socket: Objekt wird falsch übertragen Netzwerkprogrammierung 2
L Java RMI Objekt konsistenz Netzwerkprogrammierung 1
P RMI - Neue eigene Instanz für jeden Aufruf auf nicht serialisierbares Objekt - wie? Netzwerkprogrammierung 0
R RMI und Entferntes Objekt (EO) Netzwerkprogrammierung 0
A Server Antwort enthält JSON Objekt/Array Netzwerkprogrammierung 8
N Selbes URL Objekt für alle Requests nutzen Netzwerkprogrammierung 7
B udp erkennen um welches objekt es sich handelt / max size Netzwerkprogrammierung 5
S Socket Client liest leeres Objekt Netzwerkprogrammierung 10
K RMI Angemeldetes Objekt nicht aktuell? Netzwerkprogrammierung 9
D [CORBA] Eigenes Objekt in idl? undefined type Netzwerkprogrammierung 5
M Objekt über Object-Stream, empfange "alte" Daten Netzwerkprogrammierung 2
M Objekt über socket senden/empfangen Netzwerkprogrammierung 3
H Objekt von JSP an Servlet übergeben Netzwerkprogrammierung 4
T Wieso ist mein Objekt leer? Netzwerkprogrammierung 6
L RMI-Objekt zwischen zwei RMI-Servern kopieren Netzwerkprogrammierung 2
S Objekt Felder versenden Netzwerkprogrammierung 5
W Objekt über Socket übertragen Netzwerkprogrammierung 14
G Problem bei Objekt senden von server zu client Netzwerkprogrammierung 6
P RMI - Objekt als Rückgabeparameter Netzwerkprogrammierung 3
M RMI - Ein Objekt für Alle? Netzwerkprogrammierung 5
H Versenden von Objekt Netzwerkprogrammierung 2
J Prblem, wenn im verschickten Objekt ein Array ist Netzwerkprogrammierung 4
F http Post auf einen Grafana Server Netzwerkprogrammierung 3
W Socket Server -> lesen von / schreiben zu php-script Netzwerkprogrammierung 6
E Server mit GUI Netzwerkprogrammierung 4
E FTP FTPS Server gibt Fehlernachricht "522 SSL/TLS required on the data channel" zurück Netzwerkprogrammierung 1
I Performanteste Kommunikationsmethode zwischen Client u. Server Netzwerkprogrammierung 4
L Socket Automatische Zuweisung von Server und Client Rolle Netzwerkprogrammierung 12
Eigenen Rechner als Server? Netzwerkprogrammierung 16
FrankenDerStein HTTP Https Server Bibliothek für Linux und Android gesucht. Netzwerkprogrammierung 7
ExceptionOfExpectation Server/Client-Kommunikation Netzwerkprogrammierung 34
M Server-Client-System für Browsergame Netzwerkprogrammierung 5
J Datei Download vom Server Netzwerkprogrammierung 8
izoards Mehrere TCP Verbindungen auf einen Server [alles Local] Netzwerkprogrammierung 2
Yonnig Threads mit Client/Server und GUI (laufend bis button-click) Netzwerkprogrammierung 9
J Client-Server und SOAP Netzwerkprogrammierung 23
K Threads/Server/telnet Fehler Netzwerkprogrammierung 2
J Multithreaded-Server Netzwerkprogrammierung 21
JaXnPriVate Java HTTPS Server (Secure Sockets) Netzwerkprogrammierung 15
L30nS RMI RMI-Server kann Dialog nicht volkommen anzeigen Netzwerkprogrammierung 2
L30nS RMI Aufruf einer Client-Methode von einem RMI-Server Netzwerkprogrammierung 3
L Server-Socket liest Input-Stream nicht Netzwerkprogrammierung 5
T String von Client zu Server kommt nicht an Netzwerkprogrammierung 92
D WebSocket Server mit HTML Client und Java Server Netzwerkprogrammierung 5
S Von Java auf passwortgeschützten Server zugreifen + Umgang mit Ports Netzwerkprogrammierung 28
S Probleme bei Java-Installation auf Server (Linux/Shell/Terminal) Netzwerkprogrammierung 6
S Java: Anbindung an einen realen Server? (+ Portfreigabe) Netzwerkprogrammierung 8
D Server - Client Informationsaustausch, Möglichkeiten Netzwerkprogrammierung 3
H Socket Kann ein Socket server 2 dimensionale Arrays empfangen und versenden? Netzwerkprogrammierung 3
H Socket Chat entwickeln mit Java Server Client Netzwerkprogrammierung 4
X Kann ich einen Client/Server verbindung hinkriegen die mir alle paar Sekunden die aktuellen Daten per Realtime zuschickt ? Netzwerkprogrammierung 9
Z Kann nicht Daten vom Server lesen Socket Netzwerkprogrammierung 10
S HTTP Post?!? - Java Server Netzwerkprogrammierung 7
F Verbindung zu einem LDAP Server über Java Netzwerkprogrammierung 4
D Slf4j - Logging - Client-Server Architektur Netzwerkprogrammierung 3
F NodeJs-Server auf Firebase hosten ? Netzwerkprogrammierung 3
J client server mit nur einem PC Netzwerkprogrammierung 33
M Socket Nachricht von TCP-Client an Server schicken Netzwerkprogrammierung 12
M Socket Verbindung Matlab(Server) Java(Client) Netzwerkprogrammierung 1
H HTTP Glassfish (v5) Application Server - Bibliothek zur Verfügung stellen Netzwerkprogrammierung 4
B HttpClient - Server (Jetty) - getInputStream - EOF Netzwerkprogrammierung 3
P TCP-Server Netzwerkprogrammierung 1
R Socket FATAL EXCEPTION MAIN bei Socket based client/server app Netzwerkprogrammierung 2
F Server für Java Applikationen Netzwerkprogrammierung 16
H Einfacher Server funktioniert nicht Netzwerkprogrammierung 1
G Server-Client IO Problem Netzwerkprogrammierung 6
T Mikrofonaudio über Java Server an Webbrowser streamen Netzwerkprogrammierung 13
I Socket Das erste Server-Client Programm Netzwerkprogrammierung 16
T HTTPS-Requests an Server: POST-Parameter kommen nicht an Netzwerkprogrammierung 5
L Socket Wie kann ich checken ob ein User eine Nachricht per Outputstream an den Server gesendet hat? Netzwerkprogrammierung 1
T Jetty Server LOGGING Netzwerkprogrammierung 1
L Strings an Server senden und in MYSQL speichern? Netzwerkprogrammierung 3
Aruetiise Socket Java Programm auf Server Netzwerkprogrammierung 3
T server empfängt nur 1 Buchstaben vom String Netzwerkprogrammierung 1
S Spiel mit Server programmieren Netzwerkprogrammierung 2
N Post u Head Request an Server Netzwerkprogrammierung 4
J Socket Ein Chat Server Tutorial Netzwerkprogrammierung 8
M Socket Server antwortet dem Client nicht Netzwerkprogrammierung 6
J Socket Tutorial zu Multiplayer Server schreiben? Netzwerkprogrammierung 5
S Java Chat Server Netzwerkprogrammierung 8
E Kurze Textnachrichten über einen Server von meinem Handy auf den Computer laden. Netzwerkprogrammierung 9

Ähnliche Java Themen

Neue Themen


Oben