2013-04-03 10 views
8

Ich entwickle einen sehr einfachen REST Web Service mit Eclipse, Tomcat7 und Jersey Implementierung, mit einer Verbindung zu MySQL. Mit Blick auf die Jersey-Dokumentation weiß ich, dass jede Anfrage ein neues Objekt der Wurzel-Ressourcenklasse erstellt. Aber ich weiß nicht, ob jede Anfrage unabhängig ist, zum Beispiel, wenn eine Anfrage lange warten muss, akzeptiert der Server normalerweise mehr Anfragen?gleichzeitige Anfrage an Jersey Rest Service

Das Problem ist: Ich habe 2 Hauptklassen, 1 Klasse implementiert Jersey mit Anmerkungen (Proxy.java), und andere Klasse, die zu einem BD (Notificator.java) verbindet, gibt es nur eine Instanz dieser Klasse (Singleton), um nur 1 Verbindungsobjekt zu verwenden. Die Klassen, die Jersey einsetzen, verwenden diese Klasse. Also, wenn eine der Anfragen blockiert ist, weiß ich nicht, ob die anderen ausgeführt werden, weil sie die gleiche (Notificator.java) -Instanz verwenden.

Die Beziehung ist N Instanzen von (Proxy.java) verwendet die einzige (Notificator.java), die eine Verbindung zu einem MySQL haben.

+0

Warum möchten Sie nur eine Verbindung zur DB haben? –

+0

Ich habe es aus Gründen der Einfachheit gemacht und Probleme der Konkurrenz vermieden. –

Antwort

3

Jersey ist oben auf Servlets entwickelt. Es gibt einen neuen Thread für jede eingehende Anfrage. Ihr Code erzeugt einen Engpass für alle Threads, da ein Konflikt für ein einzelnes verfügbares Verbindungsobjekt besteht. Wenn Sie mehrere Anfragen haben, wird nur eine Anfrage diese Verbindung verwenden und andere müssen warten. Wenn die Wartezeit nicht zu lang ist, gibt es kein Problem. Wenn die Wartezeit jedoch höher ist als die HTTP REQUEST TIMEOUT, können Ihre anderen Anforderungen als TIMED OUT enden.

Ich habe gehört, dass Sie aufgrund von Geschäftsanforderungen/Komplikationen einen Engpass bei der Einzelverbindung haben. In all diesen Fällen, in denen wir nicht alle Anfragen simultan bearbeiten können und es verschiedene Gründe dafür geben kann, sollten wir unsere Webdienste als asynchron erstellen. Asynchrone Web-Services arbeiten mit dem Modell SUBMIT REQUEST-> REQUEST ACCEPTED (wird asynchron verarbeitet) und JOB URL wird für Polling-> CLIENT POLLS zurückgegeben, bis der JOB NICHT ABGESCHLOSSEN ist.

Hoffe es hilft!

+0

"Es gibt einen neuen Thread für jede der eingehenden Anfrage", das war der wichtige Punkt !! vielen Dank. Ich weiß, dass es einen Engpass gibt, weil ich nur eine Verbindung benutze, aber normalerweise wird es nur 2 oder 3 gleichzeitige Anfragen geben, also denke ich, dass es keine Probleme damit geben wird. Aber ich werde den "asynchronen Webservice" studieren. –

0
+0

thx, aber schließlich sagte mir mein Lehrer, dass die Verbindung Pooling wird schwierig zu implementieren, so dass ich nur das Schlüsselwort "syncronized" in der Notificator-Klasse verwendet, um Konkurrenzprobleme zu vermeiden. Ich habe auch gemerkt, dass jeder Call zu Trikot unabhängig läuft, wenn also einer davon Blöcke anruft, werden die anderen normal laufen. –

+0

Mit 'synchronized' Schlüsselwort blockieren Sie andere Anrufe. Wenn das ist was du brauchst, dann Ok. – Vitaly

+0

Ich blockiere andere Anrufe, aber wenn die Ressource verfügbar ist, wachen sie auf? Das hat mein Lehrer mir erklärt. Und das funktioniert für mich. –

Verwandte Themen