RMI RMI-Server und gleichzeitiger Aufruf einer Methode

Dit_

Bekanntes Mitglied
Hallo,

ich möchte mit Hilfe von RMI, Objekte vom Typ Report, auf meiner HP in der DB abspeichern.

also hat mein Server die methode
Code:
addNewReport(Report report);

Was passiert aber wenn mehrere Benutzer (Clients) gleichzeitig dieses Methode aufrufen? Kommt es dabei zu Problemen? Muss ich warteschlange oder sowas implementieren?
muss die Methode synchronized sein? Werde wahrscheinlich hibernate verwenden -> transaktions.

Ist ein Lernprojekt, kenn mich mit RMI wenig aus ... :oops: :rtfm:


Danke schon mal
 
S

SlaterB

Gast
denke mal in folgende Richtung:
Lösungen sind eine Sache, aber Problemfeststellung ist auch schon eine,
baue Logging ein, wann welcher Nutzer kommt, welche exakten Threads und sonstige Server-Objekte benutzt werden,
speichere sie oder Information darüber (Hashcode) in einer statischen Liste, vergleiche sie,
teste aktiv Überlappung der Aktionen, schaue dir an, ob und was genau du an Fehlzuständen überhaupt zu erzeugen (und am besten auch zu reproduzieren) schaffst

ansonsten:
meiner Ansicht nach ist jeder RMI-Aufruf ein neuer Thread in einem neuen Server-Objekt,
wobei ich persönlich noch nie mehr als eine Handvoll gleichzeitig hatte,
von der Sicht aus wäre RMI kein Problem, was danach in deinem Code passiert musst du wissen
 
N

nillehammer

Gast
Ich glaube nicht, dass Du RMI benutzt. Homepage und Hibernate hört sich für mich nach normaler Connection zur Datenbank an. Unter den Voraussetzungen musst Du die Methode nicht synchronized machen und musst auch keine Warteschlangen implementieren.
 
N

nillehammer

Gast
Ah ok, ich hatte gedacht, Du würdest die Serverseite Deiner Anwendung meinen. Aber Du willst einen Client programmieren, richtig?

Für die Clientseite: Steht HP denn nicht für Homepage? Dann ist es doch eine Webanwendung und dafür würde ich einen http-Client programmieren und keinen RMI-Client. Aber vielleicht hab ich von den Begriffen in die Irre führen lassen...
 

Dit_

Bekanntes Mitglied
Also ich habe in meiner Anwendung RMI Client implementiert. Die HomePage ist eine ganze normale Webseite PHP,MYSQL.
Ein Report kann zB ein Bug sein. Sprich der Benutzer kann in der Anwendung, so wie in Eclipse, Fehler oder Vorschlag senden. Ich habe erstmal direkt in der Anwendung mittels JDBC die "Reports" gespeichert, dafür musste ich aber die Zugangsdaten irgendwie im Code unterbringen... Dann wurde mir hier im Forum RMI vorgeschlagen.

Funktioniert eigentlich super. Es wird eigentlich nie vorkommen, dass mehrere Benutzer auf RMI-server gleichzeitig zugreifen, ist nur ein test-lern Projekt, wollte bloß für die Zukunft wissen, wie das ist... im "worst case"...

Wie SlaterB schon sagte jeder RMI-Aufruf verläuft im einem extra-Thread. Das bedeuted doch dass ich erstens auf jeden fall mit Transaktions arbeiten muss und zweitens dass ich ggf für die Synchronisation sorgend muss.
Richtig?
 
S

SlaterB

Gast
> Die HomePage ist eine ganze normale Webseite PHP,MYSQL.
passt überhaupt nicht zum RMI-Begriff und verwirrt weiterhin,
wenn du mit einem Java-Client irgendwas anstellst, so dass auf allgemeine Web-Art (HTTP) ein PHP-Server ansprochen wird, dann ist das kein RMI

Transaktionen und Synchronisation sollte man gewiss nicht vergessen, wie in quasi jedem Programm,
da kann man pauschal wenig zu sagen
 
N

nillehammer

