Travaux pratiques

Nous allons construire un service de gestion de l'entité Cotisation à l'aide de Spring ORM

  • Ajouter la dépendance vers spring-orm et JPA :
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-orm</artifactId>
</dependency>

<!-- API JPA -->
<dependency>
    <groupId>org.hibernate.javax.persistence</groupId>
    <artifactId>hibernate-jpa-2.1-api</artifactId>
    <version>1.0.0.Final</version>
</dependency>

<!-- Implémentation JPA -->
<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>5.1.0.Final</version>
    <scope>runtime</scope>
</dependency>
  • Créer une interface dev.paie.service.CotisationService :
public interface CotisationService {
    void sauvegarder(Cotisation nouvelleCotisation);
    void mettreAJour(Cotisation cotisation);
    List<Cotisation> lister();
}
  • Créer une classe dev.paie.service.CotisationServiceJpa (sans finaliser les méthodes de l'interface) :
@Service
public class CotisationServiceJpa implements CotisationService {

    @PersistenceContext private EntityManager em;

    ...
}

Pour que ce service soit utilisable, il faudrait configurer JPA.

  • Effectuer le mapping JPA de l'entité : dev.paie.entite.Cotisation.

  • Créer une configuration dev.paie.config.JpaConfig :

@Configuration
public class JpaConfig {

    @Bean
      public PlatformTransactionManager transactionManager(EntityManagerFactory emf) {
        JpaTransactionManager txManager = new JpaTransactionManager();
        txManager.setEntityManagerFactory(emf);
        return txManager;
      }

    @Bean
    // Cette configuration nécessite une source de données configurée.
    // Elle s'utilise donc en association avec un autre fichier de configuration définissant un bean DataSource.
    public EntityManagerFactory entityManagerFactory(DataSource dataSource) {

        HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        vendorAdapter.setGenerateDdl(true);
        // activer les logs SQL
        vendorAdapter.setShowSql(true);

        LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
        factory.setJpaVendorAdapter(vendorAdapter);
        // alternative au persistence.xml
        factory.setPackagesToScan("dev.paie.entite");
        factory.setDataSource(dataSource);
        factory.afterPropertiesSet();

        return factory.getObject();
    }

}
  • Créer une classe de test _dev.paie.service.CotisationServiceJpaTest :
// TODO compléter la configuration
public class CotisationServiceJpaTest {

    @Autowired private CotisationService cotisationService;

    @Test
    public void test_sauvegarder_lister_mettre_a_jour() {
        // TODO sauvegarder une nouvelle cotisation

        // TODO vérifier qu'il est possible de récupérer la nouvelle cotisation via la méthode lister

        // TODO modifier une cotisation

        // TODO vérifier que les modifications sont bien prises en compte via la méthode lister
    }
}
  • Exécuter le test et vérifier qu'il est non passant.

  • Implémenter le service CotisationService pour que le test soit passant. Vérifier que la base de données est bien impactée (la table Cotisation est alimentée).

results matching ""

    No results matching ""