dflorey 2004/06/29 08:12:00
Modified: proposals/projector/src/java/org/apache/slide/projector/engine
ProcessServlet.java Scheduler.java
proposals/projector/src/java/org/apache/slide/projector/processor/resolver
LocaleResolver.java
proposals/projector/src/java/org/apache/slide/projector/processor/tree
TreeLocalizer.java
Added: proposals/projector/src/java/org/apache/slide/projector/engine
SessionListener.java
Log:
Introduced jobs that are triggered via session creation/request
Revision Changes Path
1.10 +8 -0
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java
Index: ProcessServlet.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/ProcessServlet.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- ProcessServlet.java 8 Jun 2004 09:10:53 -0000 1.9
+++ ProcessServlet.java 29 Jun 2004 15:11:59 -0000 1.10
@@ -17,6 +17,8 @@
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
@@ -32,6 +34,7 @@
public void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ApplicationManager.getInstance();
+ boolean sessionCreated = request.getSession(false) == null;
Context context = new HttpContext(request, response);
logger.log(Level.INFO, "Request uri=" + request.getRequestURI());
logger.log(Level.INFO, "Context path=" + request.getContextPath());
@@ -55,6 +58,11 @@
processor = ProcessorManager.getInstance().getProcessor(uri);
Scheduler.getInstance();
Scheduler.setContext(context);
+ if ( sessionCreated ) {
+ // new session
+ Scheduler.getInstance().launchSessionJobs(context);
+ }
+ Scheduler.getInstance().launchRequestJobs(context);
if (
ProcessorManager.getInstance().getProcessorDescriptor(uri).isBookmark() ) {
context.setBookmark(uri);
}
1.11 +41 -10
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java
Index: Scheduler.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/Scheduler.java,v
retrieving revision 1.10
retrieving revision 1.11
diff -u -r1.10 -r1.11
--- Scheduler.java 10 Jun 2004 16:14:12 -0000 1.10
+++ Scheduler.java 29 Jun 2004 15:11:59 -0000 1.11
@@ -28,6 +28,9 @@
public final static String JOBS = "jobs.xml";
public final static String JOB_DEFINITIONS = "jobDefinitions.xml";
+ private final static String STARTUP = "startup";
+ private final static String SESSION = "session";
+ private final static String REQUEST = "request";
private final static String STARTUP_IDENTIFIER = "startup:";
private final Context context = new SystemContext();
@@ -37,6 +40,8 @@
private static Timer timer = new Timer();
private List jobs = new ArrayList();
+ private List sessionJobs = new ArrayList();
+ private List requestJobs = new ArrayList();
private List restoredJobs = new ArrayList();
private List installedJobNames = new ArrayList();
@@ -78,28 +83,32 @@
Document document = documentResource.getDocument();
Element rootElement = document.getRootElement();
List jobElements =
XPath.newInstance("/jobs/job").selectNodes(rootElement);
- List configuredJobs = new ArrayList();
+ List startupJobs = new ArrayList();
for ( Iterator i = jobElements.iterator(); i.hasNext(); ) {
Element jobElement = (Element)i.next();
Step job = new Step();
job.configure(jobElement);
- if (
!installedJobNames.contains(STARTUP_IDENTIFIER+job.getName()) ) {
- configuredJobs.add(job);
- installedJobNames.add(job.getName());
+ String trigger =
jobElement.getAttributeValue("trigger");
+ if ( trigger == null || trigger.equals(STARTUP) ) {
+ if (
!installedJobNames.contains(STARTUP_IDENTIFIER+job.getName()) ) {
+ startupJobs.add(job);
+ installedJobNames.add(job.getName());
+ }
+ } else if ( trigger.equals(REQUEST) ) {
+ requestJobs.add(job);
+ } else if ( trigger.equals(SESSION) ) {
+ sessionJobs.add(job);
}
}
// Note: starting jobs after reading all, to avoid writing to
configuration files while reading...
- for ( Iterator i = configuredJobs.iterator(); i.hasNext(); ) {
+ for ( Iterator i = startupJobs.iterator(); i.hasNext(); ) {
Step job = (Step)i.next();
if ( job.getName().startsWith(STARTUP_IDENTIFIER) ) {
context.setStep(job.getName());
} else {
context.setStep(STARTUP_IDENTIFIER+job.getName());
}
- Processor processor =
ProcessorManager.getInstance().getProcessor(job.getProcessorURI());
- Map processorParameters = Process.loadParameters(job,
processor, new HashMap(), null, context);
-
ProcessorHelper.validate(processor.getParameterDescriptors(), processorParameters,
context);
- processor.process(processorParameters, context);
+ launchJob(job, context);
if ( !restoreRunningJobs ) {
ConnectorFactory.getConnector().subscribe("Update", new
URIValue(Constants.REPOSITORY_DOMAIN+jobsUri),
0,
Constants.SUBSCRIPTION_LIFETIME, Constants.NOTIFICATION_DELAY,
@@ -136,7 +145,29 @@
install(jobsUri, true);
}
- /**
+ public void launchSessionJobs(Context context) throws Exception {
+ for ( Iterator i = sessionJobs.iterator(); i.hasNext(); ) {
+ Step job = (Step)i.next();
+ launchJob(job, context);
+ }
+ }
+
+ public void launchRequestJobs(Context context) throws Exception {
+ for ( Iterator i = requestJobs.iterator(); i.hasNext(); ) {
+ Step job = (Step)i.next();
+ launchJob(job, context);
+ }
+ }
+
+ private void launchJob(Step job, Context context) throws Exception {
+ logger.log(Level.INFO, "Launching job: '"+job.getName()+"'");
+ Processor processor =
ProcessorManager.getInstance().getProcessor(job.getProcessorURI());
+ Map processorParameters = Process.loadParameters(job, processor, new
HashMap(), null, context);
+ ProcessorHelper.validate(processor.getParameterDescriptors(),
processorParameters, context);
+ processor.process(processorParameters, context);
+ }
+
+ /**
* @return Returns the timer.
*/
public static Timer getTimer() {
1.1
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/engine/SessionListener.java
Index: SessionListener.java
===================================================================
/*
*
* ====================================================================
*
* Copyright 2004 The Apache Software Foundation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package org.apache.slide.projector.engine;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionListener;
public class SessionListener implements HttpSessionListener {
private final static Logger logger =
Logger.getLogger(SessionListener.class.getName());
public void sessionCreated(HttpSessionEvent sessionEvent) {
}
public void sessionDestroyed(HttpSessionEvent sessionEvent) {
}
}
1.3 +2 -4
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/resolver/LocaleResolver.java
Index: LocaleResolver.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/resolver/LocaleResolver.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- LocaleResolver.java 1 Jun 2004 07:49:58 -0000 1.2
+++ LocaleResolver.java 29 Jun 2004 15:12:00 -0000 1.3
@@ -18,9 +18,7 @@
* @version $Revision$
*/
public class LocaleResolver extends SimpleProcessor {
- public final static String LOCALE = "locale";
-
- private final static ParameterDescriptor parameterDescriptor = new
ParameterDescriptor(LOCALE, new ParameterMessage("localeResolver/locale"), new
StringValueDescriptor(), new StringValue(Locale.getDefault().toString()));
+ private final static ParameterDescriptor parameterDescriptor = new
ParameterDescriptor(INPUT, new ParameterMessage("localeResolver/locale"), new
StringValueDescriptor(), new StringValue(Locale.getDefault().toString()));
private final static ResultEntryDescriptor resultEntryDescriptor = new
ResultEntryDescriptor(SimpleProcessor.OUTPUT, new
DefaultMessage("locale/result/output"), LocaleValue.CONTENT_TYPE, false);
public Value process(Value input, Context context) throws Exception {
1.5 +16 -7
jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeLocalizer.java
Index: TreeLocalizer.java
===================================================================
RCS file:
/home/cvs/jakarta-slide/proposals/projector/src/java/org/apache/slide/projector/processor/tree/TreeLocalizer.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TreeLocalizer.java 17 Jun 2004 14:54:57 -0000 1.4
+++ TreeLocalizer.java 29 Jun 2004 15:12:00 -0000 1.5
@@ -24,9 +24,11 @@
package org.apache.slide.projector.processor.tree;
import org.apache.slide.projector.Context;
+import org.apache.slide.projector.EnvironmentConsumer;
import org.apache.slide.projector.ProcessException;
import org.apache.slide.projector.Processor;
import org.apache.slide.projector.Result;
+import org.apache.slide.projector.Store;
import org.apache.slide.projector.processor.SimpleProcessor;
import org.apache.slide.projector.descriptor.*;
import org.apache.slide.projector.engine.ProcessorManager;
@@ -49,7 +51,7 @@
*
* @author <a href="mailto:[EMAIL PROTECTED]">Daniel Florey</a>
*/
-public class TreeLocalizer implements Processor {
+public class TreeLocalizer implements Processor, EnvironmentConsumer {
private static Logger logger = Logger.getLogger(TreeLocalizer.class.getName());
public final static String LOCALE = "locale";
@@ -57,8 +59,7 @@
protected final static String IMAGE_IDENTIFIER = "image";
private final static ParameterDescriptor[] parameterDescriptors = new
ParameterDescriptor[] {
- new ParameterDescriptor(SimpleProcessor.INPUT, new
ParameterMessage("treeLocalizer/input"), new TreeValueDescriptor(new
StringValueDescriptor())),
- new ParameterDescriptor(LOCALE, new
ParameterMessage("treeLocalizer/locale"), new LocaleValueDescriptor())
+ new ParameterDescriptor(SimpleProcessor.INPUT, new
ParameterMessage("treeLocalizer/input"), new TreeValueDescriptor(new
StringValueDescriptor()))
};
private final static ResultDescriptor resultDescriptor = new ResultDescriptor(
new StateDescriptor[] { StateDescriptor.OK_DESCRIPTOR },
@@ -66,9 +67,13 @@
new ResultEntryDescriptor(SimpleProcessor.OUTPUT, new
DefaultMessage("treeLocalizer/output"), ArrayValue.CONTENT_TYPE, false)
});
+ private final static RequiredEnvironmentDescriptor[]
requiredEnvironmentDescriptors = new RequiredEnvironmentDescriptor[] {
+ new RequiredEnvironmentDescriptor(LOCALE, Store.SESSION, new
DefaultMessage("treeLocalized/requiredEnvironment/locale"), new
LocaleValueDescriptor(), new LocaleValue(Locale.getDefault()))
+ };
+
public Result process(Map parameter, Context context) throws Exception {
Value []resources =
((ArrayValue)parameter.get(SimpleProcessor.INPUT)).getArray();
- Locale locale = (((LocaleValue)parameter.get(LOCALE)).getLocale());
+ Locale locale =
((LocaleValue)context.getStore(Store.SESSION).get(LOCALE)).getLocale();
return new Result(StateDescriptor.OK, SimpleProcessor.OUTPUT,
localize(resources, locale, context));
}
@@ -110,4 +115,8 @@
public ResultDescriptor getResultDescriptor() {
return resultDescriptor;
}
+
+ public RequiredEnvironmentDescriptor[] getRequiredEnvironmentDescriptors() {
+ return requiredEnvironmentDescriptors;
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]