Author: tcurdt Date: Fri Mar 16 17:08:20 2007 New Revision: 519193 URL: http://svn.apache.org/viewvc?view=rev&rev=519193 Log: command line example working (with commons cli 1.0.1 SNAPSHOT) basic serverpages servlet example, use jetty:run to start servlet example
Added: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java (with props) jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml (with props) Modified: jakarta/commons/sandbox/jci/trunk/examples/pom.xml jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java Modified: jakarta/commons/sandbox/jci/trunk/examples/pom.xml URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/pom.xml?view=diff&rev=519193&r1=519192&r2=519193 ============================================================================== --- jakarta/commons/sandbox/jci/trunk/examples/pom.xml (original) +++ jakarta/commons/sandbox/jci/trunk/examples/pom.xml Fri Mar 16 17:08:20 2007 @@ -29,5 +29,26 @@ <artifactId>commons-cli</artifactId> <version>1.0</version> </dependency> + <dependency> + <groupId>javax.servlet</groupId> + <artifactId>servlet-api</artifactId> + <version>2.4</version> + </dependency> </dependencies> + <build> + <plugins> + <plugin> + <groupId>org.mortbay.jetty</groupId> + <artifactId>maven-jetty-plugin</artifactId> + <configuration> + <systemProperties> + <systemProperty> + <name>org.apache.commons.logging.Log</name> + <value>org.apache.commons.logging.impl.SimpleLog</value> + </systemProperty> + </systemProperties> + </configuration> + </plugin> + </plugins> + </build> </project> Modified: jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java?view=diff&rev=519193&r1=519192&r2=519193 ============================================================================== --- jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java (original) +++ jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/commandline/CommandlineCompiler.java Fri Mar 16 17:08:20 2007 @@ -25,7 +25,6 @@ import org.apache.commons.cli.CommandLine; import org.apache.commons.cli.CommandLineParser; import org.apache.commons.cli.GnuParser; -import org.apache.commons.cli.HelpFormatter; import org.apache.commons.cli.Option; import org.apache.commons.cli.OptionBuilder; import org.apache.commons.cli.Options; @@ -96,8 +95,8 @@ OptionBuilder.withDescription("Generate no warnings") .create( "nowarn" )); - final HelpFormatter formatter = new HelpFormatter(); - formatter.printHelp("jci", options); +// final HelpFormatter formatter = new HelpFormatter(); +// formatter.printHelp("jci", options); final CommandLineParser parser = new GnuParser(); final CommandLine cmd = parser.parse(options, args, true); Modified: jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java?view=diff&rev=519193&r1=519192&r2=519193 ============================================================================== --- jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java (original) +++ jakarta/commons/sandbox/jci/trunk/examples/src/main/java/org/apache/commons/jci/examples/serverpages/ServerPageServlet.java Fri Mar 16 17:08:20 2007 @@ -17,11 +17,165 @@ package org.apache.commons.jci.examples.serverpages; +import java.io.File; +import java.io.IOException; +import java.util.Collection; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import javax.servlet.ServletException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.jci.ReloadingClassLoader; +import org.apache.commons.jci.listeners.CompilingListener; +import org.apache.commons.jci.monitor.FilesystemAlterationMonitor; +import org.apache.commons.jci.monitor.FilesystemAlterationObserver; + /** - * * @author tcurdt */ -public final class ServerPageServlet { +public final class ServerPageServlet extends HttpServlet { + + private static final long serialVersionUID = 1L; + + private final ReloadingClassLoader classloader = new ReloadingClassLoader(ServerPageServlet.class.getClassLoader()); + private CompilingListener listener; + private FilesystemAlterationMonitor fam; + + private Map serverPagesByClassName = new HashMap(); + + public void init() throws ServletException { + super.init(); + + final File directory = new File(getServletContext().getRealPath("/") + getInitParameter("directory")); + + log("monitoring classes in " + directory); + + listener = new CompilingListener() { + + public void onStop( final FilesystemAlterationObserver pObserver ) { + super.onStop(pObserver); + + final File root = pObserver.getRootDirectory(); + + final Collection changedFiles = getChangedFiles(); + changedFiles.addAll(getCreatedFiles()); + final Collection deletedFiles = getDeletedFiles(); + + boolean reload = false; + + final Map newServerPagesByClassName = new HashMap(serverPagesByClassName); + + for (Iterator it = deletedFiles.iterator(); it.hasNext();) { + final File file = (File) it.next(); + final String serverPageClassName = convertFileToServerPageClassName(root, file); + newServerPagesByClassName.remove(serverPageClassName); + reload = true; + log("removing " + serverPageClassName); + } + + for (Iterator it = changedFiles.iterator(); it.hasNext();) { + final File file = (File) it.next(); + + final String serverPageClassName = convertFileToServerPageClassName(root, file); + + if (serverPageClassName == null) { + continue; + } + + try { + final Class clazz = classloader.loadClass(serverPageClassName); + final HttpServlet serverPage = (HttpServlet) clazz.newInstance(); + newServerPagesByClassName.put(serverPageClassName, serverPage); + reload = true; + log("compiled " + serverPageClassName); + } catch (ClassNotFoundException e) { + log("", e); + } catch (InstantiationException e) { + log("", e); + } catch (IllegalAccessException e) { + log("", e); + } + } + + if (reload) { + log("activating new map of serverpages "+ newServerPagesByClassName); + serverPagesByClassName = newServerPagesByClassName; + } + + } + }; + listener.addReloadNotificationListener(classloader); + + fam = new FilesystemAlterationMonitor(); + fam.addListener(directory, listener); + fam.start(); + } + + private String convertFileToServerPageClassName( final File root, final File file ) { + + if (!file.getName().endsWith(".java")) { + return null; + } + + final String relativeName = file.getAbsolutePath().substring(root.getAbsolutePath().length() + 1); + + log("relative: " + relativeName); + + final String clazzName = relativeName.replace('/', '.').substring(0, relativeName.length() - 5); + + log("clazz: " + clazzName); + + return clazzName; + } + + private String convertRequestToServerPageClassName( final HttpServletRequest request ) { + + final String path = request.getPathInfo().substring(1); + +// log("1 " + request.getContextPath()); +// log("2 " + request.getPathInfo()); +// log("3 " + request.getPathTranslated()); +// log("4 " + request.getRequestURI()); +// log("5 " + request.getServletPath()); +// log("6 " + request.getRequestURL()); + + // FIXME + // /some/page/bla.jsp -> some.page.Bla + + final String clazz = path; + + return clazz; + } + + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + log("request " + request.getRequestURI()); + + final String serverPageNameClassName = convertRequestToServerPageClassName(request); + + log("checking for serverpage " + serverPageNameClassName); + + final HttpServlet serverPage = (HttpServlet) serverPagesByClassName.get(serverPageNameClassName); + + if (serverPage == null) { + log("no serverpage for " + request.getRequestURI()); + response.sendError(404); + return; + } + + log("delegating request to " + serverPageNameClassName); + + serverPage.service(request, response); + } + public void destroy() { + + fam.stop(); + + super.destroy(); + } } Added: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java?view=auto&rev=519193 ============================================================================== --- jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java (added) +++ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java Fri Mar 16 17:08:20 2007 @@ -0,0 +1,12 @@ +import java.io.IOException; +import javax.servlet.http.HttpServlet; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import javax.servlet.ServletException; + + +public class Test extends HttpServlet { + protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { + System.out.println("SERVERPAGE!!"); + } +} \ No newline at end of file Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java ------------------------------------------------------------------------------ svn:keywords = Date Revision Author HeadURL Id Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/classes/Test.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Added: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml URL: http://svn.apache.org/viewvc/jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml?view=auto&rev=519193 ============================================================================== --- jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml (added) +++ jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml Fri Mar 16 17:08:20 2007 @@ -0,0 +1,16 @@ +<?xml version="1.0"?> +<web-app 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" version="2.4"> + <servlet> + <servlet-name>serverpages</servlet-name> + <servlet-class>org.apache.commons.jci.examples.serverpages.ServerPageServlet</servlet-class> + <init-param> + <param-name>directory</param-name> + <param-value>/WEB-INF/classes</param-value> + </init-param> + <load-on-startup>1</load-on-startup> + </servlet> + <servlet-mapping> + <servlet-name>serverpages</servlet-name> + <url-pattern>/*</url-pattern> + </servlet-mapping> +</web-app> Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:eol-style = native Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:keywords = Date Revision Author HeadURL Id Propchange: jakarta/commons/sandbox/jci/trunk/examples/src/main/webapp/WEB-INF/web.xml ------------------------------------------------------------------------------ svn:mime-type = text/xml --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]