Slug - The Slow Web Processes Manager |
|---|
|
Jumpstart HowToTo implement Slug based web process monitoring an application needs to implement the following steps:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
...
<!-- Slug session cleaner -->
<listener>
<description>HttpSessionListener</description>
<listener-class>com.webhydra.slug.SlugCleaner</listener-class>
</listener>
<!-- End Slug session cleaner -->
...
<!-- Slug servlet definition -->
<servlet>
<servlet-name>SlugServlet</servlet-name>
<servlet-class>com.webhydra.slug.Slug</servlet-class>
<init-param>
<description>Configurations file with the runners and translators definitions.</description>
<param-name>config</param-name>
<param-value>/WEB-INF/slug.properties</param-value>
</init-param>
<init-param>
<description>Configurations file parser (ISlugConfigParser) class implementation.</description>
<param-name>parser</param-name>
<param-value>com.webhydra.slug.PropertiesConfigParser</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
...
<servlet-mapping>
<servlet-name>SlugServlet</servlet-name>
<url-pattern>/slug/*</url-pattern>
</servlet-mapping>
<!-- End Slug servlet definition -->
...
</web-app>
# Define a runner slug.runners=unlimited # runner's class implementation slug.runner[unlimited].impl=com.webhydra.slug.process.UnlimitedProcessRunner # Define a translator slug.translators=js # translator's class implementation slug.translator[js].impl=com.webhydra.slug.process.javascript.JavaScriptProcessStatusTranslator Multiple runners and translators can be defined as in the following example: # Define multiple translators slug.translators=xml-xsd,xml-dtd,js # translator's class implementations slug.translator[xml-xsd].impl=com.webhydra.slug.process.xml.XmlXsdProcessStatusTranslator slug.translator[xml-dtd].impl=com.webhydra.slug.process.xml.XmlDtdProcessStatusTranslator slug.translator[js].impl=com.webhydra.slug.process.javascript.JavaScriptProcessStatusTranslator package demo; import com.webhydra.slug.process.ProcessProgress; import com.webhydra.slug.process.ProcessStatus; import com.webhydra.slug.process.SluggishProcess; import com.webhydra.slug.process.Status; /** * Sluggish process for demo purposes. */ public class MySluggishPorcess extends SluggishProcess { /** * Simple SluggishProcess implementation. */ public ProcessStatus execute() throws InterruptedException { // reprot process as started. setProcessStatus(new ProcessProgress(Status.RUNNING, "Started.", 0)); doSomething(); setProcessStatus(new ProcessProgress(Status.RUNNING, "Task one done.", 30)); doSomethingElse(); setProcessStatus(new ProcessProgress(Status.RUNNING, "Task two done.", 80)); doSomethingMore(); return new ProcessProgress(Status.COMPLETED, "Done!", 99); } }
String pid = SlugHelper.runProcess(request, new MySluggishPorcess());
request.setAttribute("pid", pid);
<%@page contentType="text/html" pageEncoding="UTF-8" %>
<%@taglib uri="http://dev.webhydra.com/jstl/slug.tld" prefix="slug" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Simple process with simple status and JavaScript raw translator.</TITLE>
<slug:script />
<slug:manage pid="<%= request.getAttribute(pid) %>" url="/slug" translator="js">
document.getElementById("prStatus").innerHTML = ps.toString();
</slug:manage>
</HEAD>
<BODY>
<CENTER>
Simple status:</br>
<DIV id="prStatus">Slug Status here</DIV>
</CENTER>
</BODY>
</HTML>
The above example is extremely simplified. Please see provided demo application for more real life like implementations.
<%@page contentType="text/html" pageEncoding="UTF-8"
import="com.webhydra.slug.*,com.webhydra.slug.process.*"
%>
<%@taglib uri="http://dev.webhydra.com/jstl/slug.tld" prefix="slug" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>
<%
String pid = request.getParameter("pid");
ProcessStatus ps = null;
if (pid == null)
{
// get new pid as request attribute
pid = request.getAttribute("pid");
}
// get Status
Status s = null;
ps = SlugHelper.getStatus(request, pid);
if (ps != null)
{
s = ps.getStatus();
if (Status.isCompleted(s))
{
// consume completed process
SluggishProcess sp = SlugHelper.consumeProcess(request, pid);
}
else
{
%>
<!-- set refresh time to a second -->
<META HTTP-EQUIV="refresh" CONTENT="1;url=my.jsp?pid=<%= pid %>">
<%
}
}
%>
<TITLE>Simple process with simple status.</TITLE>
</HEAD>
<BODY>
<CENTER>
Simple status:</br>
<%= s %>
</CENTER>
</BODY>
</HTML>The above example is extremely simplified. Please see provided demo application for more real life like implementations. |
Copyright (c) 2006, WebHydra.com. All rights reserved. |
|
|---|---|