Je souhaite copier le contenu d'un objet stocké dans une base de données vers un autre objet stocké dans une autre base de données. Je ne veux pas créer de fichier car j'ai plus de 300 Ko de fichiers à copier. Voici une partie de mon code:Copie du contenu documentum avec apache IOUtils.copy() et setContent()
ByteArrayOutputStream baos = new ByteArrayOutputStream();
IOUtils.copy(source.getContent(), baos);
[...]
targetObj.setContent(baos); // Documentum DFC
targetObj.save(); // Documentum DFC
Si je ne pas accorder la machine virtuelle Java, IOUtils.copy(source.getContent(), baos);
donne java.lang.OutOfMemoryError: Java heap space
.
Si je règle la machine virtuelle Java en définissant la valeur Xmx max, l'instruction précédente est correcte, mais java.lang.OutOfMemoryError: Java heap space
se produit avec targetObj.setContent(baos);
.
Avec un seul 8332175 Bytes grand contenu ... (7,94 MB)
Toute idée de ce qui ne va pas? Une meilleure façon de copier depuis ByteArrayInputStream vers ByteArrayOutputStream? Autre chose?
Certaines API Documentum
getContent
publique ByteArrayInputStream getContent() lancers francs DfException
Des copies du contenu de cet objet à partir du serveur Documentum dans un ByteArrayInputStream> objet .
L'exemple de code suivant montre comment copier un contenu d'objets du> serveur Documentum en mémoire:
IDfSysObject sysObj = (IDfSysObject)session.getObject(new DfId("0900d5bb8001f900")); ByteArrayInputStream bais = sysObj.getContent(); if (bais.available() > 0) { // Data successfully fetched from the server... }
Renvoie: un objet contenant ByteArrayInputStream le contenu des objets. Lève: DfException - si une erreur de serveur se produit.
Et
setContent
setContent public boolean (contenu ByteArrayOutputStream) lancers francs DfException
Définit le nouveau contenu à un objet. Utilisez cette méthode lorsque vous souhaitez définir des données qui résident dans la mémoire de travail.
L'exemple de code suivant montre comment définir le contenu résidant dans la mémoire à un nouveau document:
IDfSysObject sysObj = (IDfSysObject)sess.newObject("dm_document"); sysObj.setObjectName("testDoc"); sysObj.setContentType("crtext"); byte b[] = {35,36,37,38,39}; ByteArrayOutputStream out = new ByteArrayOutputStream(); out.write(b, 0, 5); sysObj.setContent(out); sysObj.save();
Paramètres: contenu - le contenu en tant que ByteArrayOutputStream. Lève: DfException - si une erreur de serveur se produit.
Obtenez-vous le OutOfMemory de IOUtils ou de setContent()? – Thilo
Où est-ce que vous faites exception. Et s'il vous plaît ajouter des liens à documentum api – jitter
"Utilisez cette méthode lorsque vous souhaitez définir les données qui résident dans la mémoire de travail." Cela ressemble à un autre pour le cas où la date n'est pas dans la mémoire de travail ... – Thilo