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 :

Connection is read only


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut Connection is read only
    Salut à tous !

    Dans mon appli, je me prend une exception du style

    Job DEFAULT.scanJob threw a JobExecutionException:
    [exec] org.quartz.JobExecutionException: Could not invoke method 'scanMOPDepository' on target object [fr.a.e.ds.service.system.SystemServiceImpl@c8fa1e] [See nested exception: org.springframework.jdbc.UncategorizedSQLException: (HibernateTemplate): encountered SQLException [Connection is read-only. Queries leading to data modification are not allowed]; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed]
    [exec] at org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean$MethodInvokingJob.executeInternal(MethodInvokingJobDetailFactoryBean.java:174)
    [exec] at org.springframework.scheduling.quartz.QuartzJobBean.execute(QuartzJobBean.java:66)
    [exec] at org.quartz.core.JobRunShell.run(JobRunShell.java:191)
    [exec] at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:516)
    [exec] * Nested Exception (Underlying Cause) ---------------
    [exec] org.springframework.jdbc.UncategorizedSQLException: (HibernateTemplate): encountered SQLException [Connection is read-only. Queries leading to data modification are not allowed]; nested exception is java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
    [exec] java.sql.SQLException: Connection is read-only. Queries leading to data modification are not allowed
    [exec] at com.mysql.jdbc.ServerPreparedStatement.executeBatch(ServerPreparedStatement.java:537)
    [exec] at org.jboss.resource.adapter.jdbc.WrappedStatement.executeBatch(WrappedStatement.java:701)
    [exec] at net.sf.hibernate.impl.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:54)
    [exec] at net.sf.hibernate.impl.BatcherImpl.executeBatch(BatcherImpl.java:126)
    [exec] at net.sf.hibernate.impl.SessionImpl.executeAll(SessionImpl.java:2421)
    [exec] at net.sf.hibernate.impl.SessionImpl.execute(SessionImpl.java:2372)
    [exec] at net.sf.hibernate.impl.SessionImpl.flush(SessionImpl.java:2240)
    [exec] at net.sf.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:61)
    [exec] at org.springframework.orm.hibernate.HibernateTransactionManager.doCommit(HibernateTransactionManager.java:464)
    [exec] at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:376)
    [exec] at org.springframework.transaction.interceptor.TransactionAspectSupport.doCommitTransactionAfterReturning(TransactionAspectSupport.java:242)
    [exec] at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:66)
    Bon, très bien. Cependant elle se produit sur un appel comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _myBean.getSomeAttributes(some parameters)
    Avec dans appCxt.xml, pour myBean :


    <bean id="transactionManager"
    class="org.springframework.orm.hibernate.HibernateTransactionManager">
    <property name="sessionFactory">
    <ref local="sessionFactory" />
    </property>
    </bean>



    <bean id="myBean"
    class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
    <property name="transactionManager">
    <ref local="transactionManager" />
    </property>
    <property name="preInterceptors">
    <ref bean = "performanceInterceptor"/>
    </property>
    <property name="transactionAttributes">
    <props>
    <!-- General rule for read-only methods -->
    <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop>
    - Pourquoi il me dit que j'ai pas le droit de faire des modifs alors que je veux juste faire un get?
    - Peut être il reste des choses non commitées?

    Si vous avez une explication, je suis preneur

  2. #2
    Membre expérimenté Avatar de aymen83
    Inscrit en
    Décembre 2007
    Messages
    271
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 271
    Par défaut
    salut,

    l'exception est déclanchée par un bean quartz. Ce dernier utilise des tables dans la base de donnée pour faire la gestion des jobs et triggers.
    ça constitue peut etre une piste.

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par aymen83 Voir le message
    salut,

    l'exception est déclanchée par un bean quartz. Ce dernier utilise des tables dans la base de donnée pour faire la gestion des jobs et triggers.
    ça constitue peut etre une piste.
    … et si un trigger met à jour directement ou par effet de bord un champ du genre "latest access time"… par exemple…

  4. #4
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    Bonjour et merci pour vos réponses.

    Ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _myBean.getSomeAttributes(some parameters)
    Fait juste un oneOfMyDAO.getOneOfMyObject()...

    En rajoutant les traces Hibernate dans mon appli, je me rend compte que juste après l'appel de cette méthode, j'ai 2 traces qui passent :

    [exec] 10:53:32,925 INFO (QuartzScheduler_Worker-3) [STDOUT] - Hibernate: select t1 from T_TABLE_1 where blabla

    [exec] 10:53:33,097 INFO (QuartzScheduler_Worker-3) [STDOUT] - Hibernate: update T_TABLE_2 set .... where ...
    Autant le select je comprend bien (je fais un get...), autant l'update j'ai un peu de mal à voir d'ou il vient... :'(

  5. #5
    Membre Expert
    Homme Profil pro
    Inscrit en
    Septembre 2006
    Messages
    2 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2006
    Messages : 2 963
    Par défaut
    Citation Envoyé par GyZmoO Voir le message
    Bonjour et merci pour vos réponses.

    Ma méthode :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    _myBean.getSomeAttributes(some parameters)
    Fait juste un oneOfMyDAO.getOneOfMyObject()...

    En rajoutant les traces Hibernate dans mon appli, je me rend compte que juste après l'appel de cette méthode, j'ai 2 traces qui passent :



    Autant le select je comprend bien (je fais un get...), autant l'update j'ai un peu de mal à voir d'ou il vient... :'(
    ce sont les champs qui apparaissent dans le "update … set …" qui constitueront le principal indice… pour peu qu'ils n'y soient pas tous évidemment…

  6. #6
    Membre éclairé Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Par défaut
    pour peu qu'ils n'y soient pas tous évidemment…
    Et bien sur, c'est tous les champs qui apparaissent dans le UPDATE

    UPDATE T_TABLE_2 SET ALL MY ATTRIBUTES WHERE PRIMAY_KEY = A value

    ... Pas de bol ...

Discussions similaires

  1. Connection string READ ONLY
    Par Mustang83 dans le forum ADO.NET
    Réponses: 3
    Dernier message: 19/10/2013, 12h58
  2. Ouvrir un document Excel en READ ONLY (avec VBA)
    Par beegees dans le forum Access
    Réponses: 2
    Dernier message: 29/12/2004, 20h48
  3. Rendre ma BD standby disponible en read only?
    Par learn dans le forum Administration
    Réponses: 2
    Dernier message: 30/03/2004, 11h31
  4. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30
  5. CheckBox en Read Only
    Par MrJéjé dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/06/2002, 15h00

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