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]

Reply via email to