RMI ohne Security

pups

Mitglied
Hallo,

ich will ein bestehendes Projekt, das viel Kommunikation im Netzwerk betreibt auf RMI umstellen.

Problem: Ich habe mich noch nie mit RMI befasst, daher wär es super wenn mir jemand Feedback geben kann ob mein Vorhaben überhaupt klappt. Nicht, dass ich nach 2 Wochen merke, dass Garnichts mehr läuft.

Fragen:
1. Muss ich diesen SecurityManager laden, wenn alle Teilnehmer im Netzwerk auf der gleichen Codebasis laufen?

2. Im Moment Sender alle Teilnehmer Nachrichten wo drinnen steht wer sie sind "id", was sie sind "typ" und was sie gerne machen würden. Alles als langer String mit festgelegten Trennzeichen. Ist natürlich ein riesiger Codeblock alle Objekte in Strings zu verwandeln. Das kann ich mit RMI ablösen und vereinfachen?

3. Im Moment hat jeder Teilnehmehmer einen eigenen Thread um mit anderen Teilnehmern zu reden, so wird verhindert, dass wenn es mal irgendwo langsamer zugeht, das Gesamtsystem nicht gebremst wird. Kann RMI nebenläufig sein, ab dem Moment wo man eine Funktion aufruft? Also gar nicht wartet bis die Nachricht übertragen ist? Sind im dem Zusammenhang bei RMI auch irgendwo maximale Befehlsschlagen definiert? So wie eine LinkedBlockingQueue, das nicht irgendwann mal n HeapSpace fliegt, weil bei einem Server n Kabel gezogen wurde o.Ä?

Freue mich auch auf Teilantworten.

Vielen Dank
 

FArt

Top Contributor
Wenn du RMI benutzen möchtest, dich aber nicht auskennst, würde ich Spring Remoting empfehlen. Einfach POJO implementieren, das Interface "exposen" und fertig.
Wenn es wirklich besser asynchron sein sollte, würde ich JMS vorschlagen.
 

chalkbag

Bekanntes Mitglied
Fragen:
1. Muss ich diesen SecurityManager laden, wenn alle Teilnehmer im Netzwerk auf der gleichen Codebasis laufen?
Du kannst RMI auch ohne Security Manager verwenden, hängt nach meinem Wissensstand aber auch davon ab, was du verschickst, also z.B. einfache Strings oder Objekte.

2. Im Moment Sender alle Teilnehmer Nachrichten wo drinnen steht wer sie sind "id", was sie sind "typ" und was sie gerne machen würden. Alles als langer String mit festgelegten Trennzeichen. Ist natürlich ein riesiger Codeblock alle Objekte in Strings zu verwandeln. Das kann ich mit RMI ablösen und vereinfachen?
Deutlich, die Kommunikation erfolgt ja über ein bis beliebig viele Interface, wodurch du ja nur noch die Methoden aufrufen musst.

3. Im Moment hat jeder Teilnehmehmer einen eigenen Thread um mit anderen Teilnehmern zu reden, so wird verhindert, dass wenn es mal irgendwo langsamer zugeht, das Gesamtsystem nicht gebremst wird. Kann RMI nebenläufig sein, ab dem Moment wo man eine Funktion aufruft? Also gar nicht wartet bis die Nachricht übertragen ist? Sind im dem Zusammenhang bei RMI auch irgendwo maximale Befehlsschlagen definiert? So wie eine LinkedBlockingQueue, das nicht irgendwann mal n HeapSpace fliegt, weil bei einem Server n Kabel gezogen wurde o.Ä?
Es ist bei der Thematik egal ob du Sockets oder RMI verwendest. Du kannst den Server ja immer mit oder ohne Nebenläufigkeit implementieren. Der Entwickler entscheidet so, ob wohl nur ein Thread pro Verbindung oder eben zusätzlich welche für einzelne "aufwändige" Funktionen verwendet werden sollen.


