cocoon-users-fr mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Cathérine GOURGUET <CatherineGOURG...@cidj.com>
Subject cocoon : message d'erreur java.lang.OutOfMemoryError
Date Tue, 01 Feb 2005 16:30:40 GMT
Bonjour,

je travaille sur cocoon depuis quelques mois, pour développer une application web paramétrable.
Je développe donc un "back office" avec Cocoon forms qui permet d'enregistrer une css et
des données dans un fichier xml.
Lorsque j'enregistre souvent les paramètres que je modifie, j'arrive à avoir un message
d'erreur :
java.lang.OutOfMemoryError
et là, tout est bloqué.

J'ai bien vérifié que je libérais les ressources dans mon ".js", et je ne vois pas d'où
peut provenir l'erreur.


voici mon .js :
----------------------
cocoon.load("resource://org/apache/cocoon/forms/flow/javascript/Form.js");

var userId = null;

function backoffice(tabState, choiceState) {
	// crée le formulaire de login à partir d'un fichier de définition
	var loginForm = new Form("forms/login.xml");
	
	var resolver = cocoon.getComponent(Packages.org.apache.excalibur.source.SourceResolver.ROLE);
	var webPath = resolver.resolveURI("context:/").getFile().getAbsolutePath()+"/";
	
	while (userId == null) {
	  loginForm.showForm("login-display-pipeline");
	  userId = com.cidj.projects.UserRegistry.getUserId(
	          cocoon.request.getParameter("login"),
	          cocoon.request.getParameter("mot-passe"),
	          webPath);
	}
	
	// crée le formulaire à partir d'un fichier de définition
	var form = new Form("forms/backoffice.xml");

	// charge le fichier de personnalisation
	var standardURI = "personnalisation/standard.xml";
	var dataURI     = "personnalisation/"+userId+".xml";
	var doc         = null;
	try {
		doc = loadDocument(dataURI);
	} catch (error) {
		com.cidj.projects.Utils.copyFile(webPath+standardURI, webPath+dataURI);
		doc = loadDocument(dataURI);
	}
	
	// fichier de binding
	var bindingURI = "forms/backoffice-binding.xml";
	form.createBinding(bindingURI);
	
	// charge le formulaire à partir du fichier de personnalisation
	form.load(doc);

	// conserve l'état précédent des onglets (lequel était visible)
	if (tabState) form.lookupWidget("tab-state").value = tabState;
	if (choiceState) form.lookupWidget("choice-state").value = choiceState;
	form.lookupWidget("identifiant").value=userId;
	
	// affiche le formulaire (en appelant l'URL "*-display-pipeline-xsl")
	//  et attend l'appui sur le bouton submit
	
	form.showForm("backoffice-display-pipeline-xsl");

	//libère les composants
	cocoon.releaseComponent(resolver);
	
	// enregistre les modifications du formulaire dans le fichier de perso.
	form.save(doc);
	saveDocument(doc, dataURI);
	
	// génération de la CSS à partir du fichier de perso.
	saveCSS("css/"+userId+".css", dataURI);

	// on conserve la même page, avec les mêmes onglets
	var tabState    = form.lookupWidget("tab-state").value;
	var choiceState = form.lookupWidget("choice-state").value;
	cocoon.sendPage("backoffice.html?tabState="+tabState+"&choiceState="+choiceState);
}


// génère la CSS dans le fichier 'fichierCSS' à partir du fichier de
//   personnalisation 'fichierXML'
function saveCSS(fichierCSS, fichierXML) {
    var pipelineUtil = cocoon.createObject("org.apache.cocoon.components.flow.util.PipelineUtil");
    var resolver = cocoon.getComponent(org.apache.excalibur.source.SourceResolver.ROLE);
    var src = resolver.resolveURI(fichierCSS);
    try {
        var out = src.getOutputStream();
        try {
        	pipelineUtil.processToStream("generate-css?fichierXML="+fichierXML, {}, out);
        } finally {
	        out.close();
	    }
    } finally {
        resolver.release(src);
        cocoon.releaseComponent(resolver);
    }
}


function loadDocument(uri) {
    var parser = null;
    var source = null;
    var resolver = null;
    try {
        parser = cocoon.getComponent(Packages.org.apache.excalibur.xml.dom.DOMParser.ROLE);
        resolver = cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
        source = resolver.resolveURI(uri);
        var is = new Packages.org.xml.sax.InputSource(source.getInputStream());
        is.setSystemId(source.getURI());
        return parser.parseDocument(is);
    } finally {
        if (source != null)
            resolver.release(source);
        cocoon.releaseComponent(parser);
        cocoon.releaseComponent(resolver);
    }
}

function saveDocument(document, uri) {
    var source = null;
    var resolver = null;
    var outputStream = null;
    try {
        resolver = cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
        source = resolver.resolveURI(uri);

        var tf = Packages.javax.xml.transform.TransformerFactory.newInstance();

        if (source instanceof Packages.org.apache.excalibur.source.ModifiableSource
            && tf.getFeature(Packages.javax.xml.transform.sax.SAXTransformerFactory.FEATURE))
{

            outputStream = source.getOutputStream();
            var transformerHandler = tf.newTransformerHandler();
            var transformer = transformerHandler.getTransformer();
            transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.INDENT,
"true");
            transformer.setOutputProperty(Packages.javax.xml.transform.OutputKeys.METHOD,
"xml");
            transformerHandler.setResult(new Packages.javax.xml.transform.stream.StreamResult(outputStream));

            var streamer = new Packages.org.apache.cocoon.xml.dom.DOMStreamer(transformerHandler);
            streamer.stream(document);
        } else {
            throw new Packages.org.apache.cocoon.ProcessingException("Cannot write to source
" + uri);
        }
    } finally {
        if (source != null)
            resolver.release(source);
        cocoon.releaseComponent(resolver);
        if (outputStream != null) {
            try {
                outputStream.flush();
                outputStream.close();
            } catch (error) {
                cocoon.log.error("Could not flush/close outputstream: " + error);
            }
        }
    }
}

----------------------

dans cocoon.xconf, j'ai :

<store-janitor logger="core.store.janitor">
     <parameter name="freememory" value="2048000"/>
     <parameter name="heapsize" value="66600000"/>
     <parameter name="cleanupthreadinterval" value="10"/>
     <parameter name="threadpriority" value="5"/>
     <parameter name="percent_to_free" value="10"/>
     <parameter name="invokegc" value="false"/>
</store-janitor>
  
----------------------

dans cocoon.bat, j'ai ajouté :
JAVA_OPTIONS = "-Xms64M -Xmx256M"

----------------------

Merci pour votre aide précieuse.

Catherine
Développeur - CIDJ

---------------------------------------------------------------------
Liste francophone Apache Cocoon -- http://cocoon.apache.org/fr/
Pour vous desinscrire : mailto:users-fr-unsubscribe@cocoon.apache.org
Autres commandes : mailto:users-fr-help@cocoon.apache.org


Mime
View raw message