cvs commit: spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty AbstractJettyJervlet.java AvalonJettyJervlet.java BeanJettyJervlet.java PicoJettyJervlet.java

Ryan Hoegg <[email protected]> Thu, 13 Nov 2003 16:49:46 -0800
Newsgroups gmane.comp.java.spice.cvs
Message-ID <[email protected]>
rhoegg      03/11/13 16:49:46

  Modified:    sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty
                        AbstractJettyJervlet.java AvalonJettyJervlet.java
                        BeanJettyJervlet.java PicoJettyJervlet.java
  Log:
  Applied patches submitted by Johan Sjöberg.
  Primarily a patch to enable jetty to  be configured using its own configuration format.
  Also includes some stylistic changes.
  
  Revision  Changes    Path
  1.2       +54 -8     spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/AbstractJettyJervlet.java
  
  Index: AbstractJettyJervlet.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/AbstractJettyJervlet.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- AbstractJettyJervlet.java	6 Nov 2003 20:25:46 -0000	1.1
  +++ AbstractJettyJervlet.java	14 Nov 2003 00:49:46 -0000	1.2
  @@ -3,38 +3,84 @@
   import org.mortbay.jetty.Server;
   import org.mortbay.http.SocketListener;
   import org.mortbay.util.MultiException;
  +import org.mortbay.xml.XmlConfiguration;
  +
   import org.jcomponent.jervlet.JervletConfig;
   import org.jcomponent.jervlet.JervletException;
  +
   import org.apache.avalon.framework.CascadingRuntimeException;
   
  +import org.xml.sax.SAXException;
  +
   import java.net.UnknownHostException;
   import java.util.HashMap;
  +import java.io.IOException;
   
  -public class AbstractJettyJervlet {
  -
  -    protected JervletConfig config;
  +public class AbstractJettyJervlet
  +{
  +    protected JervletConfig m_config;
       protected Server m_server;
       protected HashMap m_webcontexts = new HashMap();
   
  +
  +    /**
  +     * Create a new Jetty HTTP server
  +     */
       protected final Server createHttpServer()
       {
           return new Server();
       }
   
  +
  +    /**
  +     * Create a new Jetty HTTP server from a Jetty configuration file.
  +     *
  +     * @param filename The URL or name of the configuration file.
  +     * @throws IOException if the configuration file couldn't be read.
  +     */
  +    protected final Server createHttpServerFromFile( final String filename ) throws IOException
  +    {
  +        return new Server( filename );
  +    }
  +
  +
  +    /**
  +     * Create a new Jetty HTTP server from a Jetty XML configuration.
  +     *
  +     * @param xmlConfiguration A String of Jetty XML configuration commands
  +     *        excluding the normal XML preamble. The String should start with
  +     *        a "<Configure ...." element.
  +     * @throws Exception if any problems occur
  +     */
  +    protected final Server createHttpServerFromConfiguration( final String xmlConfiguration )
  +      throws Exception
  +    {
  +        try
  +        {
  +            return (Server) new XmlConfiguration( xmlConfiguration ).newInstance();
  +        }
  +        catch( Exception e )
  +        {
  +            throw e;
  +        }
  +    }
  +
  +
       protected final SocketListener createSocketListener() throws UnknownHostException
       {
           SocketListener listener = new SocketListener();
   
  -        if( null != config.getHostName() )
  +        if( null != m_config.getHostName() )
           {
  -            listener.setHost( config.getHostName() );
  +            listener.setHost( m_config.getHostName() );
           }
   
  -        listener.setPort( config.getPort() );
  -        listener.setMinThreads( config.getMinThreads() );
  -        listener.setMaxThreads( config.getMaxThreads() );
  +        listener.setPort( m_config.getPort() );
  +        listener.setMinThreads( m_config.getMinThreads() );
  +        listener.setMaxThreads( m_config.getMaxThreads() );
           return listener;
       }
  +
   
       /**
        * Start
  
  
  
  1.3       +125 -21   spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/AvalonJettyJervlet.java
  
  Index: AvalonJettyJervlet.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/AvalonJettyJervlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- AvalonJettyJervlet.java	6 Nov 2003 22:06:03 -0000	1.2
  +++ AvalonJettyJervlet.java	14 Nov 2003 00:49:46 -0000	1.3
  @@ -54,6 +54,7 @@
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  +import org.apache.avalon.framework.configuration.DefaultConfigurationSerializer;
   import org.apache.avalon.framework.context.Context;
   import org.apache.avalon.framework.context.ContextException;
   import org.apache.avalon.framework.context.Contextualizable;
  @@ -88,23 +89,43 @@
   public class AvalonJettyJervlet extends AbstractJettyJervlet
       implements Jervlet, Startable, Contextualizable, Configurable, Initializable, Serviceable, LogEnabled
   {
  +    private final static String c_appHome = "${app-home}";
  +
  +    /** Jetty's configuration */
  +    private String m_jettyConfiguration;
  +
  +    /** Jetty's configuration file */
  +    private String m_jettyConfFile;
   
       private File m_sarRootDir;
       private AvalonJervletContext m_jervletContext;
       private Context m_context;
       private Logger m_logger;
   
  -    public void enableLogging(Logger logger) {
  +
  +    /**
  +     * Get the Avalon logger
  +     */
  +    public void enableLogging( Logger logger )
  +    {
           m_logger = logger;
       }
   
  -    protected Logger getLogger() {
  +
  +    /**
  +     * Fetch the logger
  +     */
  +    protected Logger getLogger()
  +    {
           return m_logger;
       }
   
  +
       /**
  +     * Get the Avalon service manager
  +     *
        * @param serviceManager
  -     * @throws ServiceException
  +     * @throws ServiceException if any problems occur
        *
        * @phoenix:dependency name="org.jcomponent.jervlet.blocks.jetty.RequestLogger"
        */
  @@ -113,8 +134,10 @@
           m_jervletContext = new AvalonJervletContext( m_context, serviceManager, getLogger() );
       }
   
  +
       /**
  -     * Contextualize
  +     * Contextualize the component
  +     *
        * @param context the context
        */
       public void contextualize( final Context context ) throws ContextException
  @@ -123,37 +146,117 @@
           m_sarRootDir = (File)context.get( "app.home" );
       }
   
  +
       /**
  -     * Configure
  +     * Configure the component
  +     *
        * @param configuration the configuration
  -     * @throws ConfigurationException if a problem
  +     * @throws ConfigurationException if any problems occur
        *
        * @phoenix:configuration-schema type="http://relaxng.org/ns/structure/1.0"
        */
       public void configure( final Configuration configuration ) throws ConfigurationException
       {
           JervletConfigBean config = new JervletConfigBean();
  -
  -        config.setHostName(configuration.getChild( "hostname" ).getValue( null ));
  -        config.setPort(configuration.getChild( "port" ).getValueAsInteger( 8080 ));
  -        config.setMinThreads(configuration.getChild( "minthreads" ).getValueAsInteger( 5 ));
  -        config.setMaxThreads(configuration.getChild( "maxthreads" ).getValueAsInteger( 250 ));
  -        config.setExtractWarFile(configuration.getChild( "extract-war" ).getValueAsBoolean( true ));
  -
  +        config.setHostName( configuration.getChild( "hostname" ).getValue( null ) );
  +        config.setPort( configuration.getChild( "port" ).getValueAsInteger( 8080 ) );
  +        config.setMinThreads( configuration.getChild( "minthreads" ).getValueAsInteger( 5 ) );
  +        config.setMaxThreads( configuration.getChild( "maxthreads" ).getValueAsInteger( 250 ) );
  +        config.setExtractWarFile( configuration.getChild( "extract-war" )
  +          .getValueAsBoolean( true ) );
           if( config.getMaxThreads() < config.getMinThreads() )
           {
               throw new ConfigurationException( "maxthreads must be greater than minthreads" );
           }
  +        m_config = config;
  +
  +        m_jettyConfFile = configuration.getChild( "jetty-config-file" ).getValue( null );
  +        if( null != m_jettyConfFile )
  +        {
  +            getLogger().info( "Configuring Jetty from file [" + m_jettyConfFile + "]." );
  +            if( m_jettyConfFile.startsWith( c_appHome ) )
  +            {
  +                m_jettyConfFile = m_sarRootDir.getAbsolutePath() +
  +                  m_jettyConfFile.substring( c_appHome.length() );
  +            }
  +            if( m_jettyConfFile.startsWith( c_appHome ) )
  +            {
  +                m_jettyConfFile = m_jettyConfFile.substring( c_appHome.length() );
  +            }
  +            m_jettyConfFile = m_jettyConfFile.replace( '\\', File.separatorChar );
  +            m_jettyConfFile = m_jettyConfFile.replace( '/', File.separatorChar );
  +        }
  +        else
  +        {
  +            m_jettyConfiguration = configuration.getChild( "jetty-config" ).getValue( null );
  +            if( null == m_jettyConfiguration )
  +            {
  +                Configuration jettyConf = configuration.getChild( "jetty-config" )
  +                  .getChild( "Configure", false );
  +                if( null != jettyConf )
  +                {
  +                    try
  +                    {
  +                        DefaultConfigurationSerializer serializer =
  +                          new DefaultConfigurationSerializer();
  +                        m_jettyConfiguration =  serializer.serialize( jettyConf );
  +                    }
  +                    catch( Exception e )
  +                    {
  +                        final String message = "Serialization of Jetty's configuration failed.";
  +                        getLogger().error( message, e );
  +                        throw new ConfigurationException( message, e );
  +                    }
  +                }
  +            }
  +            if( null != m_jettyConfiguration )
  +            {
  +                getLogger().info( "Configurating Jetty from component configuration." );
  +                if( m_jettyConfiguration.indexOf ("?>") >= 0 )
  +                {
  +                    m_jettyConfiguration = m_jettyConfiguration.substring(
  +                      m_jettyConfiguration.indexOf ("?>") + 2 );
  +                }
  +            }
  +        }
  +
  +        String jettyHome = configuration.getChild( "jetty-home" ).getValue( "" );
  +        if( !"".equals( jettyHome ) )
  +        {
  +            if( jettyHome.startsWith( c_appHome ) )
  +            {
  +                jettyHome = m_sarRootDir.getAbsolutePath()
  +                  + jettyHome.substring( c_appHome.length() );
  +            }
  +            getLogger().info( "Setting system property 'jetty.home' to [" + jettyHome + "]." );
  +            System.setProperty( "jetty.home", jettyHome );
  +        }
       }
   
  +
       /**
        * Initialize
  -     * @throws Exception if a problem
  +     * @throws Exception if any problems occur
        */
       public void initialize() throws Exception
       {
  -        m_server = createHttpServer();
  -        m_server.addListener( createSocketListener() );
  +        if( null != m_jettyConfiguration && !"".equals( m_jettyConfiguration ) )
  +        {
  +             m_server = createHttpServerFromConfiguration( m_jettyConfiguration );
  +        }
  +        else if( null != m_jettyConfFile && !"".equals( m_jettyConfFile ) )
  +        {
  +             m_server = createHttpServerFromFile( m_jettyConfFile );
  +        }
  +        else
  +        {
  +            m_server = createHttpServer();
  +        }
  +
  +        if( m_config.getPort() > 0 )
  +        {
  +            m_server.addListener( createSocketListener() );
  +        }
   
           AvalonLogSink logSink = new AvalonLogSink();
           logSink.enableLogging( getLogger() );
  @@ -161,8 +264,8 @@
           // unsatisfactory as is static
           Log.instance().add( logSink );
   
  -        RequestLogger logger = (RequestLogger)
  -            m_jervletContext.getServiceManager().lookup( RequestLogger.ROLE );
  +        RequestLogger logger = ( RequestLogger )m_jervletContext.getServiceManager()
  +         .lookup( RequestLogger.ROLE );
           m_server.setRequestLog( new JettyRequestLogAdapter( logger ) );
       }
   
  @@ -201,7 +304,7 @@
                                                         pathToWebAppFolder,
                                                         jervletContext,
                                                         m_sarRootDir,
  -                                                      config.getExtractWarFile() );
  +                                                      m_config.getExtractWarFile() );
               m_webcontexts.put( context, holder );
           }
           catch( Exception e )
  @@ -332,12 +435,13 @@
   
           try
           {
  -            m_server.addContext( config.getHostName(), holder.create() );
  +            m_server.addContext( m_config.getHostName(), holder.create() );
   
               if( getLogger().isInfoEnabled() )
                   getLogger().info( "deploying context=" + context + ", webapp="
                                     + holder.getWebappUrl() + " to host="
  -                                  + ( config.getHostName() == null ? "(All Hosts)" : config.getHostName() ) );
  +                                  + ( m_config.getHostName() == null ? "(All Hosts)" :
  +                                    m_config.getHostName() ) );
   
               holder.start();
           }
  
  
  
  1.3       +5 -5      spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/BeanJettyJervlet.java
  
  Index: BeanJettyJervlet.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/BeanJettyJervlet.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- BeanJettyJervlet.java	6 Nov 2003 22:06:03 -0000	1.2
  +++ BeanJettyJervlet.java	14 Nov 2003 00:49:46 -0000	1.3
  @@ -89,7 +89,7 @@
       private LogSink logSink;
   
       public void setJervletConfig(JervletConfig config) {
  -        super.config = config;
  +        super.m_config = config;
       }
   
       public void setRequestLogger(RequestLogger requestLogger) {
  @@ -160,7 +160,7 @@
                                                         pathToWebAppFolder,
                                                         jervletContext,
                                                         appRootDir,
  -                                                      config.getExtractWarFile() );
  +                                                      m_config.getExtractWarFile() );
               m_webcontexts.put( context, holder );
           }
           catch( Exception e )
  @@ -283,16 +283,16 @@
   
           try
           {
  -            m_server.addContext( config.getHostName(), holder.create() );
  +            m_server.addContext( m_config.getHostName(), holder.create() );
   
  -            monitor.deployingContext(this.getClass(), context, holder.getWebappUrl(), config.getHostName());
  +            monitor.deployingContext(this.getClass(), context, holder.getWebappUrl(), m_config.getHostName());
   
               holder.start();
           }
           catch( Exception e )
           {
   
  -            monitor.deployingException(this.getClass(), context, holder.getWebappUrl(), config.getHostName(), e);
  +            monitor.deployingException(this.getClass(), context, holder.getWebappUrl(), m_config.getHostName(), e);
   
           }
       }
  
  
  
  1.4       +7 -10     spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/PicoJettyJervlet.java
  
  Index: PicoJettyJervlet.java
  ===================================================================
  RCS file: /cvsroot/spice/spice/sandbox/jervlet/jervlet-jetty/src/java/org/jcomponent/jervlet/blocks/jetty/PicoJettyJervlet.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PicoJettyJervlet.java	6 Nov 2003 22:06:03 -0000	1.3
  +++ PicoJettyJervlet.java	14 Nov 2003 00:49:46 -0000	1.4
  @@ -93,7 +93,7 @@
       public PicoJettyJervlet(JervletConfig config, JervletMonitor monitor, MutablePicoContainer parentContainer,
                               File appRootDir, RequestLogger requestLogger,
                               LogSink logSink) throws UnknownHostException {
  -        super.config = config;
  +        super.m_config = config;
           this.monitor = monitor;
           this.appRootDir = appRootDir;
           this.logSink = logSink;
  @@ -146,7 +146,7 @@
                                                         pathToWebAppFolder,
                                                         jervletContext,
                                                         appRootDir,
  -                                                      config.getExtractWarFile() );
  +                                                      m_config.getExtractWarFile() );
               m_webcontexts.put( context, holder );
           }
           catch( Exception e )
  @@ -266,20 +266,17 @@
   
           //Set the context classloader because the current classloader will be that of the
           Thread.currentThread().setContextClassLoader( getClass().getClassLoader() );
  -
           try
           {
  -            m_server.addContext( config.getHostName(), holder.create() );
  -
  -            monitor.deployingContext(this.getClass(), context, holder.getWebappUrl(), config.getHostName());
  -
  +            m_server.addContext( m_config.getHostName(), holder.create() );
  +            monitor.deployingContext( this.getClass(), context, holder.getWebappUrl(),
  +              m_config.getHostName() );
               holder.start();
           }
           catch( Exception e )
           {
  -
  -            monitor.deployingException(this.getClass(), context, holder.getWebappUrl(), config.getHostName(), e);
  -
  +            monitor.deployingException(this.getClass(), context, holder.getWebappUrl(),
  +              m_config.getHostName(), e);
           }
       }
   
  
  
  


-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/