[persönliche Meinung]
Ich finde es gibt viele gute Einführungen in RMI so das man ja relativ schnell in rmi reinkommt. Es ist so fraglich ob es leichter ist sich direkt mit RMI zu beschäftigen, oder mit einem evtl. überdimensionierten Framework (bei welchem ich auch zumindest die RMI Technologie verstanden haben sollte?).
[/persönliche Meinung]
 
T

tuxedo

Gast
Hallo,

ich will ein bestehendes Projekt, das viel Kommunikation im Netzwerk betreibt auf RMI umstellen.

Wieviel ist denn viel? 10 calls/sekunde? 100calls/sekunde? 1000calls/sekunde? 10000calls/sekunde?


Problem: Ich habe mich noch nie mit RMI befasst, daher wär es super wenn mir jemand Feedback geben kann ob mein Vorhaben überhaupt klappt. Nicht, dass ich nach 2 Wochen merke, dass Garnichts mehr läuft.

Naja, je nach Projektgröße und Art wirst du schon ein paar Tage für den Umbau investieren müssen. Und dann sollte man noch ausgiebig testen um böhse Überraschungen zu verhindern...

Fragen:
1. Muss ich diesen SecurityManager laden, wenn alle Teilnehmer im Netzwerk auf der gleichen Codebasis laufen?

Geht meines wissens auch ohne SecurityManager.

2. Im Moment Sender alle Teilnehmer Nachrichten wo drinnen steht wer sie sind "id", was sie sind "typ" und was sie gerne machen würden. Alles als langer String mit festgelegten Trennzeichen. Ist natürlich ein riesiger Codeblock alle Objekte in Strings zu verwandeln. Das kann ich mit RMI ablösen und vereinfachen?

Ja, das ist ja der Sinn hinter diesen RPC Techniken. Du kommunizierst dann einfach "objektorientiert". Streams, Bytes, etc... ist dann alles Geschichte.

3. Im Moment hat jeder Teilnehmehmer einen eigenen Thread um mit anderen Teilnehmern zu reden, so wird verhindert, dass wenn es mal irgendwo langsamer zugeht, das Gesamtsystem nicht gebremst wird. Kann RMI nebenläufig sein, ab dem Moment wo man eine Funktion aufruft? Also gar nicht wartet bis die Nachricht übertragen ist? Sind im dem Zusammenhang bei RMI auch irgendwo maximale Befehlsschlagen definiert? So wie eine LinkedBlockingQueue, das nicht irgendwann mal n HeapSpace fliegt, weil bei einem Server n Kabel gezogen wurde o.Ä?

RMI beherrscht Nebenläufigkeit. Aber halt nur solange du in deinem Aufbau mit all den Klassen und Aufrufen das auch beherrschst. RMI verwaltet die internen Threads zur Kommunikation nach einem mir unbekannten Verfahren selbst. Du hast keinen wirklichen einfluss darauf wieviele Threads arbeiten und wieviele Netzwerkverbindungen benutzt werden.
Eine Alternative wäre hier SIMON (siehe Signatur).

In beiden Fällen (RMI und SIMON): Wenn du eine entfernte Methode aufrufst, dann blockiert der Aufruf solange bis der entfernte Methodenaufruf beendet ist. Eben ganz genau so, wie wenn du lokal eine Methode aufrufst. Das dauert solange wie es eben dauert die Methode abzuarbeiten. Du kannst natürlich den Methodenaufruf auf Serverseite in einen Threadpool (Executorservice) weiterleiten und dort den Aufruf weiter verarbeiten lassen. Dann hast du das entkoppelt. Der Aufruf dauert dann nur noch solange, wie es dauert um die Daten zur Verarbeitung in den Threadpool zu stecken. Allerdings hat der Aufrufende dann keine ahnung was aus seinen Daten wird/geworden ist. Der Server muss also ggf. einen Callback zurück zum Aufrufenden benutzen um das Ergebnis mitzuteilen. Wenn die Anwendung über's Internet laufen soll, dann ist unter Umständen das hier lesenswert: SIMON - Start - root1.de - Software Engineering

