Bonjour.
Comme le titre l'indique, je voulais mettre en place une configuration pour une application Web (JSF) qui tournerait sur Tomcat (c'est indispensable, exit Glassfish ou JBoss). Pour la persistence, j'utilise JPA avec Toplink comme implémentation.
Ayant réalisé avant des pplications de ce genre, j'aimerais bien éviter de mourir jeune en essayant de résoudre les les problèmes relatifs au lazy fetching et cie.
Je me suis donc dit que je pouvais utiliser Spring pour gérer l'EntityManager ainsi que pour la gestion déclarative des transactions.
Bref, j'ai téléchargé tout ce qu'il faut pour ça:
- Spring 2.5 RC1
- Tomcat 6.0.14
- Toplink-essentials
J'ai suivi des milliards de tutos et d'exemples, mais j'arrete pas de tomber sur erreur après erreur ...
voilou quelques point clés de ce que j'ai fait:
Coté Java:
un DTO Person
un DAO:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 @Entity public class Person { private Long id; private String name; @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long getId() { return id; } : : //getters et setters }
applicationContext.xml:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 public class PersonDao implements IDao<Person, Long> { private EntityManager em; public List<Person> findAll() { return em.createQuery("select p from Person p").getResultList(); } public void save(Person e) { em.persist(e); } @PersistenceContext public void setEm(EntityManager em) { this.em = em; } //getter d'em.
Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 <bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" /> <bean id="persistenceUnitManager" class="org.springframework.orm.jpa.persistenceunit.DefaultPersistenceUnitManager" p:persistence-xml-locations="META-INF/persistence.xml" p:default-data-source-ref="dataSource" p:load-time-weaver-ref="loadTimeWeaver" /> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" p:driver-class-name="org.hsqldb.jdbcDriver" p:username="sa" p:url="jdbc:hsqldb:mem:test" /> <bean id="loadTimeWeaver" class="org.springframework.instrument.classloading.ReflectiveLoadTimeWeaver" /> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" p:data-source-ref="dataSource" p:persistence-unit-name="djo" p:persistence-unit-manager-ref="persistenceUnitManager" p:load-time-weaver-ref="loadTimeWeaver"> <property name="jpaVendorAdapter"> <bean class="org.springframework.orm.jpa.vendor.TopLinkJpaVendorAdapter" p:generate-ddl="true" p:database-platform="oracle.toplink.essentials.platform.database.HSQLPlatform"> </bean> </property> </bean> <bean id="personDao" class="model.dao.PersonDao" />
J'ai omis ici la gestion des transactions car j'n suis pas encore là, ça bloque bien avant !
en plus, ce bout de code de configuration xml est le résultat de plein de modifs et de combinaisons de soluces, mais bon ...
Sinon, j'ai mis tomcat-weaver.jar dans le dossier Tomcat\lib (dans tous les tutos que je trouve, il ont dit de le mettre dans Tomcat\server\lib, mais ça n'existe pas en Tomcat 6
Bref, au démaragge, ça se passe bien, un EntityManager est bien injecté dans mon PersonDao (et un PersonDao est bien injecté dans mon Controller (managed bean en JSF)).
Mais là où je bloque actuellement, c'est suite à l'appel de n'importe quelle méthode du DAOça me jette un zolie:
à la figure ...Object: model.dto.Person@103c29b is not a known entity type.
Je sais bien que c'est un problème récurrent, mais toutes les soluces ne marchent pas pour moi ...
Quelqu'un aurait il trouvé où est ce que je déconne ?
Sinon, j'ai entendu dire que Toplink pouvait faire le con s'il est managé par Spring, alors j'ai essayé de passer à Hibernate, mais là, j'obtiens une autre erreur "Session is not open".
C'est peut être aussi à cause des versions ? je vais essayer demain avec Spring 2 et/ou Tomcat 5.5.
d'avance !
Partager