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

JPA Java Discussion :

[JPA,Tomcat] Problème d'architecture


Sujet :

JPA Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut [JPA,Tomcat] Problème d'architecture
    Bonjour,

    Je suis actuellement en stage de fin d'études d'ingénieur, et je suis en train de réaliser un site web en Java, avec Tomcat 6.0 et JPA (TopLink). Mon site en est à la phase finale (il est en ligne en accès restreint par mot de passe pour l'instant), et je me trouve soudainement à rencontrer des erreurs avec JPA que je n'avais pas lorsque je travaillais en local ou sur mon serveur de développement. Je précise que je suis novice en Java EE & JPA, j'en connais ce que j'en ai appris à l'école.

    Je m'explique : j'ai une classe Resources qui contient un EntityManagerFactory et un EntityManager. Tous deux sont initialisés par une servlet lancée au démarrage du contexte. J'utilise ensuite mes entités comme ça par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Resources.getEntityManager().getTransaction().begin();
    ...
    Resources.getEntityManager().getTransaction().commit();
    Avec cette architecture, depuis que le site est accessible en ligne, j'ai des exceptions qui surviennent de façon sporadiques (par exemple des "Could not refresh not managed object") alors qu'après redémarrage de Tomcat ça remarche. J'ai aussi des exceptions JPA en rapport avec la base MySQL lorsque le site n'a pas été accédé pendant un long moment (week-end par exemple) de type "Communication failure...".
    Après m'être documenté un peu sur Internet, je vois que EntityManager n'est pas une classe thread-safe. Je regarde un peu comment il faut faire normalement, et je décide de laisser seulement mon EntityManagerFactory dans ma classe Resources, et de faire avant chaque transaction/requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    EntityManager em = Resources.getEmf().createEntityManager();
    em.find(...);
    em.getTransaction().begin();
    ...
    em.getTransaction().commit();
    em.close();
    Je me suis dit que ça pourrait résoudre mes problèmes car j'ai lu des documents qui expliquent qu'il faut bien utiliser un EntityManager par transaction, et qu'il faut bien le fermer après.
    Le problème, maintenant, est qu'en faisant ceci mes transactions n'ont aucun effet sur la base. Quand je modifie un objet que j'ai récupéré grâce à un find, le tout dans une transaction bien sûr, et avec l'EntityManager fermé ensuite, la base reste inchangée. J'ai aussi des persist qui n'ont pas d'effet, mais je crois que c'est parce que je ne le fais pas dans le bon ordre. Je pense qu'il faut que je commence par persister l'objet, et ensuite que je définisse ses propriétés avec ses setters (le tout dans une transaction). Car là souvent je créé mon entité, je lui définis ses propriétés, et ensuite seulement j'ouvre la transaction et je persiste. Je vais creuser pour ça, mais ça ne résoud pas mon problème d'entités non mises à jour dans ma base.
    Mon site doit être accessible au public jeudi, et comme vous le voyez, je suis dans la panade...

    Mon problème n'est peut-être pas facile à comprendre comme ça, demandez-moi des précisions si besoin.

    Merci d'avance.

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    79
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2003
    Messages : 79
    Par défaut
    bonjour,

    ma première question pour éclairer ma lanterne sur ton soucis, serait Tomcat6, est il installé seul et donc considéré comme indépendant soit est il intégré comme conteneur web dans une architecture Application Serveur tel que JBoss ou JOnas ou autre.. ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 42
    Par défaut
    Tomcat 6.0 est installé tout seul. Je n'utiliser aucun autre conteneur que le conteneur de servlets de Tomcat. Donc il ne s'agit pas d'un environnement Java EE à proprement parler, ce qui fait que je gère mes transactions et mes EntityManager à la main.

    Merci de votre intérêt pour mon problème

  4. #4
    Membre confirmé
    Inscrit en
    Mars 2005
    Messages
    100
    Détails du profil
    Informations forums :
    Inscription : Mars 2005
    Messages : 100
    Par défaut
    Citation Envoyé par Eric73 Voir le message
    Tomcat 6.0 est installé tout seul. Je n'utiliser aucun autre conteneur que le conteneur de servlets de Tomcat. Donc il ne s'agit pas d'un environnement Java EE à proprement parler, ce qui fait que je gère mes transactions et mes EntityManager à la main.

    Merci de votre intérêt pour mon problème
    salut,

    as tu pu résoudre ton probleme? si oui pourrais tu nous ecalirer stp!

    merci

  5. #5
    Expert confirmé
    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
    Par défaut
    Bonjour,
    La solution serait par exemple de faire du JPA en mode managé avec Spring, ce qui marche même sur un conteneur web (Jetty, Tomcat) et ne nécessite pas un serveur d'applications.
    Look here.

Discussions similaires

  1. [TOMCAT] Problème de timeout d'une servlet
    Par tuxor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 18/09/2007, 12h04
  2. [eclipse][struts][tomcat] Problème d'intégration
    Par Alwin dans le forum Eclipse Java
    Réponses: 1
    Dernier message: 03/07/2004, 21h48
  3. [Tomcat]Problème avec Tomcat
    Par agbere dans le forum Tomcat et TomEE
    Réponses: 6
    Dernier message: 03/06/2004, 08h30
  4. [TOMCAT] Problème install
    Par stailer dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/12/2003, 18h34
  5. [Apache][TomCat] Problème avec mod_jk
    Par formentor dans le forum Tomcat et TomEE
    Réponses: 5
    Dernier message: 21/06/2003, 20h41

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