IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

[Spring 2.5][Tomcat 6.0][JPA:Toplink] Object is not a known entity type. [Data]


Sujet :

Spring Java

  1. #1
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut [Spring 2.5][Tomcat 6.0][JPA:Toplink] Object is not a known entity type.
    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
    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
    }
    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
    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.
    applicationContext.xml:
    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:
    Object: model.dto.Person@103c29b is not a known entity type.
    à la figure ...
    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 !

  2. #2
    Expert éminent
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Points : 7 679
    Points
    7 679
    Par défaut
    Bonjour.
    Je suis arrivé à résoudre le problème (non sans y avoir laissé des plumes ).
    J'ai tout d'abord commencé par virer Toplink: le fait qu'il nécessite du load time weaving ne facilitait pas vraiment les choses et je le soupçonne d'être l'une des causes du problème. J'ai à la place utilisé Hibernate 3.2.5 GA.
    J'ai donc modifié applicationContext.xml en mesure pour l'adapter à Hibernate et aussi pour virer le load time weaving, ce qui donne:
    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
    30
    31
    32
    33
    34
     
    <?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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd
    		http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd">
     
    	<bean id="dataSource"
    		class="org.springframework.jdbc.datasource.DriverManagerDataSource"
    		p:driverClassName="org.hsqldb.jdbcDriver"
    		p:url="jdbc:hsqldb:file:db/test" p:username="sa" p:password="" />
     
    	<bean id="entityManagerFactory"
    		class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
    		p:dataSource-ref="dataSource" p:persistence-unit-name="jpa">
    		<property name="jpaVendorAdapter">
    			<bean
    				class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
    				p:database="HSQL" p:showSql="true" p:generate-ddl="true" />
    		</property>
    	</bean>
     
    	<bean id="transactionManager"
    		class="org.springframework.orm.jpa.JpaTransactionManager"
    		p:entityManagerFactory-ref="entityManagerFactory" />
     
    	<context:annotation-config />
     
    	<tx:annotation-driven />
    </beans>

    Et c'est tout :-)
    En fait, même avec cette configuration, j'avais le même problème de "not known entity", et pour résoudre ça, j'ai ajouté le
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    p:persistence-unit-name="jpa"
    à la déclaration de l'entityManagerFactory.

  3. #3
    Membre du Club
    Inscrit en
    Mai 2005
    Messages
    149
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 149
    Points : 43
    Points
    43
    Par défaut
    Serait il possible d'avoir ton code sample pour ce type de projet car je suis dans la même galère que toi depuis plusdieurs jours

    Merci à toi

  4. #4
    Membre habitué

    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    143
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 143
    Points : 157
    Points
    157
    Par défaut
    Sans rentrer dans la guerre des solutions d'ORM, je voulais juste ajouter que nous allions supprimer le support TopLink à partir de Spring 3.0.
    A la place, nous allons proposer EclipseLink :
    http://www.eclipse.org/eclipselink/

    EclipseLink est en fait la suite de TopLink (d'où le suffixe -Link!), par contre il s'agit maintenant d'un projet de la fondation Eclipse.

    Quelques points forts d'EclipseLink :
    - C'est l'implémentation de référence de JPA 2.0
    - Toutes les fonctionnalités sont Open Source, même les plus avancées (système de cache en particulier)
    - Le code source est particulièrement propre, ce qui est important pour un projet Open Source (et surprenant quand on connait l'historique du projet)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. hibernate et JPA toplink
    Par ib1606 dans le forum Persistance des données
    Réponses: 5
    Dernier message: 25/06/2008, 10h48
  2. JPA Toplink connection pool
    Par nathieb dans le forum JPA
    Réponses: 2
    Dernier message: 19/06/2008, 10h49
  3. Probleme lazy loading JPA TopLink
    Par willoi dans le forum JPA
    Réponses: 6
    Dernier message: 17/06/2008, 12h04
  4. [Data] integration spring jpa toplink jboss
    Par jpclavery dans le forum Spring
    Réponses: 1
    Dernier message: 23/04/2008, 11h41
  5. Besoin tutoriel JPA/TopLink/NetBeans
    Par younesoub dans le forum JPA
    Réponses: 4
    Dernier message: 13/02/2008, 18h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo