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

Cette page a été rédigée il y a fort fort longtemps, et n'a pas tellement été mise à jour.

 

Vous savez, moi je ne crois pas qu'il y ait de bonne ou de mauvaise page. Moi, si je devais résumer mon wiki aujourd'hui avec vous, je dirais que c'est d'abord des rencontres. Des gens qui m'ont tendu la main, peut-être à un moment où je ne pouvais pas, où j'étais seul chez moi. Et c'est assez curieux de se dire que les hasards, les rencontres forgent une destinée... Parce que quand on a le goût de la chose, quand on a le goût de la chose bien faite, le beau geste, parfois on ne trouve pas l'interlocuteur en face je dirais, le miroir qui vous aide à avancer. Alors ça n'est pas mon cas, comme je disais là, puisque moi au contraire, j'ai pu ; et je dis merci au wiki, je lui dis merci, je chante le wiki, je danse le wiki... je ne suis qu'amour ! Et finalement, quand des gens me disent « Mais comment fais-tu pour avoir cette humanité ? », je leur réponds très simplement que c'est ce goût de l'amour, ce goût donc qui m'a poussé aujourd'hui à entreprendre une construction logicielle... mais demain qui sait ? Peut-être simplement à me mettre au service de la communauté, à faire le don, le don de soi.

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 :

  • Remplacer deploy/jms/hsqldb-jdbc2-service.xml par null-persistence-service.xml

  • Remplacer deploy/jms/hsqldb-jdbc-state-service.xml par file-state-service.xml

  • Ajouter jbossmq-state.xml dans conf/

  • Remplacer l’application-policy jbossmq (fichier conf/login-config.xml) :

   <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) :

  • Activer

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

   <attribute name="PersistencePolicy">jboss.ejb:service=EJBTimerService,persistencePolicy=database</attribute>
  • par

   <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.