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 :
Le mapping du CONTENT est fait via un UserType qui à partir du XML cré un DOM.
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 )
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>
Partager