You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users-fr@cocoon.apache.org by Cathérine GOURGUET <Ca...@cidj.com> on 2005/02/01 17:30:40 UTC

cocoon : message d'erreur java.lang.OutOfMemoryError

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


Re: cocoon : message d'erreur java.lang.OutOfMemoryError

Posted by Sylvain Wallez <sy...@apache.org>.
Cathérine GOURGUET wrote:

>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.
>  
>

Mmmh...  essayons de cibler le problème : est-ce que ça arrive après une 
série d'interactions importantes sur la page (càd beaucoup 
d'aller-retours avec le serveur) ou aussi si tu sauves directement sans 
aucune modification?

Il serait intéressant aussi de savoir à quel niveau se produit l'erreur. 
Pour cela, tu peux soit utiliser le debugger flowscript (décommenter le 
"<debugger>" dans cocoon.xconf et relancer l'appli) ou ajouter des bon 
vieux print("je suis passé par là") dans le flowscript pour isoler 
l'emplacement du problème.

Sylvain

-- 
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }


---------------------------------------------------------------------
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