6. Intégration de Spring▲
6-A. Ajout de la bibliothèque Spring▲
La première étape pour intégrer Spring dans notre application web consiste à ajouter la bibliothèque de Spring dans notre projet.
On clique sur « add library ».
On clique sur « Import ».
On choisit le « Spring Framework 2.5 »puis on clique sur « import Library ».
On valide par « add library ».
6-B. Création du fichier de configuration▲
Maintenant on passe à la création du fichier de configuration de Spring « applicationContext » ce fichier contient tous les beans qui seront gérés par Spring.
Le fichier doit être créé dans le dossier « WEB-INF ».
On va commencer par définir les paramètres de connexion à notre base de données. En effet le fichier de configuration de Spring contient les mêmes informations qui se trouvent dans le fichier « hibernate.cfg.xml » ce qui rend ce fichier inutile et on pourra ainsi le supprimer.
Ensuite on spécifie les paramètres de générateur de session « session factory ». Cette configuration consiste à spécifier les paramètres d'Hibernate, les fichiers de mapping utilisés et la classe responsable de la gestion de la session.
On va déclarer aussi le Bean de gestion des erreurs liées aux exceptions SQL.
On déclare le Bean HibernateTemplate. La classe HibernateTemplate fournit des méthodes pour assurer la persistance des objets dans la base de données en utilisant Hibernate.
On déclare le gestionnaire de transaction pour hibernate.
Après avoir effectué les configurations de base dans le fichier « applicationContext » on déclare dans le descripteur de déploiement « web.xml » les configurations liées à l'utilisation de Spring.
On ajoute aussi dans le fichier « faces-config.xml » la déclaration de l'utilisation de Spring. Cette déclaration permet à JSF de voir les beans déclarés dans le fichier de configuration de Spring.
6-C. Création de la couche Service et la couche DAO▲
On passe maintenant à la création de la couche Service et la couche DAO.
On crée un nouveau package qu'on appellera « Interfaces » et on crée dedans deux interfaces « interfaceDAO » et « interfaceService ». Les interfaces DAO et Service contiennent la définition des méthodes qu'on va utiliser. Dans notre exemple on va utiliser seulement quatre méthodes :
- Save : pour enregistrer les objets dans la base ;
- Modify : pour modifier un enregistrement existant ;
- Delete : pour supprimer un enregistrement ;
- Findall : pour récupérer la liste des enregistrements dans la base.
package
Implementation.dao;
import
Entity.Service;
import
Interfaces.InterfaceDAO;
import
java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public
class
ServiceDaoImpl extends
HibernateDaoSupport implements
InterfaceDAO {
@Override
public
void
save
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).save
(
serv); }
@Override
public
void
modify
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).update
(
serv); }
@Override
public
void
delete
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).delete
(
serv); }
public
List findAll
(
) {
return
(
List) this
.getHibernateTemplate
(
).loadAll
(
Service.class
); }
}
package
Interfaces;
import
java.util.List;
/**
*
@author
Jihed
*/
public
interface
InterfaceService {
public
void
save
(
Object inst);
public
void
modify
(
Object inst);
public
void
delete
(
Object inst);
public
List findAll
(
);
}
On crée deux autres packages « Implementation.service » et « implementation.dao ».
Dans le package « implementation.dao » on va implémenter l'interface DAO pour chaque classe de notre application.
package
Implementation.dao;
import
Entity.Service;
import
Interfaces.InterfaceDAO;
import
java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public
class
ServiceDaoImpl extends
HibernateDaoSupport implements
InterfaceDAO {
@Override
public
void
save
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).save
(
serv); }
@Override
public
void
modify
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).update
(
serv); }
@Override
public
void
delete
(
Object inst) {
Service serv =
(
Service) inst;
this
.getHibernateTemplate
(
).delete
(
serv); }
public
List findAll
(
) {
return
(
List) this
.getHibernateTemplate
(
).loadAll
(
Service.class
); }
}
package
Implementation.dao;
import
Entity.Personnel;
import
Interfaces.InterfaceDAO;
import
java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public
class
PersonnelDaoImpl extends
HibernateDaoSupport implements
InterfaceDAO {
@Override
public
void
save
(
Object inst) {
Personnel pers =
(
Personnel) inst;
this
.getHibernateTemplate
(
).save
(
pers); }
@Override
public
void
modify
(
Object inst) {
Personnel pers =
(
Personnel) inst;
this
.getHibernateTemplate
(
).update
(
pers); }
@Override
public
void
delete
(
Object inst) {
Personnel pers =
(
Personnel) inst;
this
.getHibernateTemplate
(
).delete
(
pers); }
public
List findAll
(
) {
return
(
List) this
.getHibernateTemplate
(
).loadAll
(
Personnel.class
); }
}
package
Implementation.dao;
import
Entity.Equipement;
import
Interfaces.InterfaceDAO;
import
java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public
class
EquipementDaoImpl extends
HibernateDaoSupport implements
InterfaceDAO {
@Override
public
void
save
(
Object inst) {
Equipement equip =
(
Equipement) inst;
this
.getHibernateTemplate
(
).save
(
equip);
}
@Override
public
void
modify
(
Object inst) {
Equipement equip =
(
Equipement) inst;
this
.getHibernateTemplate
(
).update
(
equip);
}
@Override
public
void
delete
(
Object inst) {
Equipement equip =
(
Equipement) inst;
this
.getHibernateTemplate
(
).delete
(
equip);
}
public
List findAll
(
) {
return
(
List) this
.getHibernateTemplate
(
).loadAll
(
Equipement.class
);
}
}
package
Implementation.dao;
import
Entity.Interventions;
import
Interfaces.InterfaceDAO;
import
java.util.List;
import
org.springframework.orm.hibernate3.support.HibernateDaoSupport;
public
class
InterventionsDaoImpl extends
HibernateDaoSupport implements
InterfaceDAO {
@Override
public
void
save
(
Object inst) {
Interventions interv =
(
Interventions) inst;
this
.getHibernateTemplate
(
).save
(
interv); }
@Override
public
void
modify
(
Object inst) {
Interventions interv =
(
Interventions) inst;
this
.getHibernateTemplate
(
).update
(
interv); }
@Override
public
void
delete
(
Object inst) {
Interventions interv =
(
Interventions) inst;
this
.getHibernateTemplate
(
).delete
(
interv); }
public
List findAll
(
) {
return
(
List) this
.getHibernateTemplate
(
).loadAll
(
Interventions.class
); }
}
Après avoir créé la couche DAO on va passer à la création de la couche service. Celle-ci fait appel à la couche DAO.
package
Implementation.service;
import
Entity.Service;
import
Interfaces.InterfaceDAO;
import
Interfaces.InterfaceService;
import
java.util.List;
public
class
ServiceServiceImpl implements
InterfaceService {
private
InterfaceDAO serviceDao;
public
void
save
(
Object instance) {
Service serv =
(
Service) instance;
serviceDao.save
(
serv); }
public
void
modify
(
Object instance) {
Service serv =
(
Service) instance;
serviceDao.modify
(
serv); }
public
void
delete
(
Object instance) {
Service serv =
(
Service) instance;
serviceDao.delete
(
serv); }
public
List findAll
(
) {
return
serviceDao.findAll
(
); }
public
InterfaceDAO getServiceDao
(
) {
return
serviceDao; }
public
void
setServiceDao
(
InterfaceDAO serviceDao) {
this
.serviceDao =
serviceDao; }
}
package
Implementation.service;
import
Entity.Personnel;
import
Interfaces.InterfaceDAO;
import
Interfaces.InterfaceService;
import
java.util.List;
public
class
PersonnelServiceImpl implements
InterfaceService {
private
InterfaceDAO personnelDao;
public
void
save
(
Object instance) {
Personnel pers =
(
Personnel) instance;
personnelDao.save
(
pers); }
public
void
modify
(
Object instance) {
Personnel pers =
(
Personnel) instance;
personnelDao.modify
(
pers); }
public
void
delete
(
Object instance) {
Personnel pers =
(
Personnel) instance;
personnelDao.delete
(
pers); }
public
List findAll
(
) {
return
personnelDao.findAll
(
); }
public
InterfaceDAO getPersonnelDao
(
) {
return
personnelDao; }
public
void
setPersonnelDao
(
InterfaceDAO personnelDao) {
this
.personnelDao =
personnelDao; }
}
package
Implementation.service;
import
Entity.Equipement;
import
Interfaces.InterfaceDAO;
import
Interfaces.InterfaceService;
import
java.util.List;
public
class
EquipementServiceImpl implements
InterfaceService {
private
InterfaceDAO equipDao;
public
void
save
(
Object instance) {
Equipement equip =
(
Equipement) instance;
equipDao.save
(
equip); }
public
void
modify
(
Object instance) {
Equipement equip =
(
Equipement) instance;
equipDao.modify
(
equip); }
public
void
delete
(
Object instance) {
Equipement equip =
(
Equipement) instance;
equipDao.delete
(
equip); }
public
List findAll
(
) {
return
equipDao.findAll
(
); }
public
InterfaceDAO getEquipDao
(
) {
return
equipDao; }
public
void
setEquipDao
(
InterfaceDAO equipDao) {
this
.equipDao =
equipDao; }
}
package
Implementation.service;
import
Entity.Interventions;
import
Interfaces.InterfaceDAO;
import
Interfaces.InterfaceService;
import
java.util.List;
public
class
InterventionsServiceImpl implements
InterfaceService {
private
InterfaceDAO intervDao;
public
void
save
(
Object instance) {
Interventions interv =
(
Interventions) instance;
intervDao.save
(
interv); }
public
void
modify
(
Object instance) {
Interventions interv =
(
Interventions) instance;
intervDao.modify
(
interv);
}
public
void
delete
(
Object instance) {
Interventions interv =
(
Interventions) instance;
intervDao.delete
(
interv); }
public
List findAll
(
) {
return
intervDao.findAll
(
); }
public
InterfaceDAO getIntervDao
(
) {
return
intervDao; }
public
void
setIntervDao
(
InterfaceDAO intervDao) {
this
.intervDao =
intervDao; }
}
Après avoir créé ces classes on va les déclarer dans le fichier de configuration de Spring.
Les beans DAO font référence au Bean hibernatetemplate tandis que les Beans services font référence aux beans DAO associés. La déclaration des beans au niveau du fichier de configuration de Spring est terminée.
<?xml version="1.0" encoding="UTF-8"?>
<beans
xmlns
=
"http://www.springframework.org/schema/beans"
xmlns
:
xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns
:
aop
=
"http://www.springframework.org/schema/aop"
xmlns
:
tx
=
"http://www.springframework.org/schema/tx"
xmlns
:
p
=
"http://www.springframework.org/schema/p"
xsi
:
schemaLocation
=
"http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd"
>
<!--Data Source Definition-->
<bean
id
=
"dataSource"
class
=
"org.springframework.jdbc.datasource.DriverManagerDataSource"
>
<property
name
=
"driverClassName"
>
<value>
com.mysql.jdbc.Driver</value>
</property>
<property
name
=
"url"
>
<value>
jdbc:mysql://localhost:3306/gestion_parc</value>
</property>
<property
name
=
"username"
>
<value>
root</value>
</property>
<property
name
=
"password"
>
<value>
diag2000</value>
</property>
</bean>
<!--Hibernate Session Factory Definition-->
<bean
id
=
"sessionFactory"
class
=
"org.springframework.orm.hibernate3.LocalSessionFactoryBean"
>
<property
name
=
"mappingResources"
>
<list>
<value>
Mapping/Equipement.hbm.xml</value>
<value>
Mapping/Interventions.hbm.xml</value>
<value>
Mapping/Personnel.hbm.xml</value>
<value>
Mapping/Service.hbm.xml</value>
</list>
</property>
<property
name
=
"hibernateProperties"
>
<props>
<prop
key
=
"hibernate.dialect"
>
org.hibernate.dialect.MySQLDialect</prop>
<prop
key
=
"hibernate.show_sql"
>
true</prop>
<prop
key
=
"hibernate.cglib.use_reflection_optimizer"
>
true</prop>
<prop
key
=
"hibernate.cache.provider_class"
>
org.hibernate.cache.HashtableCacheProvider</prop>
</props>
</property>
<property
name
=
"dataSource"
>
<ref
bean
=
"dataSource"
/>
</property>
</bean>
<!--Spring Data Access Exception Translator Defintion-->
<bean
id
=
"jdbcExceptionTranslator"
class
=
"org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator"
>
<property
name
=
"dataSource"
>
<ref
bean
=
"dataSource"
/>
</property>
</bean>
<!--Hibernate Template Defintion-->
<bean
id
=
"hibernateTemplate"
class
=
"org.springframework.orm.hibernate3.HibernateTemplate"
>
<property
name
=
"sessionFactory"
>
<ref
bean
=
"sessionFactory"
/>
</property>
<property
name
=
"jdbcExceptionTranslator"
>
<ref
bean
=
"jdbcExceptionTranslator"
/>
</property>
</bean>
<!--Hibernate Transaction Manager Definition-->
<bean
id
=
"transactionManager"
class
=
"org.springframework.orm.hibernate3.HibernateTransactionManager"
>
<property
name
=
"sessionFactory"
>
<ref
local
=
"sessionFactory"
/>
</property>
</bean>
<!--========================= Start of DAO BEANS DEFINITIONS =========================-->
<bean
id
=
"serviceDao"
class
=
"Implementation.dao.ServiceDaoImpl"
>
<property
name
=
"hibernateTemplate"
ref
=
"hibernateTemplate"
/>
</bean>
<bean
id
=
"persDao"
class
=
"Implementation.dao.PersonnelDaoImpl"
>
<property
name
=
"hibernateTemplate"
ref
=
"hibernateTemplate"
/>
</bean>
<bean
id
=
"equipDao"
class
=
"Implementation.dao.EquipementDaoImpl"
>
<property
name
=
"hibernateTemplate"
ref
=
"hibernateTemplate"
/>
</bean>
<bean
id
=
"intervDao"
class
=
"Implementation.dao.InterventionsDaoImpl"
>
<property
name
=
"hibernateTemplate"
ref
=
"hibernateTemplate"
/>
</bean>
<!--========================= Start of SERVICE BEANS DEFINITIONS =========================-->
<bean
id
=
"servService"
class
=
"Implementation.service.ServiceServiceImpl"
>
<property
name
=
"serviceDao"
ref
=
"serviceDao"
/>
</bean>
<bean
id
=
"persService"
class
=
"Implementation.service.PersonnelServiceImpl"
>
<property
name
=
"personnelDao"
ref
=
"persDao"
/>
</bean>
<bean
id
=
"equipService"
class
=
"Implementation.service.EquipementServiceImpl"
>
<property
name
=
"equipDao"
ref
=
"equipDao"
/>
</bean>
<bean
id
=
"intervService"
class
=
"Implementation.service.InterventionsServiceImpl"
>
<property
name
=
"intervDao"
ref
=
"intervDao"
/>
</bean>
</beans>
Voici un schéma qui explique la relation entre les différents beans déclarés dans le fichier « applicationContext ».