You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2004/02/03 15:49:53 UTC

cvs commit: avalon/merlin/facilities/http/test/src/java/test/http Counter.java DefaultCounter.java TestServlet.java

mcconnell    2004/02/03 06:49:53

  Modified:    merlin/facilities/http README.TXT
               merlin/facilities/http/test/src/java/test/http
                        TestServlet.java
  Added:       merlin/facilities/http/test/src/java/test/http Counter.java
                        DefaultCounter.java
  Log:
  Make the test servlet more visibly a component.
  
  Revision  Changes    Path
  1.3       +1 -22     avalon/merlin/facilities/http/README.TXT
  
  Index: README.TXT
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/facilities/http/README.TXT,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- README.TXT	2 Feb 2004 11:31:37 -0000	1.2
  +++ README.TXT	3 Feb 2004 14:49:52 -0000	1.3
  @@ -4,26 +4,5 @@
     $ cd merlin\facilities\http\test
     $ merlin -execute -kernel conf\kernel.xml conf\test.xml
   
  -All this does is launch (a) a http server as a facility and (b) a model listener (defined under kernel.xml).  The model listener needs to be updated to check if a component is a servlet and if so, get the context path that it should be added to - then register the component with the server.  
  +The point you we browser to http://localhost:8080/test/hello
   
  -Lots of little things still to be done - like:
  -
  -  (a) servlet recognition
  -  (b) how do we associate a context at the <compoent> directive level
  -  (c) servlet/component registration
  -
  -Update:
  -
  -  Recognition - the listener now recognizes components that 
  -  are themselves Servlets.  One issue that came up was the 
  -  availability of the servlet apis - the workaround was to 
  -  update the kernel factory meta to include servlet api in the 
  -  general api for merlin - but we will need a better solution
  -  in the long term to support comman api addition (perhaps 
  -  using a AVALON_HOME/lib as a location for common apis).
  -
  -Next Steps:
  -
  -  Assiciation with the server and context stuff.
  -
  -Steve.
  
  
  
  1.4       +50 -3     avalon/merlin/facilities/http/test/src/java/test/http/TestServlet.java
  
  Index: TestServlet.java
  ===================================================================
  RCS file: /home/cvs/avalon/merlin/facilities/http/test/src/java/test/http/TestServlet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- TestServlet.java	2 Feb 2004 21:10:52 -0000	1.3
  +++ TestServlet.java	3 Feb 2004 14:49:52 -0000	1.4
  @@ -19,6 +19,13 @@
   
   import java.io.IOException;
   import java.io.PrintWriter;
  +import java.util.Date;
  +
  +import org.apache.avalon.framework.logger.LogEnabled;
  +import org.apache.avalon.framework.logger.Logger;
  +import org.apache.avalon.framework.service.ServiceManager;
  +import org.apache.avalon.framework.service.Serviceable;
  +import org.apache.avalon.framework.service.ServiceException;
   
   import javax.servlet.ServletException;
   import javax.servlet.http.HttpServlet;
  @@ -30,13 +37,47 @@
    * and registration of the kernel base URL under the servlet 
    * context using the key.
    * 
  - * @avalon.component name="test" lifestyle="transient"
  + * @avalon.component name="test" lifestyle="thread"
    * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
    * @avalon.service type="javax.servlet.Servlet"
    */
  -public class TestServlet extends HttpServlet
  +public class TestServlet extends HttpServlet implements LogEnabled, Serviceable
   {
       //----------------------------------------------------------
  +    // state
  +    //----------------------------------------------------------
  +
  +    private Logger m_logger;
  +
  +    private int m_count;
  +
  +    private Counter m_counter;
  +
  +    //----------------------------------------------------------
  +    // lifecycle
  +    //----------------------------------------------------------
  +
  +    public void enableLogging( Logger logger )
  +    {
  +        m_logger = logger;
  +    }
  +
  +    protected Logger getLogger()
  +    {
  +        return m_logger;
  +    }
  +
  +   /**
  +    * Service the servlet.
  +    * @param manager the service manager
  +    * @avalon.dependency type="test.http.Counter" key="counter"
  +    */
  +    public void service( ServiceManager manager ) throws ServiceException
  +    {
  +        m_counter = (Counter) manager.lookup( "counter" );
  +    }
  +
  +    //----------------------------------------------------------
       // Servlet
       //----------------------------------------------------------
   
  @@ -73,6 +114,12 @@
                         HttpServletResponse response)
         throws IOException, ServletException {
   
  +        int count = m_counter.increment();
  +        
  +        m_count++;
  +
  +        getLogger().info( "get " + new Date() + ", (" + m_count + "/" + count + ")" );
  +
           response.setContentType("text/html");
           PrintWriter writer = response.getWriter();
           String context = request.getContextPath();
  @@ -82,7 +129,7 @@
           writer.println("</head>");
           writer.println("<body>" );
           writer.println("<hr/>");
  -        writer.println("<h3>Hello.</h3>");
  +        writer.println("<h3>Hello (" + m_count + "/" + count + ").</h3>");
           writer.println("<hr/>");
           writer.println("<p>I'm an Avalon component.<br/>");
           writer.println("I'm also a Servlet.<br/>");
  
  
  
  1.1                  avalon/merlin/facilities/http/test/src/java/test/http/Counter.java
  
  Index: Counter.java
  ===================================================================
  /* 
   * Copyright 2004 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 test.http;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.util.Date;
  
  import org.apache.avalon.framework.logger.LogEnabled;
  import org.apache.avalon.framework.logger.Logger;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  /**
   * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
   */
  public interface Counter
  {
     /**
      * Return an incremented value.
      * @return a incremented value
      */
      int increment();
  
  }
  
  
  
  1.1                  avalon/merlin/facilities/http/test/src/java/test/http/DefaultCounter.java
  
  Index: DefaultCounter.java
  ===================================================================
  /* 
   * Copyright 2004 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 test.http;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  import java.util.Date;
  
  import org.apache.avalon.framework.logger.LogEnabled;
  import org.apache.avalon.framework.logger.Logger;
  
  import javax.servlet.ServletException;
  import javax.servlet.http.HttpServlet;
  import javax.servlet.http.HttpServletRequest;
  import javax.servlet.http.HttpServletResponse;
  
  /**
   * A singleton component that increments a counter.
   * 
   * @avalon.component name="test" lifestyle="singleton"
   * @author <a href="mailto:mcconnell@apache.org">Stephen McConnell</a>
   * @avalon.service type="test.http.Counter"
   */
  public class DefaultCounter implements Counter
  {
      //----------------------------------------------------------
      // state
      //----------------------------------------------------------
  
      private int m_count = 0;
  
      //----------------------------------------------------------
      // Counter
      //----------------------------------------------------------
  
      public int increment()
      {
          m_count++;
          return m_count;
      }
  }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org