Gast
Das bedeuted doch dass ich erstens auf jeden fall mit Transaktions arbeiten muss und zweitens dass ich ggf für die Synchronisation sorgend muss.
Richtig?
- Sofern Deine Methode "addNewReport(Report report)" nur mit ihrem Parameter und nicht mit Membervariablen arbeitet und Report selbst nicht von anderen Trheads benutzt wird bzw. immutable ist, brauchst Du die Methode nicht zu synchronisieren.
- Wenn Du Hibernate verwendest, bekommst Du Transaktionen und ACID Deiener Datenbank frei Haus. Du musst also auch diese nicht selbst implementieren.
 

Dit_

Bekanntes Mitglied
> Die HomePage ist eine ganze normale Webseite PHP,MYSQL.
passt überhaupt nicht zum RMI-Begriff und verwirrt weiterhin,
wenn du mit einem Java-Client irgendwas anstellst, so dass auf allgemeine Web-Art (HTTP) ein PHP-Server ansprochen wird, dann ist das kein RMI

Die WebSeite läuft halt auf einem Virtuellen Server, da kann ich halt alles laufen lassen oder?

bin jetzt selbst verwirrt... klärt mich bitte auf :bahnhof:
 
N

nillehammer

Gast
So wie ich den Zweck Deiner Anwendung verstehe, speicherst Du Reports in einer Datenbank und benutzt eine PHP-Webandwendung, um diese in einer Webseite darzustellen.

Nun müssen die Reports natürlich irgendwie in die Datenbank rein. Dein erster Versuch war, sie direkt von den Clients aus über jdbc reinzupumpen. Dir hat aber nicht gefallen, dass das DB-Passwort auf den Clients sichtbar war (sehe ich übrigens nicht als so großes Problem an, wenn man nur für diesen Zweck einen eigenen DB-Account einrichtet).

Du suchst nun nach Alternativen. Eine wäre, die Clients per RMI anzubinden. Kann man machen. Aber auch hier solltest Du einen Passwortmechanismus einbauen. Auch so ein Passwort ist dann auf Clientseite bekannt.

Nachdem Du schon eine Webanwendung hast, wäre der naheliegenste Weg eben auch diese für das submitten von Reports zu benutzen. Wenn es geht, programmier ein Formular, in das die Benutzer die benötigten Daten direkt über den Browser eingeben. Dann brauchst Du garkeine Client-Software mehr.

Wenn Du einen Client haben willst und kein Webformular benutzen willst, dann benutze einen http-Post, um die Daten zu übertragen. Auf der Serverseite brauchst Du dann natürlich ein Script, dass die Posts verarbeitet.
 

Dit_

Bekanntes Mitglied
genau. alles was ich möchte halt, dass beides geht. Die Webseite bietet ebenfalls die Möglichkeit ein Report anzulegen. Sonst ist es komisch das man die Reports(Bugs) nur anschauen kann. Wenn ein Report über meine Java-Anwendung geschickt wird, kann ich noch zusätzliche Infos mit senden(ThreadPool Zustand, Welche Module gerade aktiviert sind und und und)

Das mit http-Port hört sich gut an. Wie geht das?
Sende ich einen String der auf der HP seite geparst und als Report interpretiert wird?

danke
 
N

nillehammer

Gast
Das mit http-Port hört sich gut an. Wie geht das?
Sende ich einen String der auf der HP seite geparst und als Report interpretiert wird?
Ja, Du sendest etwas, dass auf der HP-Seite als Report interpretiert wird. Es ist aber kein String und parsing würde ich das auch nicht nennen.

Ein HTTP-Post besteht aus einem Header (ehrer uninteressant) und aus einem Body. In dem Body sind die Werte als key/value-Paare enthalten. Sie werden als Post-Parameter bezeichnet. Die bestehen aus Strings. Auf der Serverseite musst Du die Post-Parameter aus dem Request herausholen. (Bei PHP gibt es dafür im Request einen assoziativen Array 'POST' oder so ähnlich).

Auf der Clientseite musst Du den Post-Request zusammenbauen und an das PHP-Script schicken. Dafür würde ich eine API nehmen, die das erleichtert. Z.B. den httpClient von Apache: HttpClient - HttpComponents HttpClient Overview
 
Zuletzt bearbeitet von einem Moderator:

Dit_

Bekanntes Mitglied
ok danke sehr! und letzte Frage, gibt es Erfahrungswerte was Performance http-Port vs RMI angeht? no so aus interesse :oops:

