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

Hibernate Java Discussion :

java.lang.ArrayIndexOutOfBoundsException: 0 dans hibernate.dialect.lock.SelectLockingStrategy [Core]


Sujet :

Hibernate Java

  1. #1
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut java.lang.ArrayIndexOutOfBoundsException: 0 dans hibernate.dialect.lock.SelectLockingStrategy
    Bonjour,

    Je migre actuellement une appli de JBoss 4.2.3 à JBoss 7.1.3.
    Je rencontre une difficulté concernant Hibernate.

    C'est une appli JSF (au départ JSF 1.2 adaptée JSF2) + Richfaces 3.3.3 + Hibernate 3 (en fait basée sur Seam 2.0.2)
    J'ai mis un Hibernate 3.6.6 en module sur le serveur (le 4 présent ne convient pas).

    J'essaye de déployer en faisant à chaque 1ère erreur les corrections nécessaires.
    Une des dernières erreurs était dûe à Hibernate:
    "Unable to instantiate default tuplizer ... component class not found: int"

    J'ai changé les types de base int en Integer ce qui a supprimé le message. Je ne sais pas si j'ai bien fait. En tout cas ça a supprimé cette erreur.

    Maintenant j'ai une nouvelle erreur Hibernate sur laquelle je sèche (trace JBoss):
    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
    08:56:51,761 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 52) MSC00001: 
    Failed to start service jboss.persistenceunit."Appli.ear/Appli.jar#sys-pu": 
    org.jboss.msc.service.StartException in service jboss.persistenceunit."Appli.ear/Appli.jar#sys-pu": 
    java.lang.ArrayIndexOutOfBoundsException: 0
       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:100)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11]
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11]
       at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]
       at org.jboss.threads.JBossThread.run(JBossThread.java:122)
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
       at org.hibernate.dialect.lock.SelectLockingStrategy.generateLockString(SelectLockingStrategy.java:122)
       at org.hibernate.dialect.lock.AbstractSelectLockingStrategy.<init>(AbstractSelectLockingStrategy.java:44)
       at org.hibernate.dialect.lock.SelectLockingStrategy.<init>(SelectLockingStrategy.java:62)
       at org.hibernate.dialect.Dialect.getLockingStrategy(Dialect.java:930)
       at org.hibernate.persister.entity.AbstractEntityPersister.generateLocker(AbstractEntityPersister.java:1419)
       at org.hibernate.persister.entity.AbstractEntityPersister.initLockers(AbstractEntityPersister.java:1407)
       at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:435)
       at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:84)
       at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:286)
       at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1872)
       at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:906)
       at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:197)
       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$500(PersistenceUnitServiceImpl.java:57)
       at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:96)
       ... 4 more
    J'ai pensé à une property manquante dans persistence.xml, mais je n'arrive pas à mettre le doigt dessus. Ou c'est peut-être tout autre chose ?

    avant l'erreur il me met cette info qui doit être en rapport:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    11:03:52,950 INFO  [org.hibernate.tuple.PojoInstantiator] (ServerService Thread Pool -- 51) no default (no-argument) constructor for class: java.lang.Integer (class must be instantiated by Interceptor)
    La trace de démarrage grossit mais je n'arrive pas au bout: "ERROR [org.jboss.as] (Controller Boot Thread) JBAS015875: JBoss AS 7.1.3.Final "Arges" a démarré (avec des erreurs) en 13488ms - 1434 sur 1676 services ont démarré (151 services ont échoué ou manquent de dépendances, 90 services sont passifs ou à la demande)
    "

    Toute suggestion est la bienvenue.

  2. #2
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Marche pô. Je vais faire autrement
    Bon, ça ne fonctionne toujours pas et je ne trouve pas de réponse pertinente sur les forums: je vais faire autrement.
    Je mets donc résolu, mais en fait le problème lui-même n'a pas de réponse ici. Simplement je reprends tout ça différemment.

  3. #3
    Membre confirmé Avatar de ruscov
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Mars 2007
    Messages
    347
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Belgique

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Mars 2007
    Messages : 347
    Points : 500
    Points
    500
    Par défaut
    Il faudrait nous montrer ton entity et ton hbm si tu n'utilises pas les annotations.

  4. #4
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Citation Envoyé par ruscov Voir le message
    Il faudrait nous montrer ton entity et ton hbm si tu n'utilises pas les annotations.
    Bonjour ruscov,

    En fait j'utilise les annotations, et donc je n'ai pas de hbm. Il y a une soixantaine d'entities dans cette appli.

    Merci de répondre au topic. Ca fait un moment que je ne suis pas venu ici.
    En fait quand j'ai eu ce problème j'essayais de migrer en changeant le minimum.

    C'est une appli avec un Hibernate 3, Seam 2.0.2, Richfaces 3, et j'essayais de faire fonctionner comme ça. JBoss montre un exemple mais ne le conseille pas sur son serveur.

    Je suis reparti depuis sur une évolution plus saine, avec des libs qui correspondent bien à JBoss as7 en JEE6. Donc maintenant en Seam 2.3, Richfaces 4, et pas un Hibernate pur mais Hibernate qui implémente JPA, c'est ce que propose JBoss sur son serveur; @Index dans JPA m'intéresse assez pour mon appli


    Je me retrouve avec un problème pas exactement pareil mais qui y ressemble.
    D'autre part je me suis fait des petits projets JPA avec Hibernate 3.6 et 4.2 et aussi EclipseLink ; C'est une base MS SQL Server, et ces petits projets fonctionnent bien.

    La trace de JBoss donne ça:
    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
    14:14:26,665 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 51) MSC00001: Failed to start service jboss.persistenceunit."gvas7-ear.ear/gvas7-ejb.jar#geve-pu": org.jboss.msc.service.S
    tartException in service jboss.persistenceunit."gvas7-ear.ear/gvas7-ejb.jar#geve-pu": javax.persistence.PersistenceException: [PersistenceUnit: geve-pu] Unable to build EntityManagerFactory
    	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:100)
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) [rt.jar:1.7.0_11]
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) [rt.jar:1.7.0_11]
    	at java.lang.Thread.run(Thread.java:722) [rt.jar:1.7.0_11]
    	at org.jboss.threads.JBossThread.run(JBossThread.java:122)
    Caused by: javax.persistence.PersistenceException: [PersistenceUnit: geve-pu] Unable to build EntityManagerFactory
    	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
    	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
    	at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:74)
    	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:197)
    	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.access$500(PersistenceUnitServiceImpl.java:57)
    	at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:96)
    	... 4 more
    Caused by: org.hibernate.MappingException: Could not instantiate persister org.hibernate.persister.entity.SingleTableEntityPersister
    	at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:174)
    	at org.hibernate.persister.internal.PersisterFactoryImpl.createEntityPersister(PersisterFactoryImpl.java:135)
    	at org.hibernate.internal.SessionFactoryImpl.<init>(SessionFactoryImpl.java:381)
    	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1746)
    	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
    	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
    	... 9 more
    Caused by: java.lang.ArrayIndexOutOfBoundsException: 0
    	at org.hibernate.dialect.lock.SelectLockingStrategy.generateLockString(SelectLockingStrategy.java:120)
    	at org.hibernate.dialect.lock.AbstractSelectLockingStrategy.<init>(AbstractSelectLockingStrategy.java:43)
    	at org.hibernate.dialect.lock.SelectLockingStrategy.<init>(SelectLockingStrategy.java:61)
    	at org.hibernate.dialect.Dialect.getLockingStrategy(Dialect.java:1150)
    	at org.hibernate.persister.entity.AbstractEntityPersister.generateLocker(AbstractEntityPersister.java:1874)
    	at org.hibernate.persister.entity.AbstractEntityPersister.initLockers(AbstractEntityPersister.java:1862)
    	at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:447)
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) [rt.jar:1.7.0_11]
    	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) [rt.jar:1.7.0_11]
    	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [rt.jar:1.7.0_11]
    	at java.lang.reflect.Constructor.newInstance(Constructor.java:525) [rt.jar:1.7.0_11]
    	at org.hibernate.persister.internal.PersisterFactoryImpl.create(PersisterFactoryImpl.java:163)
    	... 14 more
    Le code de la partie pas contente qui fait un ArrayIndexOutOfBoundsException: 0
    ressemble à ça:
    public SelectLockingStrategy(Lockable lockable, LockMode lockMode) {
    this.lockable = lockable;
    this.lockMode = lockMode;
    this.sql = generateLockString();
    }

    protected String generateLockString() {
    SessionFactoryImplementor factory = lockable.getFactory();
    SimpleSelect select = new SimpleSelect( factory.getDialect() )
    .setLockMode( lockMode )
    .setTableName( lockable.getRootTableName() )
    .addColumn( lockable.getRootTableIdentifierColumnNames()[0] )
    .addCondition( lockable.getRootTableIdentifierColumnNames(), "=?" );
    if ( lockable.isVersioned() ) {
    select.addCondition( lockable.getVersionColumnName(), "=?" );
    }
    if ( factory.getSettings().isCommentsEnabled() ) {
    select.setComment( lockMode + " lock " + lockable.getEntityName() );
    }
    return select.toStatementString();
    }
    donc à priori c'est dans
    addColumn( lockable.getRootTableIdentifierColumnNames()[0] )
    que ça merdoie.

    Ce que je vois en amont dans le trace c'est qu'il m'informe une bonne centaine de fois qu'il est pas content pour ça:
    INFO [org.hibernate.tuple.PojoInstantiator] (ServerService Thread Pool -- 54) HHH000182: No default (no-argument) constructor for class: java.lang.Integer (class must be instantiated by
    Interceptor)
    Ce que je ne comprends pas à ce stade c'est pourquoi il faudrait un Interceptor ici alors que j'arrive à faire sans ailleurs.
    Je vais commencer par creuser ça.

    Merci de ton aide éventuelle.

  5. #5
    Candidat au Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mai 2013
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2013
    Messages : 5
    Points : 4
    Points
    4
    Par défaut Problème Hibernate résolu
    Bon, j'ai trouvé la solution à mon problème ; je la note pour ceux qui auraient la même difficulté.

    Dans mon appli des entity ont pour clé primaire un id.
    D'autres entity ont des classes comme clés primaires composées au lieu d'avoir un id comme les autres.

    En JEE5 on a pour des clés composées plusieurs annotations @EmbeddedId sur différents membres de la classe.
    En JEE6 c'est différent, il n'y a plus qu'un seul @EmbeddedId sur la classe qui sert de primary key, et donc cette classe *PK est membre de l'entity.

    Donc grossomodo de JEE5 à JEE6 on a déporté les membres de l'entity servant à la création de l'id vers l'id lui-même, ce qui est une bonne chose, c'est plus clair.

    Les 2 classes sont donc anotées.
    L'entity ressemble à ça:
    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
    @Entity 
    MonEntity {
     
       @EmbeddedId
       private MonEntityPK monEntityPK;
     
       private Data3 data3;
     
       public MonEntityPK getMonEntityPK(){
          return monEntityPK;
       }
     
       public void setMonEntityPK(MonEntityPK monEntityPK){
          this.monEntityPK = monEntityPK;
       }
     
       MonEntity(){
       }
     
       MonEntity(MonEntityPK monEntityPK){
          this.monEntityPK = monEntityPK;
       }
     
       MonEntity(Data1 data1, Data2 data2, Data3 data3){
     
          this.monEntityPK = new MonEntityPK(data1, data2);
     
          this.data3 = data3;
       }
       ...
    }
    la clé ressemble à ça
    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
    @Embeddable 
    MonEntityPK {
     
       private Data1 data1;
       private Data2 data2;
     
       public MonEntityPK(){
       }
     
       public MonEntityPK(Data1 data1, Data2 data2){
          this.data1 = data1;
          this.data2 = data2;
       }
     
       public int hashCode() {
          ...
       }
     
       public boolean equals(Object that) {
          ...
       }
    }
    L'erreur qui s'affichait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    java.lang.ArrayIndexOutOfBoundsException: 0 
    ...
    SelectLockingStrategy.generateLockString(...)
    n'était pas super explicite sur le problème réel.


    Comme ça maintenant en Hibernate 4.1.6 ça fontionne

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

Discussions similaires

  1. Erreur java lang.ArrayIndexOutOfBoundsException
    Par lerorodu51 dans le forum NetBeans
    Réponses: 8
    Dernier message: 04/06/2009, 19h17
  2. Réponses: 4
    Dernier message: 17/11/2007, 15h29
  3. [XSLT] java.lang.ArrayIndexOutOfBoundsException sur Transformation XSLT
    Par SONY30 dans le forum Format d'échange (XML, JSON...)
    Réponses: 11
    Dernier message: 11/12/2006, 16h59
  4. Réponses: 5
    Dernier message: 29/09/2006, 15h45
  5. Réponses: 4
    Dernier message: 30/07/2006, 14h38

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