Embedded DB, die aus mehreren JVMs gestartet werden kann?

Status
Nicht offen für weitere Antworten.

Stinner

Mitglied
Hallo,
ich arbeite momentan mit Derby in einer Applikation, aber stehe seit Wochen vor einem ungelösten Problem.
Meine Applikation muss später auf einem Netzlaufwerk liegen und mehrere Leute sollen sie öffnen können. Ich habe keinen Server zur Verfügung.
Das Problem ist, dass eine Derby DB in Embedded Mode nur aus einer JVM gestartet werden kann.

Momentan bekommt Person B eine Meldung, dass die Datenbank bereits geöffnet ist, wenn Person A vorher angeklickt hat. Mein Ziel ist es aber, dass Person B, ähnlich wie bei Excel, einfach eine Meldung bekommt, dass er nur im Read-Only öffnen kann.

Zu meiner Frage:
Kennt jmd eine Embedded DB, mit der ich sowas machen könnte bzw. stand jmd mal vor einem ähnlichen Problem.Hier läuft ja gerade eine Umfrage und ich hab mal bei H2 geschaut und da stand auch, dass man eine DB auch nur aus einer JVM starten kann. Gibt es eine Lösung ohne einen Server?
Was könnte ich tun?
Daten über files selbst verwalten ist eine Option, aber dann verliere ich alle Vorteile eines DBMS, bzw. müsste alles selbst machen.

Vielen Dank für Antworten,
Gruß
 

Stinner

Mitglied
Kann ich nicht wirklich beantworten.
Ist kein privates Projekt.
Als ich hier in der Firma gefragt habe, ob es möglich sei einen Server zu bekommen, wurde mir geantwortet, dass es hier per Definition keine Server gibt.

Ich habe also nur das Netzlaufwerk.
Ich versuche momentan rauszufinden, wie Derby die DB sperrt. Über die file "db.lck" geschieht es nicht (nur?). dann könnte ich das evtl umgehen...
 
M

maki

Gast
dann könnte ich das evtl umgehen...
Kannst du nicht, was du willst geht einfach nicht.
Oder dachtest du Derby sperrt die DB zum Spass? Datenkonsistenz...

Brauchst einen Server, Definition: Derby als Server starten, fertig. Die Maschine von dem Derby aus gestartet wurde ist dann der Server.
 

tfa

Top Contributor
Als ich hier in der Firma gefragt habe, ob es möglich sei einen Server zu bekommen, wurde mir geantwortet, dass es hier per Definition keine Server gibt.
Das ist doch ganz einfach. Du nimmst einen Client, packst Linux drauf und lässt ihn 24h/Tag laufen. Fertig ist der Server. Ich mach hier sowas andauernd :D
Wenn möglich, besorgst du noch eine USV.

Ich habe also nur das Netzlaufwerk.
Ich versuche momentan rauszufinden, wie Derby die DB sperrt. Über die file "db.lck" geschieht es nicht (nur?). dann könnte ich das evtl umgehen...

Wenn du willst, dass die DB funktioniert, solltest du nicht mit sowas rumspielen.
 

robertpic71

Bekanntes Mitglied
Eine Lösung ala Excel sollte man schon hinbekommen. Ich kann Weg allerdings nur für H2 beschreiben:
1.) Öffnen mit File-Modus und Sperre
Ok --> Sperrdaten (User/IP) schreiben
Nicht Ok --> Datei mit Read-Only und File-Lock NO öffnen, Hinweis an den Sachbearbeiter, keine Updates "anbieten"

2.) Variante 2 wäre, dass der erste der sich anmeldet auch den TCP-Dienst für die anderen startet und "warnt" wenn sich der Benutzer abmelden will, wenn noch andere Benutzer angemeldet sind. Die Daten dafür bekommt man möglicherweise von H2, sonst muss man selber mitprotokollieren.

3.) Variante 3: Es gibt unterschiedliche Startmöglichkeiten für das Programm: Als Server oder als Client. Der Client könnte die DB wieder mit Read-Only lesen und die IP des aktuellen Servers ermitteln.

Alles keine "ganz schönen" Lösungen - aber immerhin.

/Robert
 

Stinner

Mitglied
Also erstmal danke für die Antworten, aber:

+ ich bin hier nur als studentische Aushilfskraft und bin auf Infos der Mitarbeit angewiesen.Habe nach einem Server (sprich zentralen Rechner, auf den jeder Zugriff hat) gefragt und bekam als antwort, dass es hier keinen gibt.

+ derby als server auf einem laptop eines mitarbeiter zu starten kommt nicht in frage, da niemand immer da ist und niemand anderen zugriff auf seinen rechner geben will.

Habe also die Möglichkeit, dass Projekt an dieser Stelle zu beenden oder ich muss halt irgendwie mit den Sperrmechanismen rumspielen bzw. versuchen die zu umgehen.
Außer es gibt evtl eine andere Engine oder eine andere methode?
 

Stinner

