Base de données intégrée à JBoss

Par défaut, JBoss utilise une base de données HypersonicDB, mais déconseille de la conserver pour la production. Il faut donc remplacer HypersoncDB par autre chose, ou se passer de base de données.



Remplacer HsqlDB

Pour remplacer HypersonicDB par une autre base de données, il suffit de modifier la datasource DefaultDS et la connecter à une base externe à JBoss. Cette procédure n'est pas tout à fait suffisante car JBoss tente de créer des tables et de les remplir, pour JMS.

Dans JBoss 4

Pour cela, les scripts de création et d'insertion de JBossMQ sont dans les fichiers deploy/jms/hsqldb-jdbc-state-service.xml et deploy/jms/hsqldb-jdbc2-service.xml. Il faut donc remplacer ces fichiers avec les équivalents adaptés à votre base. On trouve des exemples prêts à l"emploi dans le répertoire docs/examples/jms, pour DB2, Derby, Microsoft SqlServer, MySQL, Oracle, PostgreSQL et Sybase.

Dans JBoss 5

La principale différence dans JBoss 5 est le remplacement de JBossMQ par JBoss Messaging. Si le nouveau moteur de JMS doit aussi créer ses propres tables, les scripts ne sont plus que dans un fichier : deploy/messaging/hsqldb-persistence-service.xml. Il faut donc remplacer ce fichier par un exemplaire propre à votre base. En jetant un œil au contenu du répertoire docs/examples/jms, on constate que la liste des bases a légèrement évolué : DB2, Microsoft SqlServer, MySQL (InnoDB et NDB), Oracle, PostgreSQL et Sybase. Derby a disparu, mais une petite recherche sur le Web permet de trouver un exemple qui fonctionne, comme par exemple dans le Trac de Bedework.


Retirer DefaultDS

Pour se passer de base de données, il faut couper toutes les dépendances avec la datasource DefaultDS et désinstaller cette dernière.

Cette procédure à été testée avec JBoss 4.0 et JBoss 4.2.

JMS

Si vous n'utilisez pas les services JMS, supprimez le répertoire deploy/jms

Si vous voulez conserver JMS, il faut modifier les paramètres de persistence.

Le fichier deploy/jms/hsqldb-jdbc2-service.xml concerne la persistance des vieux messages, il peut être remplacé par null-persistence-service.xml (cf. docs/examples/jms).

Le fichier deploy/jms/hsqldb-jdbc-state-service.xml concerne la persistance de l'état JMS (souscriptions persistentes), il peut être remplacé par file-state-service.xml (cf. docs/exemples/jms). Dans ce cas, il faut ajouter jbossmq-state.xml dans conf/ ou un de ses sous-répertoires, et modifier le paramétrage "jbossmq" dans conf/login-config.xml : remplacer le DatabaseServerLoginModule par le DynamicLoginModule.

Récapitulatif :

   <application-policy name = "jbossmq">
      <authentication>
         <login-module code = "org.jboss.mq.sm.file.DynamicLoginModule"
            flag = "required">
            <module-option name = "unauthenticatedIdentity">guest</module-option>
            <module-option name = "sm.objectname">jboss.mq:service=StateManager</module-option>
         </login-module>
      </authentication>
   </application-policy>

Timer

Dans le fichier deploy/ejb-deployer.xml, il faut remplacer jboss.ejb:service=EJBTimerService,persistencePolicy=database par jboss.ejb:service=EJBTimerService,persistencePolicy=noop (commentaire juste au dessus) et reporter la modification dans les depends du fichier.

Cela permet de ne plus stocker l'état du service de Timer.

Récapitulatif (dans deploy/ejb-deployer.xml) :

 <mbean code="org.jboss.ejb.txtimer.NoopPersistencePolicy" name="jboss.ejb:service=EJBTimerService,persistencePolicy=noop"/>
   <attribute name="PersistencePolicy">jboss.ejb:service=EJBTimerService,persistencePolicy=database</attribute>
   <attribute name="PersistencePolicy">jboss.ejb:service=EJBTimerService,persistencePolicy=noop</attribute>

Sécurité

En plus de la modification concernant jbossmq, il faut retirer le HsqlDbRealm dans le fichier conf/login-config.xml.

Générateur de clé

Le générateur de clé est généralement utilisé en EntityBean CMP. Il peut donc souvent être retiré en supprimant le fichier deploy/uuid-key-generator.sar.

Si vous souhaitez le conserver, il faut modifier la référence à la datasource, en modifiant META-INF/jboss-service.xml.

DataSource

Toutes les dépendances sont donc retirées, nous pouvous maintenant supprimer le datasource : deploy/hsqldb-ds.xml.