Apache Derby – właściwości systemu i baz danych
Aby system Derby i baza danych były przystosowane do naszych potrzeb należy skonfigurować system Derby i bazę Derby poprzez ustawienie szeregu właściwości.
Zasięg właściwości
Ustawiane właściwości mogą mieć różne zasięgi (zakresy) (scope):
- system – ustawienia dotyczą wszystkich baz danych w systemie Derby oraz wszystkich konglomeratów. Niektóre właściwości mogą być ustawione tylko dla tego zakresu
- baza danych – dotyczą tylko tej jednej bazy danych. Niektóre właściwości mogą być ustawiane wyłącznie w tym zakresie
- konglomerat (tabela, indeks) – ustawienie dotyczy tylko konglomeratów, które będą tworzone po ustawieniu właściwości. Ustawienie nie dotyczy konglomeratów już utworzonych
Trwałość właściwości
Zależy od zakresu.
- zakres ‘baza danych’ – właściwości są przechowywane w bazie i dlatego są trwałe. Mogą być zmienione z poziomu kodu Java lub nadpisane przez właściwości o zakresie ‘system’. Jeśli jakaś właściwość dla zakresu ‘baza danych’ zostanie ustawiona jako ‘null’ to zostanie usunięta z listy właściwości tej bazy danych, a właściwość zostanie pobrana z właściwości o zakresie ‘system’ o ile taka właściwość dla systemu może zostać ustawiona i o ile właściwość
derby.database.propertiesOnly
nie została w bazie ustawiona (ustawienie tej właściwości na ‘true’ nie pozwala na nadpisywanie właściwości o zakresie ‘baza danych’ przez właściwości o zakresie ‘system’) - zakres ‘system’
- właściwości ustawione z poziomu programu Java lub linii poleceń – nie są w żaden sposób utrwalane – obowiązują do zamknięcia JVM lub zamknięcia aplikacji
- właściwości ustawione w pliku ‘derby.properies’ – obowiązują do:
- zmiany wartości i restartu systemu
- usunięcia pliku i restartu systemu
- uruchomienia bazy danych poza systemem z plikiem – co jest rówoznaczne poprzedniemu
Plik derby.properties musi być umieszczony w folderze systemu Derby. W środowisku ‘server’ jest – oczywiście – umieszczony na serwerze.
Pierwszeństwo właściwości
- Właściwości o zakresie ‘system ’ ustawione z poziomu kodu Java lub poziomu linii poleceń
- Właściwości o zakresie ‘baza danych’
- Właściwości o zakresie ‘system’ ustawione w pliku derby.properties
Można to zrozumieć np. tak:
Jeśli jakaś właściwość jest ustawiona na poziomie 1,2,3 – będzie użyta wartość 1.
Jeśli jakaś właściwość jest ustawiona na poziomie 2, 3 – będzie użyta wartość 2.
Jeśli jakaś właściwość jest ustawiona na poziomie 3 – będzie użyta wartość 3.
Ze względów bezpieczeństwa – aby zapobiec nadpisywaniu właściwości o zakresie ‘baza danych’ przez właściwości o
zakresie ‘system’ – należy ustawić właściwość derby.database.propertiesOnly=true
.
Ustawianie i odczytywanie właściwości
Zakres ‘system’
Właściwość w systemie (Windows) może zostać ustawiona z poziomu aplikacji, przed uruchomieniem silnika Derby:
Properties props = System.getProperites(); props.setProperty(„nazwa”, „wartość”);
Tak ustawiona wartość może być łatwo odczytana:
String prop = props.getProperty(„nazwa”)
Właściwości systemowe ustawione w pliku derby.properties nie mogą być odczytane w taki
sposób z systemu.
Informacje systemowe można też odczytywać przy użyciu bibliotek JMX – napiszemy o tym w innym wpisie.
Zakres ‘baza danych’
Są ustawiane i odczytywane z poziomu SQL poprzez użycie procedur systemowych:
- do zapisywania:
SYSCS_UTIL.SYSCS_SET_DATABASE_PROPERTY
- do odczytywania:
SYSCS_UTIL.SYSCS_GET_DATABASE_PROPERTY
Sposób użycia procedur systemowych będzie pokazany w rozdziale poświęconym CallableStatemen
t w
części omawiającej JDBC.
Środowisko klient-serwer
Właściwości systemowe muszą być ustawione dla systemu na serwerze, a więc tam musi znajdować się plik derby.properties.
Aplikacja kliencka może ustawić właściwości bazy danych na serwerze (jeśli ma stosowne uprawnienia) ponieważ właściwości te są ustawiane za pomocą SQL.
Właściwości dynamiczne i statyczne
Właściwości dynamiczne mogą być ustawione przy uruchomionym silniku Derby, czyli nie ma potrzeby ponownego uruchamiania silnika. Niektóre z właściwości dynamicznych zaczynają obowiązywać od razu, inne są dostępne dopiero od następnego połączenia.
Właściwości statyczne, aby ich zmiana zaczęła obowiązywać, wymagają restartu systemu Derby.
Właściwości ustawione z pliku derby.properties są zawsze statyczne, gdyż są pobierane przy starcie silnika Derby.
Potencjalnie dynamiczne mogą być właściwości:
- ustawione jako właściwości o zasięgu ‘baza danych’
- właściwości o zasięgu ‘system’ przy pomocy obiektu Properties w aplikacji, w którą wbudowana jest baza danych.