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

JSF Java Discussion :

Accès concurrent aux objets.


Sujet :

JSF Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Par défaut Accès concurrent aux objets.
    Bonsoir à tous.

    ça fait une semaine que je galère .

    J'ai développé une application java EE 6. (jsf).

    Tout marchait bien après mise en production.

    Mais au fur et à mesure que le nombre d'utilisateurs augmente (environ 600 actuellement),

    Mon serveur glassfish plante de temps en temps.
    Dans les logs comme principale information, j'ai :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Exception [EclipseLink-2009] (Eclipse Persistence Services - 2.3.2.v20111125-r10461): org.eclipse.persistence.exceptions.ConcurrencyException
    Exception Description: Max number of attempts to lock object exceded.  Failed to build the object. Thread: Thread[http-thread-pool-80(4),5,grizzly-kernel] has a lock on the object but thread: Thread[http-thread-pool-80(1),5,grizzly-kernel] is building the object
    	at org.eclipse.persistence.exceptions.ConcurrencyException.maxTriesLockOnBuildObjectExceded(ConcurrencyException.java:76)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.retrieveCacheKey(AbstractSession.java:4685)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:772)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildWorkingCopyCloneNormally(ObjectBuilder.java:715)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObjectInUnitOfWork(ObjectBuilder.java:668)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:601)
    	at org.eclipse.persistence.internal.descriptors.ObjectBuilder.buildObject(ObjectBuilder.java:560)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.buildObject(ObjectLevelReadQuery.java:717)
    	at org.eclipse.persistence.queries.ReadAllQuery.registerResultInUnitOfWork(ReadAllQuery.java:769)
    	at org.eclipse.persistence.queries.ReadAllQuery.executeObjectLevelReadQuery(ReadAllQuery.java:433)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeDatabaseQuery(ObjectLevelReadQuery.java:1081)
    	at org.eclipse.persistence.queries.DatabaseQuery.execute(DatabaseQuery.java:844)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.execute(ObjectLevelReadQuery.java:1040)
    	at org.eclipse.persistence.queries.ReadAllQuery.execute(ReadAllQuery.java:392)
    	at org.eclipse.persistence.queries.ObjectLevelReadQuery.executeInUnitOfWork(ObjectLevelReadQuery.java:1128)
    	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.internalExecuteQuery(UnitOfWorkImpl.java:2871)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1516)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1498)
    	at org.eclipse.persistence.internal.sessions.AbstractSession.executeQuery(AbstractSession.java:1463)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.executeReadQuery(EJBQueryImpl.java:485)
    	at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getResultList(EJBQueryImpl.java:742)
    	at com.sahelys.gtface.beans.ContratFacade.findAll_(ContratFacade.java:253)
    	at sun.reflect.GeneratedMethodAccessor486.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:606)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1052)
    	at org.glassfish.ejb.security.application.EJBSecurityManager.invoke(EJBSecurityManager.java:1124)
    	at com.sun.ejb.containers.BaseContainer.invokeBeanMethod(BaseContainer.java:5388)
    	at com.sun.ejb.EjbInvocation.invokeBeanMethod(EjbInvocation.java:619)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at org.jboss.weld.ejb.SessionBeanInterceptor.aroundInvoke(SessionBeanInterceptor.java:42)
    	at sun.reflect.GeneratedMethodAccessor67.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:606)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.EjbInvocation.proceed(EjbInvocation.java:571)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.doAround(SystemInterceptorProxy.java:162)
    	at com.sun.ejb.containers.interceptors.SystemInterceptorProxy.aroundInvoke(SystemInterceptorProxy.java:144)
    	at sun.reflect.GeneratedMethodAccessor66.invoke(Unknown Source)
    	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    	at java.lang.reflect.Method.invoke(Method.java:606)
    	at com.sun.ejb.containers.interceptors.AroundInvokeInterceptor.intercept(InterceptorManager.java:861)
    	at com.sun.ejb.containers.interceptors.AroundInvokeChainImpl.invokeNext(InterceptorManager.java:800)
    	at com.sun.ejb.containers.interceptors.InterceptorManager.intercept(InterceptorManager.java:370)
    	at com.sun.ejb.containers.BaseContainer.__intercept(BaseContainer.java:5360)
    	at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:5348)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandler.invoke(EJBLocalObjectInvocationHandler.java:214)
    	at com.sun.ejb.containers.EJBLocalObjectInvocationHandlerDelegate.invoke(EJBLocalObjectInvocationHandlerDelegate.java:89)
    	at com.sun.proxy.$Proxy232.findAll_(Unknown Source)
    [glassfish 3.1.2.2, jsf 2.0]

    D'après ce qui précède si je ne me trompe pas, le problème est dû à un nombre excessif d'accès.

    Jusque là mes recherches me conduisent aux causes mais pas à des solutions concrètes.

    Merci d'avance.



    Best regards!

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Une fois que cela se produit, cela se produit en continu? Plus d'accès possible et redémarrage du serveur requis? Ou ça déclenche juste des erreurs sporadiques qui permettent de continuer quand même.

    Tout ce que je trouve c'est un bug report sur eclipselink 2.3.1

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=361172

    fixé en octobre 2011. La version 2.3.1 de eclipselink est sortie en novembre 2011 donc elle avait déjà le fix et ton serveur glassfish, si c'est bien la version 3.1.2.2 contient déjà ce fix.

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Par défaut
    Citation Envoyé par tchize_ Voir le message
    Une fois que cela se produit, cela se produit en continu? Plus d'accès possible et redémarrage du serveur requis? Ou ça déclenche juste des erreurs sporadiques qui permettent de continuer quand même.

    Tout ce que je trouve c'est un bug report sur eclipselink 2.3.1

    https://bugs.eclipse.org/bugs/show_bug.cgi?id=361172

    fixé en octobre 2011. La version 2.3.1 de eclipselink est sortie en novembre 2011 donc elle avait déjà le fix et ton serveur glassfish, si c'est bien la version 3.1.2.2 contient déjà ce fix.
    Salut Tchize_.
    Merci pour la réponse.

    Si cela se produit, l'application se plante complètement et la seule option que j'ai c'est de redémarrer le serveur. Cela devient d'autant plus fréquent que le nombre d'ulisateurs de l'application augmente.

    J'utilise effectivement la version 3.1.2.2 de glassfish qui vient avec la version 2.3.2 d'éclipseLink. Donc l'origine du problème pourrait être ailleurs.


    Best regards.

  4. #4
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Il faudrait analyser ton code pour voir si tu n'a pas des sessions que tu ouvrirait manuellement vis à vis de ton entity manager et que tu oublierais de fermer, ce qui ferait que les données resteraient verrouilées. Faudrait voir aussi si tu n'a pas des erreurs dans la console avant la première exception.

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Par défaut
    Bonjour Tchize_. Merci pour la piste.

    Pour mon application, j'ai laissé la main au serveur de gérer les transactions.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    @TransactionManagement(TransactionManagementType.CONTAINER)
    avec le style

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    @PersistenceContext(unitName = "TCnewPU")
              private EntityManager em;
    Je ne ferme donc pas explicitement de sessions.

    Voici un example:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    public Papier find(Long id) {
            Query query = em.createQuery("SELECT c FROM Papier c ");
            List<Papier> papier = query.getResultList();                     
         return b;  
        }
    Toute remarque et/ou suggestion est la bienvenue!


    Best regards!

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Java
    Inscrit en
    Décembre 2011
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Burkina Faso

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 48
    Par défaut
    Bonjour, à tous.

    Je ne sais pas si c'est une solution durable mais ça fait deux jour que je n'ai pas constaté le problème
    qui est à l'origine de cette discussion et j'aimerai partager avec vous comment j'ai procédé.

    1. J'ai changé la version d'eclipseLink (2.5 au lieu de 2.3.2)
    2. J'ai activé le weaving dans ma persitence unit


    Je prends donc le risque de marquer ce poste à Résolu!

    Encors merci à tous!

    Best regards!

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 29/11/2010, 21h15
  2. Accès concurrents à des objets
    Par archer dans le forum Général Java
    Réponses: 0
    Dernier message: 29/10/2010, 11h36
  3. Réponses: 9
    Dernier message: 30/04/2008, 09h55
  4. même problème acces concurrent aux fichiers sur le serveur
    Par al3alwa dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 11/06/2007, 16h51
  5. jsp mysql accès concurrents aux données
    Par elpeygey dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 26/04/2007, 14h03

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