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.

  1. 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’)
  2. 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

  1. Właściwości o zakresie ‘system ’ ustawione z poziomu kodu Java lub poziomu linii poleceń
  2. Właściwości o zakresie ‘baza danych’
  3. 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 CallableStatement 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.