Frage

ich eine Apache Derby Datenbank läuft (in vernetzten Modus) in einer Java-Swing-Anwendung, ich eine Verbindung über eine Java-Client-Anwendung, um es durch direkte JDBC-Aufrufe.

Das alles ist sehr gut und funktioniert super aber weiß, dass ich eine zusätzliche Anforderung für diesen Client / Server-Anwendung Concurrent-Lizenzen zu implementieren.

Im Idealfall soll ein Benutzer mit einer Einzelplatzlizenz der Lage sein, 1 Client-Anwendung auf einem Laptop laufen zu lassen und auch eine zweite Client-Anwendung auf einem Desktop ausgeführt werden und in der Lage an den Server von beiden zu verbinden.

Ich habe nicht den Luxus eines Web-Servers, so frage ich mich, wenn meine einzige Option ist die „MaxThreads“ Laufzeit-Eigenschaft in Derby zu verwenden und im Wesentlichen den Benutzer zu zwingen, den Laptop abzumelden zu haben sagen, wenn sie wollen verwenden Sie die App von ihrem Desktop dann.

Wenn ich die Timeslice-Eigenschaft auf 0 verlassen wird dann einen Anruf zu getConnection Timeout, so dass ich eine Nachricht an den Benutzer anzeigen kann erklären, dass sie eine der Client-Anwendungen trennen müssen.

Sind Anschlussgewinde ein zuverlässiger Weg, dies zu tun?

Fehle ich eine andere Lösung?

War es hilfreich?

Lösung

Wenn ich die Frage richtig zu verstehen, müssen Sie Benutzer-locked Lizenzen und wollen den Zugriff auf den „Server“ einen einzelnen Benutzer mit einer einzigen Lizenz, um zu verhindern mehr als eine Instanz des Client zu einem Zeitpunkt. Ihr „Server“ ist einfach eine Datenbank und Sie nicht wollen, eine Anwendungsschicht auf der Server-Seite erstellen.

Ich weiß nicht wirklich wie Ihr ursprünglichen Vorschlag zur Verwendung der Thread-Pool und die Verbindungszeit Lizenzbeschränkungen durchzusetzen, da diese beiden Dinge für andere Zwecke verwendet werden.

Stattdessen zu lösen dies halte ich könnte den Benutzer ihre Lizenznummer in die GUI zum ersten Mal sie es verwenden, einzugeben. Dies kann in der Benutzer-Home-Verzeichnis für die späteren Starts der GUI gespeichert werden. Das gleiche passiert, wenn sie die GUI zum ersten Mal auf einer anderen Maschine zu starten. Dann wird für jede Transaktion der GUI mit der Datenbank machen, wäre es zunächst eine Lizenz Tisch oder ähnliches aktualisieren, um die Lizenz des Benutzers angeben, derzeit an einer Transaktion zu nehmen ist. Wo auch immer die gleiche Lizenz bereits in der Tabelle ist, als aktiv markiert, oder ähnlich, die GUI die Transaktion und Anzeige für den Benutzer ihrer Lizenz ist bereits von einem anderen Client.

würde ablehnen

Wenn Sie diese Idee mögen, denken sie durch weiter als ich. Ich kann einige Fehler in der Logik Sperren des Benutzers sehen heraus permanent :-)

Andere Tipps

Es scheint, wie Sie die Aktion von „Protokollierung in“ und explizit von der Datenbank „Abmelden“ machen wollen, vielleicht können Sie eine spezielle Tabelle in der Datenbank haben wollen, wo Ihre Anwendung einen Datensatz schreibt, wenn Sie sich einloggen oder aus.

Dann kann die Anwendung dieser Tabelle abfragen, um herauszufinden, ob andere Kopien der Anwendung gerade angemeldet sind.

Sie können zusätzliche Felder in der Tabelle enthalten sein sollen das Datum / die Zeit verfolgen, wenn Sie / heraus angemeldet, der Hostnamen und die IP-Adresse des Clients, die die Login / Logout durchgeführt, etc.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top