-->
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.  [ 6 posts ] 
Author Message
 Post subject: Archivage de fichiers binaires : blob ou fichier
PostPosted: Wed May 11, 2005 8:37 am 
Newbie

Joined: Wed May 11, 2005 8:15 am
Posts: 6
Location: Bourgogne / France
Bonjour,
Je souhaite archiver des fichiers binaires dans mon appli (struts/jboss/hibernate/postgresql) :
Je vois 2 possibilités : en tant que blob ou en tant que fichier.
La solution la plus simple pour moi serait d'utiliser la BD, mais la taille des fichiers (plusieurs mega) me fait me poser des question :
- si je parcours la liste des enregistrements, hibernate va t'il charger toutes les données (y compris les champs blob) ?
- comment contourner ce problème (en ecrivant ce mail, je viens de penser à une one-to-one)
Bref, si vous avez des retours d'expériences ou d'autres idées, n'hésitez pas
PS : existe-t-il une mailing list "attachée" à ce forum?[/url]


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 12, 2005 3:08 am 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
Nous avons un système équivalent.
Pour résumer:
- nous générons un identifiant unique pour chaque document.
- cet identifiant est utilisé pour faire les liens en bdd
- le fichier est cependant stocké sur filesystem optimisé (découpage de répertoires,...)
- une couche technique a été codé pour pouvoir restituer de manière transparente le document à partir de son id.
- en gros, tu appelles technicalLayer.getDocument(myApp, documentId) et à partir d'un paramétrage, la couche technique renvoie une URL mais elle pourrait très bien renvoyer le fichier...

ATTENTION, il existe surement des outils voire des standards qui le font d'office, étudie bien l'existant.

Le stockage en bdd me semble, a priori, une mauvaise idée si tu traites des volumes importants. Mais ce n'est que mon avis.

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 12, 2005 5:32 am 
Newbie

Joined: Wed May 11, 2005 8:15 am
Posts: 6
Location: Bourgogne / France
anthony wrote:
ATTENTION, il existe surement des outils voire des standards qui le font d'office, étudie bien l'existant.

T'aurais pas un lien ou des critères de recherche pour google??
J'avoue, je n'ai pas réussi à trouver.

anthony wrote:
Le stockage en bdd me semble, a priori, une mauvaise idée si tu traites des volumes importants. Mais ce n'est que mon avis.


Je viens de faire des tests et je pense aussi qu'il s'agit d'une mauvaise idée :
- dans les cas les plus défavorables, je vais me retrouver avec une 20taine de mega de documents joints. Ca m'embete de reserver autant de mémoire pour simplement afficher la liste.
- j'ai pensé découper ma table en 2 : les champs classiques d'un coté et les champs binaires de l'autre. Une one-to-one assurant la liaison entre les 2. Le problème est que je vais multiplier mon code par 2. Cette fonctionnalité devant être utilisé plusieurs fois dans mon appli, ca ne me convient pas.

Merci pour ta réponse


Top
 Profile  
 
 Post subject:
PostPosted: Thu May 12, 2005 6:16 am 
Hibernate Team
Hibernate Team

Joined: Thu Dec 18, 2003 9:55 am
Posts: 1977
Location: France
as tu essayé Document repository

de la tu prends le plus simple, gratuit, tu plugges, ton appli fait le lien entre l'accès aux objects (hibernate) et l'accès aux documents et voila ça devrait le faire.

_________________
Anthony,
Get value thanks to your skills: http://www.redhat.com/certification


Top
 Profile  
 
 Post subject: stockage de fichiers en base de données
PostPosted: Tue Aug 23, 2005 12:18 pm 
Newbie

Joined: Tue Aug 23, 2005 12:05 pm
Posts: 7
Je cherche à stocker des fichiers dans une base de données Oracle, via un mapping objet/relationnel Hibernate.
Pour cela, j'ai un attribut dans ma classe Article dont le type est java.sql.Blog

je définis m'initialisation de mon attribut par la méthode suivante:
Code:
    public void setValue(File file)
    {
        try
        {
            FileInputStream fis = new FileInputStream(file);
            value = Hibernate.createBlob(fis);
            fis.close();
            InputStream stream = value.getBinaryStream();
        }
        catch (Exception e)
        {
            e.printStackTrace();
            // TODO: handle exception
        }
    }

mon fichier de mapping est le suivant:
Code:
        <property
            name="value"
            type="java.sql.Blob"
            update="true"
            insert="true"
            column="VALUE"
        />

Au lancement de mon test de sauvegarde de l'élément, j'obtiens l'erreur suivante:
java.sql.SQLException: could not reset reader
at net.sf.hibernate.lob.BlobImpl.getBinaryStream(BlobImpl.java:83)
at net.sf.hibernate.type.BlobType.set(BlobType.java:24)
at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:48)
at net.sf.hibernate.type.NullableType.nullSafeSet(NullableType.java:35)
...


Une idée ?
Quelqu'un aurait-il un exemple mettant en oeuvre le stockage et la restitution de fichiers ?

Merci.


Top
 Profile  
 
 Post subject:
PostPosted: Wed Aug 24, 2005 5:19 am 
Newbie

Joined: Tue Aug 23, 2005 12:05 pm
Posts: 7
voici un exemple pour stocker un java.io.File dans une base de données:
http://hansonchar.blogspot.com/2005/06/oracle-blob-mapped-to-byte-in.html

reste à écrire la conversion du fichier en byte[]:
Code:
        Foo binaryFile = new Foo();
        File file = new File("C:/temp/truc.doc");
        try
        {
            FileInputStream is = new FileInputStream(file);
            // Create the byte array to hold the data
            byte[] bytes = new byte[(int) file.length()];
            // Read in the bytes
            int offset = 0;
            int numRead = 0;
            while (offset < bytes.length
                    && (numRead = is.read(bytes, offset, bytes.length - offset)) >= 0)
            { // is is the fileinputstream
                offset += numRead;
            }
            is.close();
            binaryFile.setImage(bytes);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }

et l'écriture inverse, d'un byte[] à un java.io.File
Code:
        File newFile = new File("C:/temp/copie_de_truc.doc");
        try
        {
            FileOutputStream fos = new FileOutputStream(newFile);
            fos.write(bf.getImage());
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 6 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.