Mitglied
Eine Lösung ala Excel sollte man schon hinbekommen. Ich kann Weg allerdings nur für H2 beschreiben:
1.) Öffnen mit File-Modus und Sperre
Ok --> Sperrdaten (User/IP) schreiben
Nicht Ok --> Datei mit Read-Only und File-Lock NO öffnen, Hinweis an den Sachbearbeiter, keine Updates "anbieten"

Genauso etwas will ich ja. wenn das mit H2 klappt, dann steige ich um..
Bei derby habe ich das probiert, aber es gibt die option file-lock no nicht. wenn man im read-only modus die DB öffnet, wird sie trotzdem gesperrt, was meiner meinung nach blödsinn ist, dass man das nicht abstellen kann bzw. meines wissens das nicht abstellen kann
 
M

maki

Gast
Habe also die Möglichkeit, dass Projekt an dieser Stelle zu beenden oder ich muss halt irgendwie mit den Sperrmechanismen rumspielen bzw. versuchen die zu umgehen.
Solche Dinge regelt man im Vorfeld, jetzt kannst das Projekt an dieser Stelle nur noch beenden.
 

robertpic71

Bekanntes Mitglied
Die Steuerung erfolgt über den Connectionstring:

Filelock:
jdbc:h2:<url>;FILE_LOCK=NO;

Read-Only (rws):
...;ACCESS_MODE_LOG=r;ACCESS_MODE_DATA=r

Wobei das 2 verschiedene Einstellungen sind. Also read-only heißt noch nicht, dass es keinen Filelock gibt.

Dein Syntax daher:
jdbc:h2:file:x:/Dir/DBname;FILE_LOCK=NO;ACCESS_MODE_LOG=r;ACCESS_MODE_DATA=r

für den read-only ohne Filelock. Das read-only ist nur zur Sicherheit - falls in der Applikation doch irgendwo ein Update versucht wird.

Der normale Zugriff erfolgt mit:
jdbc:h2:file:x:/Dir/DBname

Wenn er keine Verbindung zustande bringt, kannst du mit der read-only Connection arbeiten bzw. ev. den Sperrer auslesen.

/Robert
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul H2 Embedded DB und Gigabytes an Daten Datenbankprogrammierung 0
thet1983 Derby/JavaDB Embedded Driver Datenbankprogrammierung 7
L H2 Embedded H2 Datenbank über Netzwerk zugreifen? Datenbankprogrammierung 0
J Hibernate + HSQL embedded Datenbankprogrammierung 2
H H2 Datenbank Embedded? Datenbankprogrammierung 8
S Derby/JavaDB Probleme beim anlegen einer embedded DB Datenbankprogrammierung 13
D Embedded Derby Datenbank Datenbankprogrammierung 4
E embedded DB Datenbankprogrammierung 8
N suche embedded key-value-datenkank Datenbankprogrammierung 2
P Embedded Database und große Datenmengen Datenbankprogrammierung 23
C Embedded DB für Java Datenbankprogrammierung 26
F H2 embedded Datenbankprogrammierung 4
E H2 Verständnisfrage "Embedded"?? Datenbankprogrammierung 6
G Embedded Datenbank Datenbankprogrammierung 4
K Java DB Embedded DB Datenbankprogrammierung 8
M Embedded Datenbank? Datenbankprogrammierung 2
D Firebird Embedded dlls Datenbankprogrammierung 3
G embedded H2; wie tables anlegen? Datenbankprogrammierung 3
J Zahlungseingänge von mehreren Kunden wie am besten abbilden in der Datenbank ? Datenbankprogrammierung 8
E SQLite Datenbank durchsuchen mit mehreren Suchbegriffen Datenbankprogrammierung 10
S MySQL Befüllen von mehreren Spalten Datenbankprogrammierung 1
I JPA Liste mit mehreren Entitäten Datenbankprogrammierung 22
R Transaktionen von mehreren Anwendungen aus - JDBC Datenbankprogrammierung 3
M Problem mit mehreren Datasourcen Datenbankprogrammierung 3
D Oracle Funktion mit mehreren Out Parametern ausführen? Datenbankprogrammierung 3
L MySQL Datenbank beschreiben mit mehreren Threads Datenbankprogrammierung 18
0 Filtern nach mehreren Kriterien Datenbankprogrammierung 4
H Group By mit mehreren Spalten Datenbankprogrammierung 2
S Verständnisproblem mit mehreren DAOs Datenbankprogrammierung 7
S Verkettung von Spalteninhalten aus mehreren Zeilen Datenbankprogrammierung 10
D aus mehreren sql tabellen matchen und sortieren Datenbankprogrammierung 6
P [Hibernate] Zwischentabelle mit mehreren Feldern Datenbankprogrammierung 7
C Hibernate-Mapping bei mehreren FK´s auf die selbe Tabelle Datenbankprogrammierung 12
J JDBC mit mehreren Threads. Datenbankprogrammierung 8
T [jdbc] einen Eintrag aus mehreren Tabellen löschen (Batch) Datenbankprogrammierung 3

Ähnliche Java Themen

Neue Themen


Oben