Was ich tun möchte: Meine Anwendung hat eine vollständige Verbindung zu einer Derby-DB, und ich möchte parallel (mit einem anderen Tool) in der DB (schreibgeschützt) herumstochern.
Ich bin nicht sicher, wie Derby tatsächlich intern arbeitet, aber ich verstehe, dass ich nur 1 aktive Verbindung zu einer Derby DB haben kann. Da die Datenbank jedoch nur aus Dateien auf meiner Festplatte besteht, kann ich im schreibgeschützten Modus keine weiteren Verbindungen zu ihr öffnen?
Gibt es irgendwelche Werkzeuge, um genau das zu tun?
Es gibt zwei Möglichkeiten, Apache Derby DB auszuführen.
Sie können den Typ anhand der Treibergröße erkennen. Wenn der Treiber mehr als 2 MB hat, verwenden Sie die eingebettete Version.
Wenn Sie die Derby-Engine (Server oder Embedded) starten, erhält sie exklusiven Zugriff auf Datenbankdateien.
Wenn Sie von mehr als einer Java Virtual Machine (JVM) aus auf eine einzelne Datenbank zugreifen müssen, müssen Sie eine Serverlösung installieren. Sie können Anwendungen von mehreren JVMs, die auf diese Datenbank zugreifen müssen, erlauben, eine Verbindung zum Server herzustellen.
Weitere Informationen finden Sie unter Systemverhalten beim Double-Boot .
Ich weiß, dass dies eine alte Frage ist, aber ich dachte, ich könnte etwas mehr Details zu einer Lösung hinzufügen, da die Links in der derzeit akzeptierten Antwort gebrochen sind.
Es ist möglich, den Derby Network Server in einer JVM auszuführen, die bereits die eingebettete Datenbank verwendet. Der Code, der die eingebettete Derby-Datenbank verwendet, muss nichts ändern und kann weiterhin die DB verwenden, aber wenn Derby Network Server gestartet wurde, können andere Programme eine Verbindung mit Derby herstellen und auf die Datenbank zugreifen.
Alles, was Sie tun müssen, ist sicherzustellen, dass derbynet.jar im Klassenpfad ist
Und dann können Sie einen der folgenden tun
Fügen Sie die folgende Zeile in die Datei derby.properties ein: derby.drda.startNetworkServer=true
Geben Sie die Eigenschaft als Systemeigenschaft bei Java-Start an
java -Dderby.drda.startNetworkServer=true
Sie können die NetworkServerControl-API verwenden, um den Netzwerkserver über einen separaten Thread innerhalb einer Java-Anwendung zu starten:
NetworkServerControl server = new NetworkServerControl();
server.start (new PrintWriter(System.out));
Weitere Details hier: Ссылка
Beachten Sie, dass dadurch keine Sicherheit für diese Verbindung aktiviert wird. Daher ist es keine gute Idee, dies auf einem Produktionssystem zu tun. Es ist jedoch möglich, Sicherheit hinzuzufügen, und das ist hier dokumentiert: Ссылка
Zwei andere Ideen:
Tags und Links database-connection derby