Change Hypersonic DB on Jboss to another DB

MPDL,Admin

=Standarddatenbank ändern in JBoss 5=

Der Anwendungsserver benötigt für etliche der Services, die er bereitstellt, eine Datenbank. Zu diesem Zweck hat er die Hypersonic SQL-Datenbank (HSQLDB), die eine speicherresidente, reine Java-Datenbank ist. Nun mag Hypersonic vielleicht für die Entwicklung akzeptabel sein, aber bevor Sie in die Produktion gehen, sollten Sie sie ersetzen. Und weil das so einfach ist, können Sie, wenn Sie sich mit einer anderen Datenbank wie etwa MySQL oder Postgresql wohler fühlen oder Ihre Anwendung Features einer bestimmten Datenbank wie z.B. Oracle nutzt, Hypersonic sogar schon in der Entwicklungsphase ersetzen.

Der Übergang von Hypersonic zu einer anderen Datenbank macht mehrere Schritte erforderlich. Erstens müssen Sie die Datenbank anlegen. Da dazu datenbankspezifische Verfahren erforderlich sind, verweisen wir Sie auf die Dokumentation Ihrer Datenbank. Dann sollten Sie den Namen der Datenbank sowie die Benutzerkennung und Ihr Passwort aufzeichnen, weil Sie diese im nächsten Schritt benötigen.

Zweitens müssen Sie eine Deskriptordatei für die Datenquelle (*-ds.xml) erstellen. Sie können alle Services und Anwendungen dieselbe Datenbank benutzen lassen oder für jeden eine andere Datenbank konfigurieren. Deklarieren Sie die nötigen Datenquellen, und konfigurieren Sie ddie Anwendungen und Services entsprechend.

Drittens müssen Sie für alle Anwendungen, die Hypersonic nutzen, die Konfigurationsdatei ändern, damit ab jetzt die neue Datenbank verwendet wird. Dafür gibt es zwei Möglichkeiten. Erstens: Wenn Sie im vorigen Schritt die Datenquelle definiert haben, könnten Sie für diese den Namen DefaultDS verwenden, da alle Services, die zuvor die Hyoersonic-Datenbank nutzten, nun die neue Datenbank verwenden, weil Anwendung und Services eine Datenbank über den JNDI-Namen der Datenquelle referenzieren.

Die zweite Möglichkeit, die Services zur Benutzung der neuen Datenquelle zu veranlassen, besteht darin, diese Datenquelle in den Konfigurationsdateien der Services zu referenzieren. Die Tabelle gibt an, welche Services die DefaultDS-Datenquelle benutzen und welche Konfigurationsdateien Sie auf die anderen Datenquelle umstellen müssen.

Da sich die Konfigurationsdateien im Anwendungsserver ändern, wenn neue Technologien eine Aktualisierung des Servers gebieten, führen Sie eine Textsuche nach DefaultDS aus, um alle Stellen zu finden, die Sie ändern müssen.

Außerdem entfernen Sie die server/xxx/deploy/hsqldb-ds.xml-Datei. Dieser Schritt ist unabdingbar,wenn Sie im vorigen Schritt die neue Datenquelle DefaultDS genannt haben. Doch auch wenn Sie einen anderen Namen gewählt haben, sollten Sie diese Datei entfernen, damit die Hypersonic-Datenbank nicht initialisiert wird. Zum Schluss müssen Sie die Hypersonic-JAR-Dateien, server/xxx/lib/hsqldb*.jar entfernen.

Für die meisten in der Tabelle aufgeführten Services reichen diese Schritte aus, doch einige wenige Services und Anwendungen erfordern mehr Änderungen, wie z.B. der Messaging-Service.

(Javid Jamae, Peter Johnson: JBoss im Einsatz - Den JBoss Application Server konfigurieren, Manning Publications Co. München 2009)

=Change Hypersonic DB to Postgresql on JBoss 4.2.x=

To replace hsqldb with another database, you have to change the DefaultDS of jboss.

Create a new user in your Database and create a new database with the owner of this new user.

Change to the deployment folder

cd {JBOSS-HOME}/server/default/deploy/

Remove the configuration file of the hypersonic db

rm hsqldb-ds.xml

Mount the directory where the files stay

mount /usr/local/src/fw/

Create a user on the Database-Server and create a Database with this owner

su postgres psql CREATE USER jboss WITH PASSWORD 'jboss'; CREATE DATABASE messaging WITH OWNER jboss; select * from pg_user; \c messaging

CREATE TABLE timers ( timerid character varying(80) NOT NULL,  targetid character varying(250) NOT NULL,  initialdate timestamp without time zone NOT NULL,  timerinterval bigint,  instancepk bytea,  info bytea,  CONSTRAINT timers_pk PRIMARY KEY (timerid, targetid) ) WITH ( OIDS=FALSE ); ALTER TABLE timers OWNER TO jboss;

exit

Copy the Postgres-DB configuration in this folder

cp /usr/local/src/fw/jboss/jboss-change-dsdb-postgres/postgres-ds.xml.

Open the postgres-ds.xml and change the connection-url, username and password.

Change to the data directory in PostgreSQL

cd /var/lib/pgsql/data

Modify the pg_hba.conf to allow connection from the created user.

vi pg_hba.conf

host   jboss jms_messaging IP/32   trust host   jboss jms_messaging IP/32   md5

Change the folder to the Libary of the server

cd {JBOSS-HOME}/server/default/lib

Copy the postgres driver to the library

cp /usr/local/src/fw/jboss/jboss-change-dsdb-postgres/postgresql-8.4-701.jdbc3.jar.

Change the configuration directory of jms cd {JBOSS-HOME}/server/default/deploy/jms/

Remove the Hypersonic configuration od jms

rm hsqldb-jdbc2-service.xml

And copy the postgresql configuration for jms to this directory.

cp /usr/local/src/fw/jboss/jboss-change-dsdb-postgres/postgres-jdbc2-service.xml. cp /usr/local/src/fw/jboss/jboss-change-dsdb-postgres/postgres-jdbc-state-service.xml.

Remove this files.

rm {JBOSS-HOME}/server/default/deploy/jms/hsqldb-jdbc2-service.xml rm {JBOSS-HOME}/server/default/deploy/jms/hsqldb-jdbc-state-service.xml rm {JBOSS-HOME}/server/default/lib/hsqldb.jar rm {JBOSS-HOME}/server/default/lib/hsqldb-plugin.jar

Now it should work.