You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@cocoon.apache.org by vg...@apache.org on 2004/09/09 03:47:32 UTC
svn commit: rev 43558 - in cocoon/branches/BRANCH_2_1_X: . src/blocks/cron/java/org/apache/cocoon/components/cron
Author: vgritsenko
Date: Wed Sep 8 18:47:31 2004
New Revision: 43558
Modified:
cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobExecutor.java
cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobScheduler.java
cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/TestCronJob.java
cocoon/branches/BRANCH_2_1_X/status.xml
Log:
Fix memory leak (release pipelines), fix typo tiggers -> triggers.
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobExecutor.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobExecutor.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobExecutor.java Wed Sep 8 18:47:31 2004
@@ -24,14 +24,12 @@
import org.apache.cocoon.Processor;
import org.apache.cocoon.components.CocoonComponentManager;
import org.apache.cocoon.environment.background.BackgroundEnvironment;
-import org.apache.cocoon.util.NullOutputStream;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
-import java.io.OutputStream;
import java.net.MalformedURLException;
import java.util.Map;
@@ -45,12 +43,9 @@
*/
public class QuartzJobExecutor implements Job {
- /** Shared instance (no state, as it does nothing) */
- static final OutputStream NULL_OUTPUT = new NullOutputStream();
-
/* (non-Javadoc)
- * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
- */
+ * @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
+ */
public void execute(final JobExecutionContext context)
throws JobExecutionException {
final JobDataMap data = context.getJobDetail().getJobDataMap();
@@ -97,6 +92,7 @@
throw new JobExecutionException(e);
}
+ Object key = CocoonComponentManager.startProcessing(env);
CocoonComponentManager.enterEnvironment(env, new WrapperComponentManager(manager), processor);
boolean release = false;
try {
@@ -136,10 +132,12 @@
data.put(QuartzJobScheduler.DATA_MAP_KEY_ISRUNNING, Boolean.FALSE);
CocoonComponentManager.leaveEnvironment();
- manager.release(processor);
+ CocoonComponentManager.endProcessing(env, key);
+
if (release) {
manager.release(job);
}
+ manager.release(processor);
}
}
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobScheduler.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobScheduler.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/QuartzJobScheduler.java Wed Sep 8 18:47:31 2004
@@ -47,8 +47,8 @@
import org.quartz.SimpleTrigger;
import org.quartz.Trigger;
import org.quartz.impl.DirectSchedulerFactory;
-import org.quartz.impl.jdbcjobstore.JobStoreSupport;
import org.quartz.impl.jdbcjobstore.InvalidConfigurationException;
+import org.quartz.impl.jdbcjobstore.JobStoreSupport;
import org.quartz.simpl.RAMJobStore;
import org.quartz.spi.JobStore;
import org.quartz.utils.ConnectionProvider;
@@ -333,7 +333,6 @@
if (getLogger().isDebugEnabled() && (triggers.length == 0)) {
getLogger().debug("no triggers configured at startup");
}
-
}
/* (non-Javadoc)
@@ -666,32 +665,32 @@
}
/**
- * Create the tiggers
+ * Create the triggers
*
- * @param tiggers array of tigger configuration elements
+ * @param triggers array of trigger configuration elements
*
* @throws ConfigurationException thrown in case of configuration failures
*/
- private void createTriggers(final Configuration[] tiggers)
+ private void createTriggers(final Configuration[] triggers)
throws ConfigurationException {
- for (int i = 0; i < tiggers.length; i++) {
- String cron = tiggers[i].getChild("cron").getValue(null);
+ for (int i = 0; i < triggers.length; i++) {
+ String cron = triggers[i].getChild("cron").getValue(null);
if (null == cron) {
- final String seconds = tiggers[i].getChild("seconds").getValue("0");
- final String minutes = tiggers[i].getChild("minutes").getValue("*");
- final String hours = tiggers[i].getChild("hours").getValue("*");
- final String days = tiggers[i].getChild("days").getValue("*");
- final String months = tiggers[i].getChild("months").getValue("*");
- final String weekdays = tiggers[i].getChild("weekdays").getValue("?");
- final String years = tiggers[i].getChild("years").getValue("*");
+ final String seconds = triggers[i].getChild("seconds").getValue("0");
+ final String minutes = triggers[i].getChild("minutes").getValue("*");
+ final String hours = triggers[i].getChild("hours").getValue("*");
+ final String days = triggers[i].getChild("days").getValue("*");
+ final String months = triggers[i].getChild("months").getValue("*");
+ final String weekdays = triggers[i].getChild("weekdays").getValue("?");
+ final String years = triggers[i].getChild("years").getValue("*");
cron = seconds + " " + minutes + " " + hours + " " + days + " " + months + " " + weekdays + " " +
years;
}
try {
- addJob(tiggers[i].getAttribute("name"), tiggers[i].getAttribute("target"), cron,
- tiggers[i].getAttributeAsBoolean("concurrent-runs", true));
+ addJob(triggers[i].getAttribute("name"), triggers[i].getAttribute("target"), cron,
+ triggers[i].getAttributeAsBoolean("concurrent-runs", true));
} catch (final CascadingException ce) {
throw new ConfigurationException("failed adding trigger to scheduler", ce);
}
Modified: cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/TestCronJob.java
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/TestCronJob.java (original)
+++ cocoon/branches/BRANCH_2_1_X/src/blocks/cron/java/org/apache/cocoon/components/cron/TestCronJob.java Wed Sep 8 18:47:31 2004
@@ -28,7 +28,6 @@
import org.apache.excalibur.source.Source;
import org.apache.excalibur.source.SourceResolver;
-
/**
* A simple test CronJob which also calls a pipeline internally.
*
@@ -78,27 +77,29 @@
SourceResolver resolver = null;
Source src = null;
try {
- resolver = (SourceResolver)this.manager.lookup(SourceResolver.ROLE);
- src = resolver.resolveURI("cocoon://" + pipeline);
- InputStream is = src.getInputStream();
-
- InputStreamReader reader = new InputStreamReader(is);
- StringBuffer sb = new StringBuffer();
- char[] b = new char[8192];
- int n;
+ resolver = (SourceResolver) this.manager.lookup(SourceResolver.ROLE);
+ src = resolver.resolveURI("cocoon://" + this.pipeline);
- while((n = reader.read(b)) > 0) {
- sb.append(b, 0, n);
+ InputStreamReader r = new InputStreamReader(src.getInputStream());
+ try {
+ StringBuffer sb = new StringBuffer();
+ char[] b = new char[8192];
+ int n;
+
+ while((n = r.read(b)) > 0) {
+ sb.append(b, 0, n);
+ }
+
+ getLogger().info("CronJob " + name + " called pipeline " + pipeline +
+ " and received following content:\n" + sb.toString());
+ } finally {
+ r.close();
}
- reader.close();
-
- getLogger().info("Cronjob " + name + " called pipeline " + pipeline +
- " and received following content:\n" + sb.toString() );
} catch(Exception e) {
throw new CascadingRuntimeException("CronJob " + name + " raised an exception", e);
} finally {
- if ( resolver != null ) {
+ if (resolver != null) {
resolver.release(src);
this.manager.release(resolver);
resolver = null;
@@ -114,7 +115,6 @@
getLogger().info("CronJob " + name + " finished at " + new Date() + " with message '" + m_msg +
"' and sleep timeout of " + m_sleep + "ms");
-
}
/* (non-Javadoc)
Modified: cocoon/branches/BRANCH_2_1_X/status.xml
==============================================================================
--- cocoon/branches/BRANCH_2_1_X/status.xml (original)
+++ cocoon/branches/BRANCH_2_1_X/status.xml Wed Sep 8 18:47:31 2004
@@ -204,6 +204,9 @@
<changes>
<release version="@version@" date="@date@">
+ <action dev="VG" type="fix">
+ Cron block: Fixed memory leak, QuartzJobExecutor was not releasing pipelines.
+ </action>
<action dev="AG" type="update">
Updated jexl to 1.0, lucene to 1.4.1
</action>