Der Heap fliegt dir in der Regel nicht um die Ohren. Sowohl RMI als auch SIMON (für andere kann ich nicht sprechen, da kenn ich die Frameworks zu wenig) prüfen aktiv die Verbindung (das Intervall ist einstellbar). Sollte eine Störung vorliegen (Kabel gezogen, Routerausfall, unendlich große Latenz), wird das entsprechend erkannt.
 

FArt

Top Contributor
[persönliche Meinung]
Ich finde es gibt viele gute Einführungen in RMI so das man ja relativ schnell in rmi reinkommt. Es ist so fraglich ob es leichter ist sich direkt mit RMI zu beschäftigen, oder mit einem evtl. überdimensionierten Framework (bei welchem ich auch zumindest die RMI Technologie verstanden haben sollte?).
[/persönliche Meinung]
Wieso überdimensioniert?

Sehe ich nicht so. Mit dieser relativ schlanken API habe ich mehrere Vorteile, u.a. die Verwendung von RMI (oder einem anderen Protokoll) ohne mich mit RMI direkt auseinandersetzen zu müssen. Das ist eine Frage des Anspruchs. Möchte ich RMI lernen und benutzen, dann mache ich alles selber. Möchte ich einfach nur Remotezugriffe über das RMI Protokoll erledigen, bin ich mit Spring schneller bei einer funktionierenden und guten Lösung, da ich mich um die Kommunikation gar nicht kümmern muss, sondern nur um die Businesslogik.
 
T

tuxedo

Gast
Möchte ich einfach nur Remotezugriffe über das RMI Protokoll erledigen, bin ich mit Spring schneller bei einer funktionierenden und guten Lösung, da ich mich um die Kommunikation gar nicht kümmern muss, sondern nur um die Businesslogik.

Das klingt ja fast so, als ob man bei RMI und Co. 'nen haufen Kommunikationsrelevantes Zeug erledigen muss.

Dabei ist es auf Serverseite doch prinzipiell nur das Anlegen der Registry und Binden des Objekts, und auf Client-Seite der Lookup für das Objekt. Fertig. Wenn man's eng zusammenpackt sind das pro Seite ne Handvoll Zeilen.

Okay, was bei RMI noch "unschön" ist, ist dass man um alles und jeden Call einen Try/Catch Block packen muss. Wen das noch stört der kann sich ja tatsächlich von RMI abwenden und eine Alternative wählen.

Aber davon mal abgesehen, ist der "Overhead" durch RMI sicher nicht größer als der von irgend einer anderen RPC Technik. Denn schließlich muss man ja irgendwann und irgendwo mal sagen wer mit wem etc...

