Voir également :
La connexion à la base de données est faite par Hibernate. Les propriétés ci-dessous sont définies dans le fichier /properties/config.properties et utilisées pour renseigner les fichiers /properties/dao/hibernate/hibernate-jdbc.cfg.xml et /properties/dao/hibernate/hibernate-jndi.cfg.xml, ainsi que le fichier conf/server.xml de Tomcat pour les déploiements quick-start.
Création de la base de données
L'application se charge de créer la structure de la base de données, mais la base de données doit exister avant de lancer l'application. C'est à l'exploitant de créer la base et de s'assurer que l'utilisateur déclaré peut créer des structures (tables, champs, ...) et lire/écrire dans la base.
Propriétés propres au SGBD
Pilote
Le pilote de la base de données (par défaut MySql JDBC) :
#hibernate.connection.driver_class=com.mysql.jdbc.Driver
Pour PostgreSQL :
hibernate.connection.driver_class=org.postgresql.Driver
Dialecte Hibernate
Le dialecte Hibernate, par défaut InnoDB pour MySql :
#hibernate.dialect=org.hibernate.dialect.MySQLInnoDBDialect
Pour PostgreSQL :
hibernate.dialect=org.hibernate.dialect.PostgreSQLDialect
Propriétés JDBC
L'application utilise toujours JDBC pour l'accès à la base de données en ligne de commande (tâche asynchrones).
URL (requise)
L'URL de la base de données, par défaut helpdesk sur localhost :
#hibernate.connection.jdbc.url=jdbc:mysql://localhost/helpdesk
Pour PostgreSQL :
hibernate.connection.jdbc.url=jdbc:postgresql://localhost:5432/helpdesk
Authentification (requise)
L'authentification à la base de données :
#hibernate.connection.jdbc.username=admin #hibernate.connection.jdbc.password=secret
Propriétés JNDI
L'application peut, pour les requêtes web, utiliser JNDI pour l'accès à la base de données. Cela est conseillé en production pour des raisons de performances, et cela pemet également de surveiller la charge de la base de données grâce à des outils comme LambdaProbe (voir 25 Surveillance des applications).
Si l'on préfère utiliser JDBC pour accéder à la base même depuis les requêtes web, il suffit de positionner :
hibernate.useJndi=false
Pour utiliser un pool de connection défini dans Tomcat par exemple de cette manière dans le contexte de l'application :
<Resource name="jdbc/esup-helpdesk" auth="Container" type="javax.sql.DataSource" username="admin" password="secret" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/rennes1-20080905" maxActive="100" maxIdle="10" maxWait="10000" removeAbandoned="true" removeAbandonedTimeout="60" logAbandoned="true" />
On indiquera simplement le nom de la source de données à l'application :
hibernate.useJndi=true hibernate.connection.jndi.datasource=jdbc/esup-helpdesk
L'application détectera automatiquement dans quelle mode (web ou ligne de commande) elle se trouve, et utilise alors l'accès JNDI ou JDBC.
Connecteur JDBC
esup-helpdesk est configuré par défaut pour utiliser MySql, embarquant notamment le connecteur MySql pour Java (mysql-connector-java.jar). Pour se connecter à un autre type de base de données que MySql, il faut :
- utiliser le pilote et le dialecte Hibernate correspondant à la nouvelle base de données
- ajouter le connecteur pour Java correspondant dans le répertoire /webapps/WEB-INF/lib
- permettre la récupération du connecteur lors de la prochaine mise à jour (cf Conservation des personnalisations lors des mises à jour).
Voir : La documentation Hibernate
MySql
Le connecteur MySql est inclus par défaut dans la distribution.
PostgreSQL
Postgresql 7.4 : pg74.1jdbc3.jar
Postgresql 8.2 : postgresql-8.2-506.jdbc3.jar
Les drivers pour les différentes versions de Postgresql sont téléchargeables à l'adresse : http://jdbc.postgresql.org/download.html
Oracle
TODO A compléter