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 :

Hibernate et base en lecture seule


Sujet :

Hibernate Java

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut Hibernate et base en lecture seule
    Bonsoir

    Objet : Problème lors de l'initialisation des connexions à une base de donnée Sybase en lecture seule, via C3PO.

    J'avais développé une application Web avec Spring et Hibernate 3.

    Etant donné que l'application ne fait que des accès en lecture, on me demande aujourd'hui de pouvoir connecter mon appli sur une base (Sybase) de secours qui est en lecture seule.
    J'ai cherché dans les docs/forums/google mais je n'ai pas trouvé d'exemple de configuration pour réaliser ceci.

    J'ai fait quelques tentatives mais sans succès :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    17:25:12,125  INFO Configuration:888 - processing association property references
    
    17:25:12,125  INFO Configuration:917 - processing foreign key constraints
    
    
    17:25:12,218  INFO ConnectionProviderFactory:53 - Initializing connection provider: org.springframework.orm.hibernate3.LocalDataSourceConnectionProvider
    Initializing c3p0 pool... com.mchange.v2.c3p0.PoolBackedDataSource@18feca1 [ connectionPoolDataSource -> com.mchange.v2.c3p0.WrapperConnectionPoolDataSource@43b5bb [ acquireIncrement -> 3, acquireRetryAttempts -> 30, acquireRetryDelay -> 1000, autoCommitOnClose -> false, automaticTestTable -> null, breakAfterAcquireFailure -> false, checkoutTimeout -> 0, connectionTesterClassName -> com.mchange.v2.c3p0.impl.DefaultConnectionTester, factoryClassLocation -> null, forceIgnoreUnresolvedTransactions -> false, idleConnectionTestPeriod -> -1, initialPoolSize -> 1, maxIdleTime -> 1000, maxPoolSize -> 8, maxStatements -> 0, maxStatementsPerConnection -> 0, minPoolSize -> 1, nestedDataSource -> com.mchange.v2.c3p0.DriverManagerDataSource@ff0239 [ description -> null, driverClass -> com.sybase.jdbc2.jdbc.SybDriver, factoryClassLocation -> null, jdbcUrl -> jdbc:sybase:Tds:****:5000/*****, SERVER_INITIATED_TRANSACTIONS=TRUE, properties -> {user=******, password=******} ] , preferredTestQuery -> null, propertyCycle -> 300, testConnectionOnCheckin -> false, testConnectionOnCheckout -> false, usesTraditionalReflectiveProxies -> false ] , factoryClassLocation -> null, numHelperThreads -> 3, poolOwnerIdentityToken -> 18feca1 ] 
    
    
    com.sybase.jdbc2.jdbc.SybSQLException: Attempt to BEGIN TRANSACTION in database '*****' failed because the database is in standby access mode.
    
    	at com.sybase.jdbc2.tds.Tds.processEed(Tds.java:2884)
    	...
    A priori c'est l'initialisation du pool de connection qui pose problème. Cette initialisation se fait en mode transactionnel ce qui n'est pas possible sur une base en lecture seule!

    Je souhaiterai donc savoir comment configurer C3PO ou ma session Hibernate afin de ne pas initialiser les connexions en mode transactionnel.

    Si vous avez une idée, un lien ... je suis preneur.

    Merci d'avance

    Bonne soirée

  2. #2
    Membre expert Avatar de KiLVaiDeN
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 851
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 851
    Points : 3 481
    Points
    3 481
    Par défaut
    Salut,

    Est-ce que ce lien peut t'aider ?

    Sinon, as-tu regardé du coté de ton url de connection ? Peut-être as-tu un paramètre te permettant de préciser que tu ne vas te connecter qu'en lecture seule..

    A+
    K

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    J'avais déjà lu la doc que tu m'as soumis, mais je n'y ai pas trouvé ma réponse.
    Je suis en train de faire des tests, mais rien de concluant pour le moment.

    Apparement c'est le driver JDBC qui pose problème. Celui ci tente d'ouvrir une connection en "mode" transactionnel ce qui ne plait pas à la base. Une exception est remontée et mon appli ne peut fonctionner.
    J'essaye de trouver une option qui me permettrai d'indiquer au Driver de ne pas ouvrir de transaction ... si quelqu'un a une idée!?

    Driver jdbc pour sybase ASE JConn2.jar / com.sybase.jdbc2.jdbc.SybDriver

    Bonne journée

    Wu

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    16
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 16
    Points : 9
    Points
    9
    Par défaut
    Bonjour

    J'ai trouvé une solution à mon problème et la cause n'était pas Hibernate.

    Pour info :
    J'utilisait le driver jdbc Sybase jconn2.jar. Celui ci ne permet pas d'utiliser l'option SERVER_INITIATED_TRANSACTIONS. Sans cette option, le Driver débutait la connection par une "BEGIN TRANSACTION". Sur ma base en lecture seule cela génère une exception.
    J'ai changé le driver JDBC (jconn3.jar) et cela m'a permis d'utiliser l'option SERVER_INITIATED_TRANSACTIONS ce qui a réglé mon problème. Attention : toutes les version de jconn3.jar ne sont pas semblables! Cette fonctionnalité n'est pas disponible sur tous (cela m'a posé quelques problèmes).

    Je n'ai cependant pas réussit à passer cette option au pool de connexion C3P0. Je dois donc me contenter de org.springframework.jdbc.datasource.DriverManagerDataSource ...

    Si ca peu aider quelqu'un un jour ...

    Bonne journée

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

Discussions similaires

  1. base en lecture seule alors que non
    Par loric92 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 24/05/2009, 19h41
  2. Base en lecture seule(pas du tout)
    Par Poulain dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 05/02/2008, 18h15
  3. base en lecture seule : impossible à modifier
    Par dumca dans le forum Access
    Réponses: 4
    Dernier message: 11/05/2007, 12h09
  4. Message d'ouverture de base en lecture seule
    Par jlc1006 dans le forum Access
    Réponses: 3
    Dernier message: 15/12/2006, 10h17
  5. [MSDE]base en lecture seule à partir d'une certaine heure
    Par groum999 dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 16/09/2004, 12h16

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