WebSphere - konfiguracja źródła danych PostgreSQL
Aby skonfigurować źródło danych PostgreSQL w WebSphere, należy wykonać kilka kroków:
- Zainstalować bibliotekę sterownika JDBC PostgreSQL w odpowiednim katalogu WebSphere.
- Skonfigurować aliasy uwierzytelniania JAAS dla źródła danych.
- Zdefiniować dostawcę JDBC dla PostgreSQL.
- Utworzyć źródło danych JDBC, które będzie używane przez aplikacje działające na serwerze WebSphere.
- Ustawić parametry połączenia, takie jak nazwa bazy danych, adres serwera i numer portu.
- Skonfigurować dodatkowe parametry puli połączeń, takie jak limit wieku połączeń.
- Zastosować zmiany i uruchomić serwer WebSphere.
- Przetestować połączenie z bazą danych PostgreSQL, aby upewnić się, że wszystko działa poprawnie.
Instalacja biblioteki sterownika JDBC
Aby zainstalować bibliotekę sterownika JDBC PostgreSQL należy ją pobrać z zewnętrznego repozytorium plików. Najlepszym repozytorium z wymaganymi bibliotekami jest Maven2 Repository. Aby pobrać wymaganą wersję sterownika JDBC, możesz użyć poniższych linków:
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.3.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.postgresql/postgresql -->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>42.7.3</version>
</dependency>
Pobrany plik należy umieścić w środowisku zainstalowanego produktu WebSphere w katalogu $WEBSPHERE_HOME/jdbcdrivers/PostgreSQL
, gdzie $WEBSPHERE_HOME
to pełna ścieżka do zainstalowanego produktu WebSphere. Poniżej przykład postępowania dla instalacji IBM BAW 21.0.3:
export WEBSPHERE_HOME=/opt/IBM/BAW/21.0.3
mkdir -p $WEBSPHERE_HOME/jdbcdrivers/PostgreSQL
cd $WEBSPHERE_HOME/jdbcdrivers/PostgreSQL
wget -b -t0 https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.2/postgresql-42.3.2.jar
Bardzo możliwym jest to, że podczas pobierania pliku wystąpi błąd SSL podobny do poniższego:
[bawadmin@bpmbaw21test PostgreSQL]$ tail -f wget-log
--2025-01-30 23:21:47-- https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.2/postgresql-42.3.2.jar
Translacja repo1.maven.org (repo1.maven.org)... 146.75.120.209, 2a04:4e42:8e::209
Łączenie się z repo1.maven.org (repo1.maven.org)|146.75.120.209|:443... połączono.
BŁĄD: Żaden certyfikat nie został przedstawiony przez `repo1.maven.org'.
W takiej sytuacji można użyć opcji --no-check-certificate
w poleceniu wget
, aby zignorować problemy z certyfikatem. Przykład:
wget -b -t0 --no-check-certificate https://repo1.maven.org/maven2/org/postgresql/postgresql/42.3.2/postgresql-42.3.2.jar
Konfiguracja uwierzytelniania JAAS dla źródła danych
Logujemy się do konsoli administracyjnej WebSphere użytkownikiem z rolą administratora. Robimy to za pomocą przeglądarki WWW podając adres (najczę ściej, aby się upewnić jaki jest konkretny adres skontaktuj się z administratorem/instalatorem systemu):
https://<adres_serwera>:<port>/ibm/console
Przykład adresu serwera: https://localhost:9043/ibm/console
Po zalogowaniu przechodzimy do formularza konfiguracji aliasów uwierzytelniania JAAS. Przechodzimy następującą ścieżkę (począwszy od menu z lewej strony): Zabezpieczenia (ang. Security) > Zabezpieczenia globalne (ang. Global security). Szukamy na otwartej stronie Usługa uwierzytelniania i autoryzacji Java(JAAS) (ang. Java Authentication and Authorization Service) - klikamy na "+" (rozwijamy kategorię) i wybieramy link Dane uwierzytelniania J2C (ang. J2C authentication data):
Pojawimy się na stronie prezentującej listę zdefiniowanych uwierzytelnień (aliasy reprezentujące pary "użytkownik & hasło"):
Definiujemy uwierzytelnianie do bazy danych PostgreSQL (na przykładzie użytkownika bazy danych systemu Mercury):
- Alias: mercuryDB (nazwa aliasu - później wykorzystamy podczas definicji źródła danych)
- ID użytkownika (ang. User ID): mercury (nazwa użytkownika bazy danych)
- Hasło (ang. Password): secret (hasło użytkownika bazy danych)
Definiowanie dostawcy JDBC
Aby skonfigurować źródło danych JDBC dla PostgreSQL, musimy najpierw zdefiniować dostawcę JDBC. Przechodzimy do formularza konfiguracji dostawcy usług JDBC: Zasoby (ang. Resources) > JDBC > Dostawcy usług JDBC (ang. JDBC providers). Wybieramy zakres (obszar) zawierający tworzonego dostawcę np. Cluster=SingleCluster
. Gdy definicja dostawcy JDBC dla baz danych PostgreSQL nie istnieje, musimy utworzyć nową - uruchamiamy kreatora tworzenia nowego dostawcy.
Krok 1. Tworzenie noweho dostawcy JDBC
- Wybieramy typ bazy danych - na liście nie ma serwera PostgreSQL - wybieramy "Zdefiniowany przez użytkownika" (ang. User-defined)
- Nazwa klasy implementacji (amg. Implementation class name):
org.postgresql.jdbc3.Jdbc3ConnectionPool
- Nazwa (ang. Name): - nazwa dostawcy - później się ną posłużymy podczas definiowania źródła JDBC. Ustawiamy odpowiadającą nam wartość np.
PostgreSQL JDBC Provider
- Opis (ang. Description): - opcjonalnie wprowadzamy opis definiowanego dostawcy.
Krok 2. Definiowanie ścieżki do biblioteki z implementacją sterownika JDFBC
Ścieżka klasy (ang. Class path): pełna ścieżka do załadowanej biblioteki z driver'em PostgreSQL np: /opt/IBM/BPM/v8.5.5/jdbcdrivers/PostgreSQL/postgresql-43.3.2.jar
Krok 3. Podsumowanie
Kończymy akcję tworzenia źródła danych naciskając przycisk Koniec (ang. Finish).
Definicja źródła danych
Przechodzimy do formularza konfiguracji źródła danych JDBC. Przechodzimy następującą ścieżkę (począwszy od menu z lewej strony): Zasoby (ang. Resources) > JDBC > Źródła danych (ang. Data sources). Wybieramy zakres (obszar) zawierający tworzonego dostawcę np. Cluster=SingleCluster
. Tworzymy nowe źródło danych dla interesującej nas bazy danych (chyba, że istnieje) - uruchamia nam się kreator tworzenia nowego źródła danych:
Krok 1. Podstawowe dane źródła danych
- Nazwa (ang. Data source name) - nazwa źródła danych np.
PostgreSQL DataSource
alboMercuryDb
- nazwa jest dowolna, ważne by jednoznacznie reprezentowała znaczenie/wykorzystanie tego źródła danych - Nazwa JNDI (ang. JNDI name) - nazwa JDNI pod jaką ma być bindowane źródło danych np.
jdbc/SamplePostgreSQL
albojdbc/MercuryDB
- nazwa ta wykorzystywana jest w aplikacjach webowych w celu pobrania danego źródła danych.
Fragment przykładowej implementacji odwołania się do nazwy JNDI w aplikacji (język Java):
InitialContext ctx = new InitialContext();
Connection conn = ctx.lookup("jdbc/MercuryDB");
Krok 2. Wybieramy dostawcę JDBC
Na formularzu zaznaczamy radiobox Zaznacz istniejącego dostawcę JDBC (ang. Select an existing JDBC provider). Z listy wyboru wybieramy nazwę1 wcześniej stworzonego dostawcy JDBC np.: PostgreSQL JDBC Provider
.
Krok 3. Wybieramy nazwę klasy pomocniczej skłądnicy danych
Ustawiamy nazwę klasy pomocniczej składnicy danych (ang. Data store helper class name): com.ibm.websphere.rsadapter.GenericDataStoreHelper
.
Krok 4. Ustawienia zabezpieczeń
- Alias uwierzytelniania zarządzanego przez komponent (ang. Component-managed authentication alias): wybieramy nazwę wcześniej przez nas stworzonego aliasu JAAS
- Wartości pozostałych pól nie uzupełniamy...
Krok 5. Podsumowanie tworzonego źródła danych
Podsumowanie i przycisk Koniec (ang. Finish).
Konfiguracja połaczenia do bazy danych w źródle danych
Utworzyliśmy źródło danych, ale jeszcze nie dodaliśmy odpowiednich namiarów na bazę danych (nigdzie nie podaliśmy nazwy hosta, numeru portu, nazwę bazy danych). Po zapisaniu informacji z kreatora nowe źródło danych pojawi się nam w tabelce źródeł.
Powyższa ilustracja prezentuje kroki wykorzystania mechanizmu wyszukiwania danych w tabeli w celu znalezienia interesującej nas definicji źródła danych:
- Pokaż formularz filtrowania danych.
- Wprowadź wyszukiwaną nazwę źródła danych - wprowadź pełną nazwę lub fragment wykorzystując znaku gwiazdki (
*
) jako kryterium "wildcard" np.Mer*
. - Wciśnij przycisk Idź (ang. Go) w celu uruchomienia wyszukiwania.
- W tabeli znajdziesz poszukiwaną pozycję.
Klikamy na pozycję z nazwą stworzonego przed chwilą źródła danych i przechodzimy do formularza edycji. Po otworzeniu formularza definicji źródła danych wyszukujemy i klikamy na link Właściwości niestandardowe (ang. Custom properties):
Na liście parametrów wyszukujemy te, które odpowiedzialne są za definicję połączenia do bazy danych, czyli:
databaseName
na odpowiednią wartość wskazującą na nazwę bazy danych. Przykład dla nazwy bazy danych Mercury:mercury-db
serverName
- nazwa serwera bazy danych albo jego IP np.192.168.0.12
portNumber
- numer portu nasłuchu usługi serwera bazy danych np.5432
Wykorzystaj mechanizmy filtrowania danych w tabeli aby szybciej wyszukać interesujące Cię parametry.
- databaseName
- serverName
- portNumber
Dodatkowe parametry puli połączeń
Warto pamiętać by dokonać zmian parametrów puli połączeń. Aby to zrobić, przechodzimy do formularza edycji źródła danych, klikamy w link Właściwości puli połączeń (ang. Connection pool properties).
Pod uwagę warto wziąć parametr Limit wieku (ang. Aged timeout).
Limit wieku (ang. Aged timeout)
Wg dokumentacji wartość parametru Limit wieku (ang. Aged timeout) powinna być większa od wartości parametru Czas wykorzystania (ang. Reap Timeout) oraz powinna być mniejsza od czasu życia nieużywanych połączeń na serwerze bazy danych (w przypadku PostgreSQL decyduje o tym parametr wait_timeout). Jeśli parametr Limit wieku ma wartość domyślną zero to aktywne połączenia w puli mogą zostać zamknięte przez serwer bazy danych co spowoduję błąd braku połączenia z bazą podczas próby użycia takiego połączenia.
Testowanie połączenia do bazy danych
Oczywiście, konfiguracja ma na celu zdefiniowanie działającego połączenia pomiędzy naszą aplikacją webową a bazą danych. Działanie połączenia możemy zweryfikować na formularzu definicji źródła danych. Aby uruchomić test połaczenia należy wcisnąć przycisk Test połączenia (ang. Test connection).
Test działa tylko i wyłacznie na serwerze węzła! Aby test połaczenia zadziałał konfiguracja źródła danych musi znaleźć się na węźle, w zakresie którym dane źródło zostało utworzone. Zweryfikuj czy wcześniej, przed przystąpieniem do testu, nastąpiła synchronizacja konfiguracji do węzła, albo sam ręcznie ją wywołaj. (1) Przedź do Administracja systemem (ang. System Administration) > Węzły (ang. Nodes). (2) Wybież z listy węzłów nazwę węzła, która Cię interesuje i (3) wciśnij przycisk Synchronizuj (ang. Synchronize). Ikonka statusu w tabeli pokazuje czy dane węzła zostały zsynchronizowane: