-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 
Author Message
 Post subject: Enregistrement Blob sous WebSphere 5.11
PostPosted: Tue May 04, 2010 12:06 pm 
Newbie

Joined: Tue May 04, 2010 11:41 am
Posts: 4
Bonjour,

L'application sur laquelle je travaille doit permettre d'enregistrer des fichiers PDF en base de données.
Environnement :
WebSphere 5.11
Oracle 9.2
JRE 1.4
Struts 1.3.8
Spring 2
Hibernate 3
Driver ojdbc14-10.2.0.2

En environnement de développement, avec Tomcat 4.1, je ne rencontre aucun problème pour enregistrer des fichiers PDF en base. Sous WebSphere, mon objet Java est maj mais le champ BLOB est null. J'ai cependant testé avec un fichier txt de petite taille (4o) et ça passe !

Configuration :
applicationContext.xml
Code:
    <bean name="propertyPlaceholder" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
       <property name="locations">
           <value>classpath:jdbc.properties</value>
       </property>
    </bean>   
      
   <bean id="dataSource"
      class="org.apache.commons.dbcp.BasicDataSource"
      destroy-method="close">
      <property name="driverClassName" value="${jdbc.driverClassName}"/>
      <property name="url" value="${jdbc.url}"/>
      <property name="username" value="${jdbc.username}"/>
      <property name="password" value="${jdbc.password}"/>
   </bean>
   
   <bean id="sessionFactory"
      class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
      <property name="mappingLocations">
         <list>
            <value>classpath*:XX.hbm.xml</value>
                                  ...
         </list>
      </property>
      <property name="hibernateProperties">
         <props>
            <prop key="hibernate.dialect">
               org.hibernate.dialect.Oracle9Dialect
            </prop>    
            <prop key="connection.provider_class">org.hibernate.connection.C3P0ConnectionProvider</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.bytecode.use_reflection_optimizer">true</prop>
            <prop key="hibernate.cache.provider_class">org.hibernate.cache.NoCacheProvider</prop>
            <prop key="hibernate.hbm2ddl.auto">none</prop>
            <prop key="hibernate.c3p0.min_size">10</prop>
            <prop key="hibernate.c3p0.max_size">30</prop>
            <prop key="hibernate.c3p0.timeout">100</prop>
            <prop key="hibernate.c3p0.max_statements">0</prop>
            <prop key="hibernate.jdbc.batch_size">0</prop>
            <prop key="hibernate.connection.autocommit">false</prop>
         </props>
      </property>
      <property name="dataSource">
         <ref bean="dataSource" />
      </property>
   </bean>

   <!-- Spring Data Access Exception Translator Defintion -->
   <bean id="jdbcExceptionTranslator"
      class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
      <property name="dataSource">
         <ref bean="dataSource" />
      </property>
   </bean>
   
   <!-- Hibernate Template Defintion -->
   <bean id="hibernateTemplate"
      class="org.springframework.orm.hibernate3.HibernateTemplate">
      <property name="sessionFactory">
         <ref bean="sessionFactory" />
      </property>
      <property name="jdbcExceptionTranslator">
         <ref bean="jdbcExceptionTranslator" />
      </property>
   </bean>

   <!-- Hibernate Transaction Manager Definition -->
   <bean id="transactionManager"
      class="org.springframework.orm.hibernate3.HibernateTransactionManager">
      <property name="sessionFactory">
         <ref local="sessionFactory" />
      </property>
   </bean>

Business Object :
Code:
public class NavetteOuvertureBO extends AbstractBO {

    private static final long serialVersionUID = -5268286348123584857L;
    ...
    private Blob blobFicheSignee;

    /**
     * Retourne la propriété blobFicheSignee
     * @return blobFicheSignee
     */
    public Blob getBlobFicheSignee() {
        return blobFicheSignee;
    }

    /**
     * Modifie la propriété blobFicheSignee
     * @param blobFicheSignee nouvelle valeur de blobFicheSignee
     */
    public void setBlobFicheSignee(Blob blobFicheSignee) {
        this.blobFicheSignee = blobFicheSignee;
    }

Fichier de mapping hibernate :
Code:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
   <class name="xx.xx.xx.NavetteOuvertureBO" table="FICHE_OUVERTURE">
      <id name="id" column="ID_FICHE_OUVERTURE">
         <generator class="sequence">
            <param name="sequence">SEQ_FICHE_OUVERTURE</param>
         </generator>
      </id>
                ...
      <property name="blobFicheSignee" type="blob"
         column="BLOB_FICHE_SIGNEE" lazy="true"/>
   </class>
</hibernate-mapping>

Business Service :
Code:
public void signerNavetteBO(Long id, byte[] fichier, String fileName) throws ApplicationException {
         Blob blobFicheSignee = Hibernate.createBlob(fichier);
         ficheNavetteBO.setBlobFicheSignee(blobFicheSignee);
         ficheNavetteBO.setNomFicheSignee(fileName);
         this.getNavetteOuvertureDAO().updateNavetteOuvertureBO(ficheNavetteBO);

Et enfin le DAO :
Code:
    public void updateNavetteOuvertureBO(NavetteOuvertureBO navette) throws TechnicalException {
        NavetteOuvertureBO ancienneNavette = this.getNavetteOuvertureBO(navette.getId());
        if (ancienneNavette == null) {
            throw new TechnicalException(ExceptionMessages.ERREUR_TECHNIQUE_CONCURRENT_SUPPRESSION);
        }
        this.getHibernateTemplate().evict(ancienneNavette);
        this.getHibernateTemplate().update(navette);
    }

J'ai cherché sur de nombreux forums : modification des propriétés hibernate, utilisation du driver OCI sans succès.
Merci pour votre aide


Top
 Profile  
 
 Post subject: Re: Enregistrement Blob sous WebSphere 5.11
PostPosted: Wed May 05, 2010 11:44 am 
Newbie

Joined: Tue May 04, 2010 11:41 am
Posts: 4
Excusez-moi d'insister mais je ne trouve vraiment pas d'où vient le problème !

J'ai effectué plusieurs tests avec des fichiers de différentes tailles. L'enregistrement du Blob n'est pas effectué à partir d'une taille de fichier supérieure à 2Ko. Mais aucune erreur dans les logs (juste la trace de l'UPDATE).

J'ai suivi le conseil de plusieurs forums (http://www.developpez.net/forums/d20709 ... hier-blob/) :
"problème aussi résolu pour moi, c'était ma version du jar ojdbc-14.jar qui n'était pas bonne"

J'ai donc testé avec différentes versions du driver, notamment la 9.2.0.8 qui semble être la plus adéquate mais rien ne change !
Comment expliquer qu'il n'y a aucune limitation sous Tomcat?
Pensez-vous que je dois tester un driver OCI?

Merci pour votre aide...


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 2 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.