Hibernate version:3.1
Name and version of the database you are using: Oracle 9i

Bonjour,

Je réalise une étude pour la mise en place d'un cache DOM au-dessus d'une base Oracle via hibernate.
Cette base contient des documents XML stockés sous forme de sous arbres.

Voici la table :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
CREATE TABLE XDB_ANCHORS
(
DOC_ID        NUMBER(10),
ID            NUMBER(10), //id du sous-arbre
PARENT_ID     NUMBER(10), // id du sous-arbre père
POSITION  NUMBER(10), //position du sous-arbre dans le sous-arbre parent
CONTENT       CLOB //XML
)
Le mapping du CONTENT est fait via un UserType qui à partir du XML cré un DOM.
Hibernate se charge ainsi de cette transformation et le DOM est géré en cache.

Sur des petits fichiers cela marche tres bien, mais sur des gros fichiers, j'obtient un outOfMemory : Java Heap size.

Apres vérification, j'ai constaté que les objets n'etaient jamais libérés pour faire de la place aux nouveaux objets. J'ai également utlisé un profiler pour etre sur de ne garder aucune reference et les seules references sur mes objets sont celle provenant d'hibernate.

J'ai cherche un peu partout mais je ne trouve tjs pas pourquoi les objets ne sont pas evicté automatiquement. J'espère que qq'un pourra m'aider.

merci

William

mapping :
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
21
22
23
24
25
 
<?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="com.airbus.hdom.dom.AdocDocumentFragment" table="XDB_ANCHORS" mutable="false">
      <cache usage="read-only"/>
      <composite-id>
           <key-property name="docId" column="DOC_ID" type="int"/>
           <key-property name="id" type="int" column="ID"/>
           <key-property name="evo" type="int" column="EVO"/>
       </composite-id>
 
      <property name="parentId" column="PARENT_ID"/>
      <property name="key" column="KEY"/>
      <property name="isRemoved" column="ISREMOVED"/>
      <property name="startOffset" column="START_OFFSET"/>
      <property name="endOffset" column="END_OFFSET"/>
      <property name="root" type="com.airbus.hdom.util.HibernateTypes.ClobToDomType">
         <column name="CONTENT" sql-type="CLOB"/>
      </property>
    </class>
</hibernate-mapping>