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/