ich meine bei RMI wird ja schon einiges gemacht: Verbindungsaufbau, senden, empfangen, speichern(hibernate, java-jdbc)...
 
N

nillehammer

Gast
Ich habe keine Erfahrungswerte. Verbindungsaufbau etc. muss aber auch bei der http-Variante gemacht werden. Ich behaupte aber mal, dass die Performance mehr als ausreichend ist.
 

mvitz

Top Contributor
Solange deine User per RMI nur Bugreports anlegen, musst du dich eigentlich um Synchronisation wenig kümmern (außer du vergibst die ID selber). Denn wenn zwei Leute gleichzeitig einfügen ist die Reihenfolge in diesem Falle ja egal. Alternativ könntest du die Kommunikation auch per SOAP oder REST implementieren.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
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
I Client/Server Kommunikation bei einem Spiel Netzwerkprogrammierung 4
E Objekte versenden, Client-Server Netzwerkprogrammierung 25
C Mini Client-Server-Anwendung funktioniert nicht Netzwerkprogrammierung 8
D Socket Message an einen Server senden? Netzwerkprogrammierung 8
J FTP FTP Zugriff über Proxy Server Netzwerkprogrammierung 1
KaffeeFan Programmierung mit Cloud-Server Netzwerkprogrammierung 0
L Socket Problem mit Server Netzwerkprogrammierung 1
cezary Socket Paralleler Server ? Netzwerkprogrammierung 1
I Socket Leicht zu DDosender Server Netzwerkprogrammierung 4
agent47 HTTPs Server Netzwerkprogrammierung 5
J Chat Server starten über GUI problem Netzwerkprogrammierung 4
J Prüfen, ob remote UDT Server erreichbar ist Netzwerkprogrammierung 0
P Server als Client nutzen Netzwerkprogrammierung 8
S Server Kommunikation Netzwerkprogrammierung 1
V einfaches hin und her von Text über Server Netzwerkprogrammierung 2
D Socket Run Args Client/Server Socket Netzwerkprogrammierung 1
Cromewell Socket Multithreaded Server und Client Netzwerkprogrammierung 1
Y Client/Server/DB communication Netzwerkprogrammierung 3
JavaWolf165 Socket mit .writeUtf etwas vom Client zum Server schicken Netzwerkprogrammierung 13
P RMI Client Server Programm über Internet Netzwerkprogrammierung 2
brainless Client Server Kommunikation verschlüsseln Netzwerkprogrammierung 13
gamebreiti Socket Server / Client Anwendung Manipulation von Objekten durch Server Netzwerkprogrammierung 9
T Socket Server/Client Kommunikation Netzwerkprogrammierung 8
S Webservice - Server Netzwerkprogrammierung 0
M Java Eingabe auf FTP Server übergeben Netzwerkprogrammierung 4
F Server Client Anwendung mit UDP Netzwerkprogrammierung 2
A RMI Wo treten Exceptions bei RMI Aufrufen auf? Auf Client oder auf Server? Netzwerkprogrammierung 3
M Socket Java Server: NullPointerException Netzwerkprogrammierung 4
A ByteBuffer - Client/Server Netzwerkprogrammierung 9
J Java Server empfängt php inhalt nicht Netzwerkprogrammierung 1
K C# Server - Android Client Netzwerkprogrammierung 0
J Framework mehrere Clients/ Server-Broadcast/oracle XE/ XML Netzwerkprogrammierung 1
D Mit Server Daten austauschen Netzwerkprogrammierung 4
V Server / mehrere Clients / MySQL / Konzept Netzwerkprogrammierung 2
P HTTP Bild von einem Server per http kopieren Netzwerkprogrammierung 1
F Verbindung zwischen Server und handy Netzwerkprogrammierung 1
P MIME-TYPE Erklaerung, Kommunikation zwischen Client und Server Netzwerkprogrammierung 3
J Sichere Kommunikation bei Server Client Netzwerkprogrammierung 3
R RMI Server RMI Netzwerkprogrammierung 1
X Mit Java eine Applikation auf einem anderen Windows Rechner (Windows Server 2008) starten Netzwerkprogrammierung 1
T Frage zu Client-Server Applikation Netzwerkprogrammierung 2

Ähnliche Java Themen

Neue Themen


Oben