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 :

Récupération d'images en base : un bug de C3PO ?


Sujet :

Hibernate Java

  1. #1
    Membre régulier
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Points : 71
    Points
    71
    Par défaut Récupération d'images en base : un bug de C3PO ?
    Bonjour,

    Je développe un site web sous Struts2.0.11/Hibernate 3.2.

    Mes images sont en base de données (Postgres 8.2). Pour les récupérer, j'utilise la méthode proposée par le wiki de Struts 2 : http://struts.apache.org/2.x/docs/ho...-of-bytes.html

    En gros, je récupère les images dans des Blob via Hibernate, et je les passe à la Response avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    response.getOutputStream().write(action.getMyImageInBytes()
    Depuis que je récupère des images en masse (parfois une vingtaine par page web), je me retrouve face à un problème, qui apparait de façon aléatoire lorsque je tente de récupérer une image. Comme si au bout d'un certain nombre d'images récupérées, un bug se produisait. Parfois le message est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    17:48:34,106 ERROR JDBCExceptionReporter:72 - Connections could not be acquired from the underlying database!
    17:48:34,118 ERROR [default]:253 - "Servlet.service()" pour la servlet default a généré une exception
    com.mchange.v2.resourcepool.CannotAcquireResourceException: A ResourcePool could not acquire a resource from its primary factory or source.
    	at com.mchange.v2.resourcepool.BasicResourcePool.awaitAcquire(BasicResourcePool.java:970)
    	at com.mchange.v2.resourcepool.BasicResourcePool.checkoutResource(BasicResourcePool.java:208)
    	at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:232)
    	at com.mchange.v2.c3p0.PoolBackedDataSource.getConnection(PoolBackedDataSource.java:94)
    	at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:35)
    	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:417)
    	at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:144)
    Parfois le message ressemble à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [C3PO Bug] Only Brand new tokeniser's identity..."
    Ca mouline un bon moment avant de sortir l'exception, ça saute 3 ou quatre images, puis ça reprend correctement pour les dernières images de la page.

    Savez-vous quelquechose à ce sujet ?

    Merci
    Pascal

  2. #2
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    pas sur si c'est bien le souci mais la gestion des lob étant parfois problématique selon les drivers jdbc j'utilise le lobhandler de spring :

    http://static.springframework.org/sp...obHandler.html

    (a passer dans la conf spring sur une property de la session factory)

  3. #3
    Membre régulier
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Je n'utilise pas Spring.

    Mais si j'ai bien compris la doc, il semble que l'on puisse utiliser cette classe de façon autonome, pour créer un blob et l'envoyer dans la base via le pilote habituel ?

    Si tu peux détailler brièvement son utilisation, ça pourrait m'aider pas mal.

    Par ailleurs, j'ai l'impression, maiq ce n'est qu'une impression, que mon problème est lié à Postgres (ou son pilote), ou à une une incompatibilité entre C3PO et Postgres.

    Merci de ton aide.

    Pascal

  4. #4
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    je crois que c'est malheureusement très lié a spring, le lobhandler n'est pas une propriété de la sessionfactory de hibernate mais de la localsessionfactorybean de spring

    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
    	<!-- le gestionnaire de BLOB / CLOB de chez Spring -->
    	<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler"/>
     
     
    	<!-- Hibernate SessionFactory Definition -->
    	<bean id="hibernateSessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    		<property name="hibernateProperties">
    			<props>
    				<prop key="hibernate.dialect">${sql.dialect}</prop>
    				<prop key="hibernate.show_sql">false</prop>
    			</props>
    		</property>
    		<property name="lobHandler" ref="lobHandler"/>
    		<property name="dataSource" ref="dataSource"/>
    		<property name="mappingResources">
    			<list>
    				<value>....</value>
    			</list>
    		</property>
    	</bean>
    Sachant que dans mon mapping, j'ai ceci :

    <property name="statusContent" type="org.springframework.orm.hibernate3.support.BlobByteArrayType"
    column="STATUS_CONTENT" length="52428800"/>
    </class>

    Car il faut changer le type des blob si on veut utiliser un lobhandler.

    Bref, pas sur que ca t'aille si tu n'utilises pas spring.

  5. #5
    Membre régulier
    Profil pro
    gnome
    Inscrit en
    Octobre 2004
    Messages
    142
    Détails du profil
    Informations personnelles :
    Localisation : El Salvador

    Informations professionnelles :
    Activité : gnome

    Informations forums :
    Inscription : Octobre 2004
    Messages : 142
    Points : 71
    Points
    71
    Par défaut
    Oui, ça ne me semble pas adapté. D'autant plus que la raison reste un mystère.

    Je suis aussi confronté au récurrent bug PermGen provoqué par le redéploiement d'applications.

    Toutefois je doute qu'il y ait un rapport entre les deux...

Discussions similaires

  1. [MySQL] Récupération d'image dans 1 base mysql via php
    Par jomannix dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/05/2007, 12h54
  2. [MySQL] Problème par rapport au tutoriel sur le stockage des images en base
    Par dark_vidor dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 25/09/2005, 10h37
  3. [Image] récupération d'image
    Par asx9 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 05/09/2005, 11h48
  4. Récupération d'images
    Par mpat dans le forum ASP
    Réponses: 10
    Dernier message: 17/02/2005, 15h24
  5. récupération d'images
    Par MANU_2 dans le forum Composants VCL
    Réponses: 3
    Dernier message: 05/08/2002, 18h36

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