Hello,
Using Cocoon 2.1.7
I defined a cron job in cocoon.xconf, created the pipeline, which calls
a function. The function does a sendPage, and the called pipeline calls
an action.
The result: the log is populated with an exception like the following on every execution of the cron job.
java.lang.NullPointerException
at
org.apache.cocoon.environment.AbstractEnvironment.release(AbstractEnvironment.java:553)
at
org.apache.cocoon.environment.wrapper.MutableEnvironmentFacade.release(MutableEnvironmentFacade.java:303)
at org.apache.cocoon.transformation.TraxTransformer.recycle(TraxTransformer.java:525)
at
org.apache.avalon.excalibur.pool.ResourceLimitingPool.put(ResourceLimitingPool.java:438)
at
org.apache.avalon.excalibur.component.PoolableComponentHandler.doPut(PoolableComponentHandler.java:212)
at
org.apache.avalon.excalibur.component.ComponentHandler.put(ComponentHandler.java:425)
at
org.apache.avalon.excalibur.component.ExcaliburComponentSelector.release(ExcaliburComponentSelector.java:305)
at
org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:286)
at
org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:283)
at
org.apache.cocoon.components.pipeline.AbstractProcessingPipeline.recycle(AbstractProcessingPipeline.java:736)
at
org.apache.cocoon.components.pipeline.impl.BaseCachingProcessingPipeline.recycle(BaseCachingProcessingPipeline.java:77)
at
org.apache.cocoon.components.pipeline.impl.AbstractCachingProcessingPipeline.recycle(AbstractCachingProcessingPipeline.java:984)
at
org.apache.avalon.excalibur.pool.ResourceLimitingPool.put(ResourceLimitingPool.java:438)
at
org.apache.avalon.excalibur.component.PoolableComponentHandler.doPut(PoolableComponentHandler.java:212)
at
org.apache.avalon.excalibur.component.ComponentHandler.put(ComponentHandler.java:425)
at
org.apache.avalon.excalibur.component.ExcaliburComponentSelector.release(ExcaliburComponentSelector.java:305)
at
org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:286)
at
org.apache.cocoon.components.ExtendedComponentSelector.release(ExtendedComponentSelector.java:283)
at
org.apache.cocoon.components.EnvironmentDescription.release(CocoonComponentManager.java:633)
at
org.apache.cocoon.components.CocoonComponentManager.endProcessing(CocoonComponentManager.java:238)
at
org.apache.cocoon.components.cron.CocoonQuartzJobExecutor.release(CocoonQuartzJobExecutor.java:74)
at
org.apache.cocoon.components.cron.QuartzJobExecutor.execute(QuartzJobExecutor.java:116)
at org.quartz.core.JobRunShell.run(JobRunShell.java:191)
at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Thread.java:534)
The relevant parts of code:
function regeneraListaPersonas() {
var uri=cocoon.parameters.uri
print("regeneraListaPersonas: "+uri)
elimina(uri);
print("eliminado");
cocoon.sendPage("/interno/datos/directorio/lista-personas");
}
function elimina(uri) {
var source = null;
var resolver = null;
try {
resolver =
cocoon.getComponent(Packages.org.apache.cocoon.environment.SourceResolver.ROLE);
source = resolver.resolveURI(uri);
if (source instanceof Packages.org.apache.excalibur.source.ModifiableSource) {
source.getClass().getMethod("delete",null).invoke(source,null);
// delete is a
_javascript_ reserved word. Thus I cannot do source.delete()
} else {
throw new Packages.org.apache.cocoon.ProcessingException("Cannot delete
source " + uri );
}
} finally {
if (source != null)
resolver.release(source);
cocoon.releaseComponent(resolver);
}
}
<map:pipeline type="caching">
<map:match pattern="datos/directorio/lista-personas">
<map:select type="resource-exists">
<map:when test="context://WEB-INF/cache/lista-personas.xml">
<map:generate src="" href="context://WEB-INF/cache/lista-personas.xml">context://WEB-INF/cache/lista-personas.xml" />
<map:serialize />
</map:when>
<map:otherwise>
<map:act type="copy-source"
src="">
<map:parameter name="dest"
value="context://WEB-INF/cache/lista-personas.xml"/>
<map:generate src="" href="context://WEB-INF/cache/lista-personas.xml">context://WEB-INF/cache/lista-personas.xml" />
<map:serialize />
</map:act>
</map:otherwise>
</map:select>
</map:match>
</map:pipeline>
<map:pipeline type="noncaching">
<map:match pattern="datos/directorio/consulta-lista-personas">
<map:aggregate element="listas">
<map:part src="" />
<map:part src="" />
</map:aggregate>
<map:serialize />
</map:match>
<!-- This pipeline is called from the cron job -->
<map:match pattern="datos/directorio/regenera-consulta-lista-personas">
<map:call function="regeneraListaPersonas">
<map:parameter name="uri"
value="context://WEB-INF/cache/lista-personas.xml" />
</map:call>
</map:match>
</map:pipeline>
Can anyone help me find what is happening?
Thank you very much.
--
Antonio
