You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by cr...@apache.org on 2002/07/04 12:24:00 UTC

cvs commit: jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet ServletContainer.java ServletContainer.roles ServletContainer.xconf ServletContainer.xlog servlet.java

crafterm    2002/07/04 03:24:00

  Modified:    fortress/examples build.xml
  Added:       fortress/examples/conf web.xml
               fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet
                        ServletContainer.java ServletContainer.roles
                        ServletContainer.xconf ServletContainer.xlog
                        servlet.java
  Log:
  First draft servlet based Fortress container example.
  
  Revision  Changes    Path
  1.3       +24 -2     jakarta-avalon-excalibur/fortress/examples/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/fortress/examples/build.xml,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- build.xml	4 Jul 2002 09:43:24 -0000	1.2
  +++ build.xml	4 Jul 2002 10:23:59 -0000	1.3
  @@ -111,6 +111,11 @@
       <!-- Initialize custom tasks                                             -->
       <!-- =================================================================== -->
       <target name="init" depends="collect-jars">
  +
  +        <available property="servlet.present" classname="javax.servlet.Servlet">
  +            <classpath refid="project.class.path"/>
  +        </available>
  +
       </target>
   
       <!-- =================================================================== -->
  @@ -126,6 +131,8 @@
               debug="on"
               optimize="off">
               <classpath refid="project.class.path" />
  +            <include name="**/*.java"/>
  +            <exclude name="**/servlet/*.java" unless="servlet.present"/>
           </javac>
   	
           <!-- copy resources to same location as .class files -->
  @@ -146,7 +153,22 @@
       
       </target>
       
  -    <target name="install" depends="jar">
  +    <target name="webapp" depends="jar">
  +    
  +    	<mkdir dir="${build.dir}/servlet"/>
  +	<mkdir dir="${build.dir}/servlet/WEB-INF"/>
  +	<mkdir dir="${build.dir}/servlet/WEB-INF/lib"/>
  +	
  +	<copy todir="${build.dir}/servlet/WEB-INF/lib">
  +	    <fileset dir="${lib.dir}">
  +	        <include name="*.jar"/>
  +		<exclude name="servlet*"/>
  +	    </fileset>
  +	</copy>
  +	
  +	<copy todir="${build.dir}/servlet/WEB-INF"
  +	      file="conf/web.xml"/>
  +	      
       </target>
   
       <!-- =================================================================== -->
  @@ -164,7 +186,7 @@
       <!-- =================================================================== -->
       <!-- Main target                                                         -->
       <!-- =================================================================== -->
  -    <target name="main" depends="install" description="build the runnable application">
  +    <target name="main" depends="jar" description="build the runnable application">
       </target>
   
       <!-- =================================================================== -->
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/conf/web.xml
  
  Index: web.xml
  ===================================================================
  <?xml version="1.0" encoding="ISO-8859-1"?>
  
  <!-- $Id: web.xml,v 1.1 2002/07/04 10:23:59 crafterm Exp $ -->
  
  <!DOCTYPE web-app
      PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN"
      "http://java.sun.com/j2ee/dtds/web-app_2.2.dtd">
  
  <web-app>
  	<display-name>Fortress-Example</display-name>
  
  	<description>
  		A Fortress-based servlet container example
  	</description>
  
  	<servlet>
  		<servlet-name>ServletContainer</servlet-name>
  		<servlet-class>org.apache.excalibur.fortress.examples.servlet.servlet</servlet-class>
  		<load-on-startup>1</load-on-startup>
  	</servlet>
  
  	<!-- Map all documents to container servlet -->
  	<servlet-mapping>
  		<servlet-name>ServletContainer</servlet-name>
  		<url-pattern>/</url-pattern>
  	</servlet-mapping>
  
  </web-app>
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet/ServletContainer.java
  
  Index: ServletContainer.java
  ===================================================================
  /*
  * Copyright (C) The Apache Software Foundation. All rights reserved.
  *
  * This software is published under the terms of the Apache Software License
  * version 1.1, a copy of which has been included with this distribution in
  * the LICENSE.txt file.
  */
  package org.apache.excalibur.fortress.examples.servlet;
  
  import java.io.IOException;
  import java.io.PrintWriter;
  
  import javax.servlet.ServletException;
  import javax.servlet.ServletRequest;
  import javax.servlet.ServletResponse;
  
  import org.apache.avalon.framework.component.ComponentException;
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.excalibur.fortress.AbstractContainer;
  
  import org.apache.excalibur.fortress.examples.components.Translator;
  
  /**
   * Fortress based servlet example. Presents a simple page to the user
   * displaying the possible languages they can see the text 'hello world'
   * written in.
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version CVS $Revision: 1.1 $ $Date: 2002/07/04 10:24:00 $
   */
  public final class ServletContainer extends AbstractContainer
  {
      public static final String KEY = "hello-world";
  
      private ComponentManager m_manager;
      private Translator m_translator;
  
      /**
       * Initialize this component
       *
       * @exception Exception if an error occurs
       */
      public void initialize()
          throws Exception
      {
          super.initialize();
  
          // REVISIT: shouldn't this work in compose() ?
          m_manager = getComponentManager();
          m_translator = ( Translator ) m_manager.lookup( Translator.ROLE );
      }
  
      /**
       * Simple method to handle requests sent to the container from the
       * controlling servlet. This container simply displays a page containing
       * a list of possible languages the user can see the text 'hello world' 
       * written in.
       *
       * @param request a <code>ServletRequest</code> instance
       * @param response a <code>ServletResponse</code> instance
       * @exception ServletException if a servlet error occurs
       * @exception IOException if an IO error occurs
       */
      public void handleRequest( ServletRequest request, ServletResponse response )
          throws ServletException, IOException
      {
          PrintWriter out = response.getWriter();
          String selected = request.getParameter( "language" );
          String[] languages = m_translator.getSupportedLanguages( KEY );
  
          out.println( "<html>" );
          out.println( "<head><title>Hello World!</title></head>" );
          out.println( "<body>" );
          out.println( "<hr>" );
  
          out.println( "<h1>" );
  
          if ( selected == null )
          {
              out.println( "Please select your language" );
          }
          else
          {
              out.println( m_translator.getTranslation( KEY, selected ) );
          }
  
          out.println( "</h1>" );
          out.println( "<hr>" );
  
          out.println( "Available languages:" );
  
          out.println( "<form action='' name='languagelist'>" );
          out.println( "<select size='1' name='language'>" );
  
          for ( int i = 0; i < languages.length; ++i )
          {
              String lang = languages[ i ];
              out.print( "<option value='" + lang + "'" );
  
              // preselect chosen language
  
              if ( lang.equals( selected ) )
              {
                  out.print( " selected" );
              }
  
              out.println( ">" + lang + "</option>" );
          }
  
          out.println( "</select>" );
          out.println( "<input value='OK' type='submit'>" );
          out.println( "</form>" );
  
          out.println( "</body>" );
          out.println( "</html>" );
  
          out.close();
      }
  
      /**
       * Release resources
       */
      public void dispose()
      {
          super.dispose();
  
          if ( m_translator != null )
              m_manager.release( m_translator );
      }
  }
  
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet/ServletContainer.roles
  
  Index: ServletContainer.roles
  ===================================================================
  <fortress-roles>
  
    <role name="org.apache.excalibur.fortress.examples.components.Translator">
      <component shorthand="translator"
                 class="org.apache.excalibur.fortress.examples.components.TranslatorImpl"
                 handler="org.apache.excalibur.fortress.handler.ThreadSafeComponentHandler"/>
    </role>
  
  </fortress-roles>
  
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet/ServletContainer.xconf
  
  Index: ServletContainer.xconf
  ===================================================================
  <?xml version="1.0" encoding="iso-8859-1" ?>
  
  <!-- Example Fortress configuration file.
  
       This file contains sample component configurations for the Fortress 'servlet'
       example.
   -->
  <fortress-example>
  
    <!-- Simple translation component. This component maintains translations for a
         given key in different languages.
     -->
    <translator id="translator" logger="translator">
  	<dictionary>
  	  <translation key="hello-world">
  	    <value language="Deutsch">Hallo Welt</value>
  	    <value language="English">Hello World</value>
  	    <value language="Fran�ais">Bonjour la monde</value>
  	    <value language="Indonesia">Apa kabar Dunia</value>
  	    <value language="Espan�l">Hola Mundo</value>
  	    <value language="Italiano">Ciao Mondo</value>
  	  </translation>
  	</dictionary>
    </translator>
  
  </fortress-example>
  
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet/ServletContainer.xlog
  
  Index: ServletContainer.xlog
  ===================================================================
  <logkit>
      <factories>
        <factory type="file" class="org.apache.avalon.excalibur.logger.factory.FileTargetFactory"/>
      </factories>
  
      <targets>
         <file id="root">
          <filename>fortress-examples.log</filename>
          <format type="extended">
            %7.7{priority} %5.5{time}   [%8.8{category}] (%{context}): %{message}\n%{throwable}
          </format>
         </file>
       </targets>
  
       <categories>
         <category name="" log-level="DEBUG">
           <log-target id-ref="root"/>
         </category>
       </categories>
  
  </logkit>
  
  
  
  1.1                  jakarta-avalon-excalibur/fortress/examples/src/java/org/apache/excalibur/fortress/examples/servlet/servlet.java
  
  Index: servlet.java
  ===================================================================
  /*
  * Copyright (C) The Apache Software Foundation. All rights reserved.
  *
  * This software is published under the terms of the Apache Software License
  * version 1.1, a copy of which has been included with this distribution in
  * the LICENSE.txt file.
  */
  package org.apache.excalibur.fortress.examples.servlet;
  
  import java.io.IOException;
  
  import javax.servlet.ServletException;
  import javax.servlet.ServletRequest;
  import javax.servlet.ServletResponse;
  import javax.servlet.http.HttpServlet;
  
  import org.apache.avalon.framework.component.ComponentManager;
  import org.apache.avalon.framework.configuration.Configuration;
  import org.apache.avalon.framework.configuration.DefaultConfigurationBuilder;
  import org.apache.avalon.framework.context.Context;
  import org.apache.avalon.framework.context.DefaultContext;
  import org.apache.avalon.framework.logger.LogKitLogger;
  import org.apache.avalon.framework.logger.Logger;
  import org.apache.excalibur.fortress.ContainerManager;
  import org.apache.excalibur.fortress.DefaultContainerManager;
  import org.apache.excalibur.fortress.util.ContextBuilder;
  import org.apache.excalibur.fortress.util.ContextManager;
  
  /**
   * Servlet based Fortress container example.
   *
   * @author <a href="mailto:crafterm@apache.org">Marcus Crafter</a>
   * @version $Id: servlet.java,v 1.1 2002/07/04 10:24:00 crafterm Exp $
   */
  public final class servlet extends HttpServlet
  {
      private ServletContainer m_container;
      private ContainerManager m_containerManager;
  
      /**
       * Initializes Servlet and creates a <code>ServletContainer</code> instance
       *
       * @exception ServletException if an error occurs
       */
      public void init()
          throws ServletException
      {
          super.init();
  
          try
          {
              ContextBuilder contextBuilder = new ContextBuilder();
              contextBuilder.setContainerClass( "org.apache.excalibur.fortress.examples.servlet.ServletContainer" );
              contextBuilder.setContextDirectory( "./" );
              contextBuilder.setWorkDirectory( "./" );
              contextBuilder.setContainerConfiguration( "resource://org/apache/excalibur/fortress/examples/servlet/ServletContainer.xconf" );
              contextBuilder.setLoggerManagerConfiguration( "resource://org/apache/excalibur/fortress/examples/servlet/ServletContainer.xlog" );
              contextBuilder.setRoleManagerConfiguration( "resource://org/apache/excalibur/fortress/examples/servlet/ServletContainer.roles" );
  
              ContextManager contextManager = new ContextManager( contextBuilder.getContext(), null );
              contextManager.initialize();
  
              m_containerManager = new DefaultContainerManager( contextManager );
              m_containerManager.initialize();
  
              m_container = ( ServletContainer ) m_containerManager.getContainer();
          }
          catch ( Exception e )
          {
              throw new ServletException( "Error during initialization", e );
          }
      }
  
      /**
       * Pass all servlet requests through to container to be handled. In a more
       * complex system, there could be multiple containers that handle different
       * requests, or a main controlling container with subcontainers for different
       * requests.
       *
       * @param request a <code>ServletRequest</code> instance
       * @param response a <code>ServletResponse</code> instance
       * @exception IOException if an IO error occurs
       * @exception ServletException if a servlet error occurs
       */
      public void service( ServletRequest request, ServletResponse response )
          throws IOException, ServletException
      {
          m_container.handleRequest( request, response );
      }
  
      /**
       * Disposes of container manager and container instance.
       */
      public void destroy()
      {
          m_containerManager.dispose();
      }
  }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>