- Alex
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
T TCP mit und ohne Threads Netzwerkprogrammierung 1
V Socket Audio Clip loopen ohne neuen Thread Netzwerkprogrammierung 2
L Socket Wie kann man in Java die Anzahl der Objekte in einem InputStream sehen ohne ihn durchgehen zu müssen Netzwerkprogrammierung 1
Q-bert Link zugang ohne login sperren. Netzwerkprogrammierung 1
L Socket Zwei Computer im gleichen Netwerk ohne Portforwarding ? Netzwerkprogrammierung 12
J HTTP Befehl via HTTP senden ohne Browser öffnen Netzwerkprogrammierung 3
B JSch Filetransfer ohne KnownHosts Datei? Netzwerkprogrammierung 0
D GZIP InputStream lesen ohne zu encoden Netzwerkprogrammierung 1
T UDP Pakete empfangen ohne Programm zu blockieren Netzwerkprogrammierung 3
D Zugriff auf Webinhalte ohne visuelles Öffnen der Website Netzwerkprogrammierung 2
T Anwendungseinstellungen ohne Datei übertragen? Netzwerkprogrammierung 8
B Socket BufferedImage senden "ohne speichern" Netzwerkprogrammierung 7
N (TCP) Verbindung ohne Portforwarding Netzwerkprogrammierung 12
B Socket BufferedReader.readLine() beenden ohne den Stream zu closen Netzwerkprogrammierung 7
D Mit wsimport erstellte Klassen ohne WSDL nutzen Netzwerkprogrammierung 4
T Datei downloaden ohne den Dateinamen zu kennen Netzwerkprogrammierung 2
D RMI Gui auf client updaten basierend auf den Property Änderung des Models auf dem Server ohne polling Netzwerkprogrammierung 12
B FTP Datei auslesen ohne einloggen möglich? Netzwerkprogrammierung 19
E RMI ohne Portforwarding? Netzwerkprogrammierung 2
M Ping mehrerer Ports aus int[] ohne for-Schleifendurchlauf Netzwerkprogrammierung 11
C Login ohne Erfolg Netzwerkprogrammierung 2
L einfacher server ohne threads Netzwerkprogrammierung 4
J Client ohne Server? Netzwerkprogrammierung 7
K Socket Daten lesen ohne Längenangabe Netzwerkprogrammierung 19
0 soap client ohne WSDL Netzwerkprogrammierung 3
J Connection Speed Test ohne Applet Netzwerkprogrammierung 5
E DatagramSocket rausfinden ob recive möglich ohne zu blocken Netzwerkprogrammierung 10
O Webservice ohne Eclipse laufen lassen Netzwerkprogrammierung 3
T Server ohne Port Netzwerkprogrammierung 4
L RMI Programm beendet ohne Fehler sofort nach Start (Windows 2000) Netzwerkprogrammierung 7
C imap/java emails checken ohne runterzuladen? Netzwerkprogrammierung 3
T ohne Port Freigabe. Netzwerkprogrammierung 6
P P2P ohne Portfreigabe Netzwerkprogrammierung 12
J Client-Client-Chat ohne Serverbeteiligung Netzwerkprogrammierung 2
G Connection zu MySQL ohne ODBC Netzwerkprogrammierung 8
G TCP Verbindung überprüfen OHNE daten zu verschicken Netzwerkprogrammierung 11
T select() ohne NIO - oder wie Worker-Thread sauber beenden? Netzwerkprogrammierung 9
Paule Connection Applet Servlet ohne Socket bzw RMI Netzwerkprogrammierung 2
L http kommunikation mit und ohne multipart Netzwerkprogrammierung 4
R RMI: Remote Object ohne Naming Service benutzen? Netzwerkprogrammierung 2
K RMI ohne Kommandozeileneingabe Netzwerkprogrammierung 9
M Ende des Streams ohne Schließen/Checksumme mitsenden Netzwerkprogrammierung 2
G SSL Verbindung ohne Zertifikat Netzwerkprogrammierung 9
D Timeouts ohne Ende bei SMTP und FTP Netzwerkprogrammierung 3
M Client-Kommunikation ohne Server Netzwerkprogrammierung 7
M schreiben auf geschlossenen Socket ohne Exception Netzwerkprogrammierung 6
A server mit 2 Ports : Mit und ohne SSL Chat system Netzwerkprogrammierung 10
K Applet - Servlet Kommunikation ohne Sockets Netzwerkprogrammierung 5
J Vom BufferedReader lesen -> hängt ohne Fehler,ohne Except Netzwerkprogrammierung 2
J Applet Security - java.security.AccessControlException: access denied Netzwerkprogrammierung 3
DStrohma RMI Security Manager & Policy-File Netzwerkprogrammierung 8
Saxony RMI - eigene Registry (no security manager: RMI class loader disabled) Netzwerkprogrammierung 6
G Java rmi Fehlermeldung java.security.AccessControlException Netzwerkprogrammierung 3
R java.security.AccessControlException wegen NAT? Netzwerkprogrammierung 5
M sockets (security) Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben