Skip to Content.
Sympa Menu

notify-dpml - r1021 - in trunk/main: metro/model/src/main/net/dpml/metro/data metro/runtime/src/main/net/dpml/metro/runtime metro/tools/src/main/net/dpml/metro/tools planet/web planet/web/server planet/web/server/etc/prefs/xmls planet/web/server/src/main/net/dpml/web/server planet/web/test/etc planet/web/test/etc/prefs planet/web/test/etc/prefs/xmls planet/web/test/src/main planet/web/test/src/test/net/dpml/web/test planet/web/war planet/web/war/etc planet/web/war/src planet/web/war/src/main planet/web/war/src/main/org

notify-dpml AT lists.ibiblio.org

Subject: DPML Notify

List archive

Chronological Thread  
  • From: mcconnell at BerliOS <mcconnell AT mail.berlios.de>
  • To: notify-dpml AT lists.ibiblio.org
  • Subject: r1021 - in trunk/main: metro/model/src/main/net/dpml/metro/data metro/runtime/src/main/net/dpml/metro/runtime metro/tools/src/main/net/dpml/metro/tools planet/web planet/web/server planet/web/server/etc/prefs/xmls planet/web/server/src/main/net/dpml/web/server planet/web/test/etc planet/web/test/etc/prefs planet/web/test/etc/prefs/xmls planet/web/test/src/main planet/web/test/src/test/net/dpml/web/test planet/web/war planet/web/war/etc planet/web/war/src planet/web/war/src/main planet/web/war/src/main/org
  • Date: Sat, 4 Feb 2006 19:28:09 +0100

Author: mcconnell
Date: 2006-02-04 19:27:57 +0100 (Sat, 04 Feb 2006)
New Revision: 1021

Added:
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ArrayDataType.java
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueBuilder.java
trunk/main/planet/web/server/etc/prefs/xmls/default.xml

trunk/main/planet/web/server/src/main/net/dpml/web/server/NCSARequestLog.java

trunk/main/planet/web/server/src/main/net/dpml/web/server/ResolvingContextHandler.java

trunk/main/planet/web/server/src/main/net/dpml/web/server/ResourceHandler.java

trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHandler.java

trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHolder.java

trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletMapping.java
trunk/main/planet/web/test/etc/prefs/
trunk/main/planet/web/test/etc/prefs/xmls/
trunk/main/planet/web/test/etc/prefs/xmls/jetty.xml

trunk/main/planet/web/test/src/test/net/dpml/web/test/KeystoreIntegrityTestCase.java
trunk/main/planet/web/war/build.xml
trunk/main/planet/web/war/etc/web.xml
trunk/main/planet/web/war/etc/web/
trunk/main/planet/web/war/src/
trunk/main/planet/web/war/src/main/
trunk/main/planet/web/war/src/main/org/
trunk/main/planet/web/war/src/main/org/acme/
Removed:
trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirective.java

trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirectiveBeanInfo.java
trunk/main/planet/web/test/etc/web.xml
trunk/main/planet/web/test/etc/web/
trunk/main/planet/web/test/src/main/org/
trunk/main/planet/web/war/src/main/org/acme/
Modified:

trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java

trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java

trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java

trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
trunk/main/metro/tools/src/main/net/dpml/metro/tools/EntryDataType.java
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueDataType.java
trunk/main/planet/web/module.xml
trunk/main/planet/web/server/build.xml
trunk/main/planet/web/server/etc/prefs/xmls/jetty.xml

trunk/main/planet/web/server/src/main/net/dpml/web/server/ContextHandler.java
trunk/main/planet/web/server/src/main/net/dpml/web/server/Server.java
trunk/main/planet/web/test/src/test/net/dpml/web/test/ServerTestCase.java
trunk/main/planet/web/war/
Log:
* cleanup array handling
* add evaluation of activation policy to internal parts
* link demo tools to transit's Contstruct.Array class
* add generic ValueBuilder interface
* add an example web-app project
* some playing around with the default web server

Deleted:
trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirective.java
===================================================================
--- trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirective.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirective.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -1,232 +0,0 @@
-/*
- * Copyright 2004-2005 Stephen J. McConnell.
- *
- * 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 net.dpml.metro.data;
-
-import java.net.URI;
-import java.net.URISyntaxException;
-import java.lang.reflect.Array;
-import java.util.Map;
-import java.util.Arrays;
-
-import net.dpml.transit.Value;
-import net.dpml.transit.Construct;
-
-import net.dpml.part.Directive;
-
-/**
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public final class ArrayDirective implements Directive, Value
-{
-
//--------------------------------------------------------------------------
- // static
-
//--------------------------------------------------------------------------
-
- /**
- * Serial version identifier.
- */
- static final long serialVersionUID = 1L;
-
-
//--------------------------------------------------------------------------
- // state
-
//--------------------------------------------------------------------------
-
- private final String m_classname;
- private final Value[] m_values;
-
-
//--------------------------------------------------------------------------
- // constructors
-
//--------------------------------------------------------------------------
- /**
- * Create a new array directive.
- *
- * @param classname the array type
- * @param values the construct values
- */
- public ArrayDirective( String classname, Value[] values )
- {
- if( null == classname )
- {
- m_classname = Object.class.getName();
- }
- else
- {
- m_classname = classname;
- }
-
- m_values = values;
- }
-
-
//--------------------------------------------------------------------------
- // ArrayDirective
-
//--------------------------------------------------------------------------
-
- public String getClassname()
- {
- return m_classname;
- }
-
- public Value[] getValues()
- {
- return m_values;
- }
-
-
//--------------------------------------------------------------------------
- // Value
-
//--------------------------------------------------------------------------
-
- /**
- * Resolve an instance from the value using the context classloader.
- * @return the resolved instance
- * @exception Exception if error occurs during instance resolution
- */
- public Object resolve() throws Exception
- {
- return resolve( null, false );
- }
-
- /**
- * Resolve an instance from the value using a supplied context map. If
any
- * target expressions in immediate or nested values contain a symbolic
- * expression the value will be resolved using the supplied map.
- *
- * @param map the context map
- * @return the resolved instance
- * @exception Exception if error occurs during instance resolution
- */
- public Object resolve( Map map ) throws Exception
- {
- return resolve( map, false );
- }
-
- /**
- * Resolve an instance from the value using a supplied isolvation policy.
- *
- * @param isolate the isolation policy
- * @return the resolved instance
- * @exception Exception if error occurs during instance resolution
- */
- public Object resolve( boolean isolate ) throws Exception
- {
- return resolve( null, isolate );
- }
-
- /**
- * Resolve an instance from the value using a supplied context map. If
any
- * target expressions in immediate or nested values contain a symbolic
- * expression the value will be resolved using the supplied map.
- *
- * @param map the context map
- * @param isolate the isolation policy
- * @return the resolved instance
- * @exception Exception if error occurs during instance resolution
- */
- public Object resolve( Map map, boolean isolate ) throws Exception
- {
- ClassLoader loader = Thread.currentThread().getContextClassLoader();
- Class c = loader.loadClass( m_classname );
- Object[] instances = (Object[]) Array.newInstance( c,
m_values.length );
- for( int i=0; i<m_values.length; i++ )
- {
- Value value = m_values[i];
- instances[i] = value.resolve( map, isolate );
- }
- return instances;
- }
-
-
//--------------------------------------------------------------------------
- // Object
-
//--------------------------------------------------------------------------
-
- /**
- * Test if the supplied object is equal to this object.
- * @param other the object to compare with this instance
- * @return TRUE if the supplied object is equal to this object
- */
- public boolean equals( Object other )
- {
- if( null == other )
- {
- return false;
- }
- if( !( other instanceof ArrayDirective ) )
- {
- return false;
- }
- else
- {
- ArrayDirective directive = (ArrayDirective) other;
- if( !m_classname.equals( directive.m_classname ) )
- {
- return false;
- }
- else
- {
- return Arrays.equals( m_values, directive.m_values );
- }
- }
- }
-
- /**
- * Return the hashcode for the instance.
- * @return the instance hashcode
- */
- public int hashCode()
- {
- int hash = m_classname.hashCode();
- for( int i=0; i<m_values.length; i++ )
- {
- hash ^= m_values[i].hashCode();
- }
- return hash;
- }
-
-
//--------------------------------------------------------------------------
- // Part
-
//--------------------------------------------------------------------------
-
- /**
- * Return the part handler uri.
- * @return the uri of the part handler
- */
- public URI getPartHandlerURI()
- {
- return PART_HANDLER_URI;
- }
-
- private static final URI PART_HANDLER_URI = setupURI(
"@PART-HANDLER-URI@" );
-
- /**
- * Internal utility to create a static uri.
- * @param spec the uri spec
- * @return the uri
- */
- protected static URI setupURI( String spec )
- {
- try
- {
- return new URI( spec );
- }
- catch( URISyntaxException ioe )
- {
- return null;
- }
- }
-}

Deleted:
trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirectiveBeanInfo.java
===================================================================
---
trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirectiveBeanInfo.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/metro/model/src/main/net/dpml/metro/data/ArrayDirectiveBeanInfo.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -1,73 +0,0 @@
-/*
- * Copyright 2005 Stephen J. McConnell.
- *
- * 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 net.dpml.metro.data;
-
-import java.beans.SimpleBeanInfo;
-import java.beans.BeanDescriptor;
-import java.beans.DefaultPersistenceDelegate;
-import java.beans.Encoder;
-import java.beans.Expression;
-
-/**
- * BeanInfo for the ContextDescriptor class that declares a persistence
- * delegate.
- *
- * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
- * @version @PROJECT-VERSION@
- */
-public final class ArrayDirectiveBeanInfo extends SimpleBeanInfo
-{
- private static final BeanDescriptor BEAN_DESCRIPTOR =
setupBeanDescriptor();
-
- /**
- * Return the bean descriptor.
- * @return the descriptor
- */
- public BeanDescriptor getBeanDescriptor()
- {
- return BEAN_DESCRIPTOR;
- }
-
- private static BeanDescriptor setupBeanDescriptor()
- {
- BeanDescriptor descriptor = new BeanDescriptor( ArrayDirective.class
);
- descriptor.setValue(
- "persistenceDelegate",
- new ArrayDirectivePersistenceDelegate() );
- return descriptor;
- }
-
- /**
- * Persistence delegate implementation.
- */
- private static class ArrayDirectivePersistenceDelegate extends
DefaultPersistenceDelegate
- {
- /**
- * Return the expression value.
- * @param old the old instance
- * @param encoder the encoder
- * @return the expression
- */
- public Expression instantiate( Object old, Encoder encoder )
- {
- ArrayDirective construct = (ArrayDirective) old;
- Object[] args = new Object[2];
- args[0] = construct.getClassname();
- args[1] = construct.getValues();
- return new Expression( old, old.getClass(), "new", args );
- }
- }
-}

Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/ComponentController.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -271,12 +271,16 @@
}
}

+System.out.println( "#10" );
try
{
- return constructor.newInstance( args );
+ Object instance = constructor.newInstance( args );
+System.out.println( "#11" );
+ return instance;
}
catch( InstantiationException e )
{
+System.out.println( "#12" );
final String error =
"Instantiation failure within the component ["
+ handler
@@ -285,12 +289,28 @@
}
catch( IllegalAccessException e )
{
+System.out.println( "#13" );
final String error =
"Cannot access component constructor in ["
+ handler
+ "].";
throw new ControllerException( error, e );
}
+ catch( InvocationTargetException e )
+ {
+System.out.println( "#14" );
+ getLogger().error( "ITC", e );
+ throw e;
+ }
+ catch( Throwable e )
+ {
+System.out.println( "#15" );
+ final String error =
+ "Unexpected error in ["
+ + handler
+ + "].";
+ throw new ControllerException( error, e );
+ }
}

/**

Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultComponentHandler.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -325,6 +325,7 @@
*/
public Provider getProvider() throws InvocationTargetException,
ControlException
{
+ getLogger().debug( "getProvider" );
activate();
return m_holder.getProvider();
}
@@ -821,7 +822,10 @@
{
try
{
- return new DefaultProvider( this, getLogger() );
+ getLogger().info( "creating provider" );
+ DefaultProvider provider = new DefaultProvider( this,
getLogger() );
+ getLogger().info( "created provider" );
+ return provider;
}
catch( RemoteException e )
{
@@ -898,20 +902,26 @@

DefaultProvider getProvider() throws ControlException,
InvocationTargetException
{
+ getLogger().debug( "resolving singleton provider" );
if( m_reference == null )
{
+ getLogger().error( "null reference" );
throw new IllegalStateException( "disposed" );
}

DefaultProvider instance = (DefaultProvider) m_reference.get();
if( null == instance )
{
+ getLogger().info( "initializing provider instance" );
instance = createDefaultProvider();
+ getLogger().info( "provider instance established" );
m_reference = createReference( instance );
+ getLogger().info( "returing provider" );
return instance;
}
else
{
+ getLogger().info( "returing existing provider" );
return instance;
}
}

Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultPartsManager.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -265,30 +265,33 @@
throw new IllegalStateException( error );
}

- getLogger().debug( "commissioning internal parts" );
+ ControlException exception = null;
ArrayList list = new ArrayList();
Component[] components = getComponents();
- ControlException exception = null;
- for( int i=0; i<components.length; i++ )
+ if( components.length > 0 )
{
- Component component = components[i];
- try
+ getLogger().debug( "commissioning internal parts" );
+ for( int i=0; i<components.length; i++ )
{
- if( component.getActivationPolicy().equals(
ActivationPolicy.STARTUP ) )
+ Component component = components[i];
+ try
{
- component.activate();
- list.add( component );
+ if( component.getActivationPolicy().equals(
ActivationPolicy.STARTUP ) )
+ {
+ component.activate();
+ list.add( component );
+ }
}
+ catch( Throwable e )
+ {
+ final String error =
+ "Error during the commission of the internal parts of
a component."
+ + "\nEnclosing Component: " + m_handler
+ + "\nInternal Part: " + component;
+ exception = new ControllerException( error, e );
+ break;
+ }
}
- catch( Throwable e )
- {
- final String error =
- "Error during the commission of the internal parts of a
component."
- + "\nEnclosing Component: " + m_handler
- + "\nInternal Part: " + component;
- exception = new ControllerException( error, e );
- break;
- }
}

if( null != exception )

Modified:
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
===================================================================
---
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/metro/runtime/src/main/net/dpml/metro/runtime/DefaultProvider.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -118,7 +118,6 @@
}

m_handler = handler;
-
State graph = handler.getStateGraph();
m_machine = new DefaultStateMachine( graph );
m_machine.addPropertyChangeListener( new StateEventPropergator( this
) );

Added: trunk/main/metro/tools/src/main/net/dpml/metro/tools/ArrayDataType.java
===================================================================
--- trunk/main/metro/tools/src/main/net/dpml/metro/tools/ArrayDataType.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/metro/tools/src/main/net/dpml/metro/tools/ArrayDataType.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,104 @@
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * 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 net.dpml.metro.tools;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import net.dpml.transit.Value;
+import net.dpml.transit.Construct;
+import net.dpml.transit.Construct.Array;
+
+/**
+ * Defintion of a context entry parameter directive.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public class ArrayDataType implements ValueBuilder
+{
+ private String m_classname;
+ private List m_params = new ArrayList();
+
+ /**
+ * Set the context entry classname.
+ * @param classname the context entry classname
+ */
+ public void setClass( final String classname )
+ {
+ m_classname = classname;
+ }
+
+ /**
+ * Return the context entry parameter classname.
+ * @return the classname
+ */
+ public String getClassname()
+ {
+ return m_classname;
+ }
+
+ /**
+ * Create, assign and return a new nested entry constructor parameter.
+ * @return the new context entry param
+ */
+ public ValueDataType createValue()
+ {
+ final ValueDataType param = new ValueDataType();
+ m_params.add( param );
+ return param;
+ }
+
+ /**
+ * Create, assign and return a new nested array.
+ * @return the new array parameter
+ */
+ public ArrayDataType createArray()
+ {
+ final ArrayDataType param = new ArrayDataType();
+ m_params.add( param );
+ return param;
+ }
+
+ /**
+ * Return the set of nested param directives.
+ * @return the params
+ */
+ private ValueBuilder[] getValueBuilders()
+ {
+ return (ValueBuilder[]) m_params.toArray( new ValueBuilder[0] );
+ }
+
+ /**
+ * Build a value datastructure.
+ * @return the serializable value descriptor
+ */
+ public Value buildValue()
+ {
+ String classname = getClassname();
+ ValueBuilder[] params = getValueBuilders();
+ Value[] values = new Value[ params.length ];
+ for( int i=0; i<values.length; i++ )
+ {
+ ValueBuilder p = params[i];
+ values[i] = p.buildValue();
+ }
+ return new Array( classname, values );
+ }
+}

Modified:
trunk/main/metro/tools/src/main/net/dpml/metro/tools/EntryDataType.java
===================================================================
--- trunk/main/metro/tools/src/main/net/dpml/metro/tools/EntryDataType.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/metro/tools/src/main/net/dpml/metro/tools/EntryDataType.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -30,6 +30,7 @@
import net.dpml.metro.info.EntryDescriptor;
import net.dpml.metro.info.Type;

+import net.dpml.transit.Value;
import net.dpml.transit.Construct;

import org.apache.tools.ant.BuildException;
@@ -262,12 +263,12 @@
}
else
{
- ValueDataType[] params = getValueDataTypes();
- Construct[] values = new Construct[ params.length ];
+ ValueBuilder[] params = getValueBuilders();
+ Value[] values = new Value[ params.length ];
for( int i=0; i<params.length; i++ )
{
- ValueDataType p = params[i];
- values[i] = p.newConstruct();
+ ValueBuilder p = params[i];
+ values[i] = p.buildValue();
}
return new ValueDirective( classname, method, values );
}

Added: trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueBuilder.java
===================================================================
--- trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueBuilder.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueBuilder.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,37 @@
+/*
+/*
+ * Copyright (c) 2005 Stephen J. McConnell
+ *
+ * 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 net.dpml.metro.tools;
+
+import net.dpml.transit.Value;
+
+/**
+ * The contract for builders that create value datatypes.
+ *
+ * @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
+ * @version @PROJECT-VERSION@
+ */
+public interface ValueBuilder
+{
+ /**
+ * Build a value datastructure.
+ * @return the serializable value descriptor
+ */
+ Value buildValue();
+}

Modified:
trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueDataType.java
===================================================================
--- trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueDataType.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/metro/tools/src/main/net/dpml/metro/tools/ValueDataType.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -24,6 +24,7 @@
import net.dpml.metro.data.ValueDirective;

import net.dpml.transit.Construct;
+import net.dpml.transit.Value;

/**
* Defintion of a context entry parameter directive.
@@ -31,14 +32,13 @@
* @author <a href="@PUBLISHER-URL@">@PUBLISHER-NAME@</a>
* @version @PROJECT-VERSION@
*/
-public class ValueDataType
+public class ValueDataType implements ValueBuilder
{
private String m_classname;
private String m_method;
private String m_value;
private List m_params = new ArrayList();

-
/**
* Set the context entry classname.
* @param classname the context entry classname
@@ -97,7 +97,6 @@
* Create, assign and return a new nested entry constructor parameter.
* @return the new context entry param
*/
- //public ValueDataType createParam()
public ValueDataType createValue()
{
final ValueDataType param = new ValueDataType();
@@ -106,19 +105,30 @@
}

/**
+ * Create, assign and return a new nested array datatype.
+ * @return the new array datatype
+ */
+ public ArrayDataType createArray()
+ {
+ final ArrayDataType param = new ArrayDataType();
+ m_params.add( param );
+ return param;
+ }
+
+ /**
* Return the set of nested param directives.
* @return the params
*/
- public ValueDataType[] getValueDataTypes()
+ public ValueBuilder[] getValueBuilders()
{
- return (ValueDataType[]) m_params.toArray( new ValueDataType[0] );
+ return (ValueBuilder[]) m_params.toArray( new ValueBuilder[0] );
}

/**
- * Construct a value directive.
- * @return the constructed value directive
+ * Build a value datastructure.
+ * @return the serializable value descriptor
*/
- public ValueDirective constructValue()
+ public Value buildValue()
{
String classname = getClassname();
String method = getMethodName();
@@ -129,12 +139,12 @@
}
else
{
- ValueDataType[] params = getValueDataTypes();
- Construct[] values = new Construct[ params.length ];
+ ValueBuilder[] params = getValueBuilders();
+ Value[] values = new Value[ params.length ];
for( int i=0; i<values.length; i++ )
{
- ValueDataType p = params[i];
- values[i] = p.newConstruct();
+ ValueBuilder p = params[i];
+ values[i] = p.buildValue();
}
return new ValueDirective( classname, method, values );
}
@@ -144,6 +154,7 @@
* Create a construct for the datatype.
* @return the construct
*/
+ /*
public Construct newConstruct()
{
String classname = getClassname();
@@ -165,4 +176,5 @@
return new Construct( classname, method, values );
}
}
+ */
}

Modified: trunk/main/planet/web/module.xml
===================================================================
--- trunk/main/planet/web/module.xml 2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/module.xml 2006-02-04 18:27:57 UTC (rev 1021)
@@ -12,6 +12,7 @@
<type id="part" alias="true"/>
</types>
<dependencies>
+ <include ref="dpml/metro/dpml-metro-model"/>
<include ref="dpml/util/dpml-logging-api"/>
<include urn="artifact:jar:jetty/servlet-api-2.5#20060131"/>
<include urn="artifact:jar:tomcat/jasper-runtime#5.5.12"/>
@@ -25,14 +26,31 @@
</dependencies>
</project>

+ <project name="dpml-web-app" basedir="war">
+ <types>
+ <type id="jar"/>
+ <type id="war" alias="true"/>
+ </types>
+ <properties>
+ <property name="project.test.fork" value="true"/>
+ </properties>
+ <dependencies>
+ <include urn="artifact:jar:servletapi/servletapi#2.4" tag="public"/>
+ <include urn="artifact:jar:jetty/jetty#6.0.0-20060131"/>
+ </dependencies>
+ </project>
+
+ <!--
<project name="dpml-http-test" basedir="test">
<types>
<type id="jar"/>
- <type id="war"/>
</types>
<properties>
<property name="project.test.fork" value="true"/>
</properties>
+ <dependencies scope="build">
+ <include key="dpml-web-app"/>
+ </dependencies>
<dependencies>
<include urn="artifact:jar:servletapi/servletapi#2.4" tag="public"/>
<include urn="artifact:jar:jetty/jetty#6.0.0-20060131"/>
@@ -42,5 +60,6 @@
<include ref="ant/ant-junit"/>
</dependencies>
</project>
+ -->

</module>

Modified: trunk/main/planet/web/server/build.xml
===================================================================
--- trunk/main/planet/web/server/build.xml 2006-02-04 18:10:18 UTC (rev
1020)
+++ trunk/main/planet/web/server/build.xml 2006-02-04 18:27:57 UTC (rev
1021)
@@ -17,16 +17,29 @@
-->

<project default="install"
- xmlns:transit="antlib:net.dpml.transit" xmlns:depot="dpml:depot" >
+ xmlns:transit="antlib:net.dpml.transit" xmlns:depot="dpml:depot">

<transit:import uri="local:template:dpml/tools/standard"/>

<target name="build" depends="standard.build">
<depot:plugin uri="link:plugin:dpml/metro/dpml-metro-tools" urn="metro"/>
- <type xmlns="metro" name="server" class="net.dpml.web.server.Server"
threadsafe="true">
+
+ <type xmlns="metro" class="net.dpml.web.server.NCSARequestLog"
threadsafe="true" name="ncsa">
<services>
- <service class="org.mortbay.jetty.Server"/>
+ <service class="org.mortbay.jetty.RequestLog"/>
</services>
+ </type>
+
+ <type xmlns="metro" name="context"
class="net.dpml.web.server.ContextHandler" threadsafe="true" >
+ <services>
+ <service class="org.mortbay.jetty.handler.ContextHandler"/>
+ </services>
+ </type>
+
+ <type xmlns="metro" name="server" class="net.dpml.web.server.Server"
threadsafe="true" collection="hard">
+ <services>
+ <service class="net.dpml.web.server.Server"/>
+ </services>
<state>
<trigger event="initialization">
<transition name="init" target="started">
@@ -47,13 +60,65 @@
</transition>
</state>
</state>
+ <parts>
+ <component key="requestLog"
+ type="net.dpml.web.server.NCSARequestLog" collection="hard"
activation="DEMAND">
+ <context>
+ <entry key="filename"
value="$${dpml.data}/logs/http/request.log"/>
+ <entry key="append" value="true"/>
+ <entry key="extended" value="true"/>
+ </context>
+ </component>
+ </parts>
</type>
- <component xmlns="metro" type="net.dpml.web.server.Server"
activation="system" collection="hard"/>
+
+ <!--
+ Creation of a HTTP server configured to present static content in
+ the ${dpml.share}/docs directory.
+ -->
+ <component xmlns="metro" type="net.dpml.web.server.Server"
lifestyle="singleton">
+ <parts>
+ <component key="context" type="net.dpml.web.server.ContextHandler">
+ <context>
+ <entry key="server" validate="false"/>
+ <entry key="resourceBase" value="${dpml.share}/docs"/>
+ <entry key="contextPath" value="/docs"/>
+ <entry key="handler" class="net.dpml.web.server.ResourceHandler">
+ <value value="resources"/>
+ <value value="/"/>
+ </entry>
+ </context>
+ </component>
+ <component key="servlets" type="net.dpml.web.server.ContextHandler">
+ <context>
+ <entry key="server" validate="false"/>
+ <entry key="resourceBase"
value="${dpml.data}/temp/http/context"/>
+ <entry key="contextPath" value="/"/>
+ <entry key="handler" class="net.dpml.web.server.ServletHandler">
+ <array class="net.dpml.web.server.ServletHolder">
+ <value class="net.dpml.web.server.ServletHolder">
+ <value value="hello"/>
+ <value value="org.mortbay.jetty.servlet.DefaultServlet"/>
+ </value>
+ </array>
+ <array class="net.dpml.web.server.ServletMapping">
+ <value class="net.dpml.web.server.ServletMapping">
+ <value value="hello"/>
+ <value value="/"/>
+ </value>
+ </array>
+ </entry>
+ </context>
+ </component>
+ </parts>
+ </component>
+
<catalog xmlns="metro" title="Test Catalog">
<fileset dir="${basedir}">
<include name="**/target/classes/main/**/*.type"/>
</fileset>
</catalog>
+
</target>

<target name="install" depends="standard.install">
@@ -67,3 +132,4 @@
</target>

</project>
+

Added: trunk/main/planet/web/server/etc/prefs/xmls/default.xml
===================================================================
--- trunk/main/planet/web/server/etc/prefs/xmls/default.xml 2006-02-04
18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/server/etc/prefs/xmls/default.xml 2006-02-04
18:27:57 UTC (rev 1021)
@@ -0,0 +1,46 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd";>
+
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server -->
+<!-- =============================================================== -->
+<Configure id="Server" class="org.mortbay.jetty.Server">
+
+ <!-- =========================================================== -->
+ <!-- Server Thread Pool -->
+ <!-- =========================================================== -->
+ <Set name="ThreadPool">
+ <New class="org.mortbay.thread.BoundedThreadPool">
+ <Set name="minThreads">10</Set>
+ <Set name="maxThreads">100</Set>
+ </New>
+ </Set>
+
+ <!-- =========================================================== -->
+ <!-- Set connectors -->
+ <!-- =========================================================== -->
+ <Set name="connectors">
+ <Array type="org.mortbay.jetty.Connector">
+
+ <Item>
+ <New class="org.mortbay.jetty.nio.SelectChannelConnector">
+ <Set name="port">8080</Set>
+ <Set name="maxIdleTime">50000</Set>
+ <Set name="Acceptors">10</Set>
+ </New>
+ </Item>
+
+ </Array>
+ </Set>
+
+</Configure>
+
+
+
+
+
+
+
+
+

Modified: trunk/main/planet/web/server/etc/prefs/xmls/jetty.xml
===================================================================
--- trunk/main/planet/web/server/etc/prefs/xmls/jetty.xml 2006-02-04
18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/server/etc/prefs/xmls/jetty.xml 2006-02-04
18:27:57 UTC (rev 1021)
@@ -8,22 +8,6 @@
<Configure id="Server" class="org.mortbay.jetty.Server">

<!-- =========================================================== -->
- <!-- Initialize management framework -->
- <!-- =========================================================== -->
- <!--
- <Call id="MBeanServer" class="javax.management.MBeanServerFactory"
name="createMBeanServer">
- <Arg>org.mortbay.jetty</Arg>
- </Call>
- <Get id="Container" name="container"/>
- <New class="org.mortbay.management.MBeanContainer">
- <Arg><Ref id="MBeanServer" /></Arg>
- <Arg><Ref id="Container"/></Arg>
- <Set name="managementPort">8082</Set>
- <Call name="start" />
- </New>
- -->
-
- <!-- =========================================================== -->
<!-- Server Thread Pool -->
<!-- =========================================================== -->
<Set name="ThreadPool">
@@ -63,9 +47,8 @@
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-->
<!-- Add a HTTPS SSL listener on port 8443
-->
<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
-->
- <!--
<Item>
- <New class="net.dpml.web.server.SslSocketConnector">
+ <New class="org.mortbay.jetty.security.SslSocketConnector">
<Set name="Port">8443</Set>
<Set name="maxIdleTime">30000</Set>
<Set name="Keystore">local:keystore:dpml/planet/web/jetty</Set>
@@ -73,18 +56,7 @@
<Set name="KeyPassword">OBF:1u2u1wml1z7s1z7a1wnl1u2g</Set>
</New>
</Item>
- -->

- <Item>
- <New class="net.dpml.web.server.SslSocketConnector">
- <Set name="Port">8443</Set>
- <Set name="maxIdleTime">30000</Set>
- <Set name="Keystore">local:keystore:dpml/planet/web/demo</Set>
- <Set name="Password">password</Set>
- <Set name="KeyPassword">password</Set>
- </New>
- </Item>
-
</Array>
</Set>

@@ -98,7 +70,7 @@
<!-- Configure a context directly - no XML parser required -->
<!-- ======================================================= -->
<Item>
- <New id="docsContext" class="net.dpml.web.server.ContextHandler">
+ <New id="docsContext"
class="net.dpml.web.server.ResolvingContextHandler">
<Set name="contextPath">/docs</Set>
<Set name="resourceBase">${dpml.data}/docs</Set>
<Set name="priority">100</Set>

Modified:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ContextHandler.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ContextHandler.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ContextHandler.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -17,24 +17,63 @@

import net.dpml.transit.util.PropertyResolver;

+import net.dpml.logging.Logger;
+
+import org.mortbay.jetty.Handler;
+
/**
* Context handler with enhanced support for symbolic property
dereferencing.
*/
-public class ContextHandler extends org.mortbay.jetty.handler.ContextHandler
implements Comparable
+public class ContextHandler extends ResolvingContextHandler implements
Comparable
{
+ /**
+ * HTTP Context handler context defintion.
+ */
+ public interface Context
+ {
+ /**
+ * Get the required HTTP server.
+ * @return the assigned http server
+ */
+ Server getServer();
+
+ /**
+ * Get the http context resource base. The value may contain symbolic
+ * property references and should resolve to a local directory.
+ *
+ * @return the resource base
+ */
+ String getResourceBase();
+
+ /**
+ * Get the context path under which the http context instance will
+ * be associated.
+ *
+ * @return the assigned context path
+ */
+ String getContextPath();
+
+ /**
+ * Get the internal context handler's handler.
+ *
+ * @return the handler
+ */
+ Handler getHandler();
+
+ }
+
private int m_priority = 0;

- /**
- * Set the context reosurce base. The supplied path argument
- * may contain system property references as symbolic references in the
- * form ${key} which will be expanded prior to value assignment.
- *
- * @param path the base resource as a string
- */
- public void setResourceBase( String path )
+ public ContextHandler( Context context ) throws Exception
{
- String resolved = PropertyResolver.resolve( path );
- super.setResourceBase( resolved );
+ String base = context.getResourceBase();
+ super.setResourceBase( base );
+ String path = context.getContextPath();
+ super.setContextPath( path );
+ Handler handler = context.getHandler();
+ super.setHandler( handler );
+ Server server = context.getServer();
+ server.addHandler( this );
}

/**

Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/NCSARequestLog.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/NCSARequestLog.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/NCSARequestLog.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,160 @@
+/*
+ * Copyright 2004 Niclas Hedman.
+ * Copyright 2005-2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+import java.io.File;
+import java.util.ArrayList;
+import java.util.StringTokenizer;
+
+import net.dpml.transit.util.PropertyResolver;
+
+/**
+ * Wrapper for the Jetty NCSA request logger.
+ */
+public class NCSARequestLog extends org.mortbay.jetty.NCSARequestLog
+{
+ /**
+ * Component context.
+ */
+ public interface Context
+ {
+ /**
+ * Return the append policy.
+ * @param value the default policy value
+ * @return the resolved value
+ */
+ boolean getAppend( boolean value );
+
+ /**
+ * Return the extended policy.
+ * @param value the default policy value
+ * @return the resolved value
+ */
+ boolean getExtended( boolean value );
+
+ /**
+ * Return the prefer-proxy-for-address policy.
+ * @param value the default policy value
+ * @return the resolved value
+ */
+ boolean getPreferProxiedForAddress( boolean value );
+
+ /**
+ * Return the log filename.
+ * @param value the default filename value
+ * @return the resolved filename value
+ */
+ String getFilename( String value );
+
+ /**
+ * Return the log date format.
+ * @param value the default value
+ * @return the resolved value
+ */
+ String getLogDateFormat( String value );
+
+ /**
+ * Return the ignore paths value.
+ * @param value the default value
+ * @return the resolved value
+ */
+ String getIgnorePaths( String value );
+
+ /**
+ * Return the log time zone.
+ * @param value the default value
+ * @return the resolved value
+ */
+ String getLogTimeZone( String value );
+
+ /**
+ * Return the retain days value.
+ * @param value the default value
+ * @return the resolved value
+ */
+ int getRetainDays( int value );
+ }
+
+ /**
+ * Creation of a new NCSA request log.
+ * @param context the deployment context
+ */
+ public NCSARequestLog( Context context )
+ {
+ boolean append = context.getAppend( false );
+ setAppend( append );
+
+ boolean extended = context.getExtended( false );
+ setExtended( extended );
+
+ boolean preferProxiedFor = context.getPreferProxiedForAddress( false
);
+ setPreferProxiedForAddress( preferProxiedFor );
+
+ String filename = context.getFilename( null );
+ if( filename != null )
+ {
+ filename = PropertyResolver.resolve( System.getProperties(),
filename );
+ File file = new File( filename );
+ File parent = file.getParentFile();
+ parent.mkdirs();
+ setFilename( filename );
+ }
+
+ String dateformat = context.getLogDateFormat( null );
+ if( dateformat != null )
+ {
+ setLogDateFormat( dateformat );
+ }
+
+ String ignorepaths = context.getIgnorePaths( null );
+ if( ignorepaths != null )
+ {
+ String[] paths = tokenize( ignorepaths );
+ setIgnorePaths( paths );
+ }
+
+ String timezone = context.getLogTimeZone( null );
+ if( timezone != null )
+ {
+ setLogTimeZone( timezone );
+ }
+
+ int retain = context.getRetainDays( -1 );
+ if( retain > 0 )
+ {
+ setRetainDays( retain );
+ }
+ }
+
+ /**
+ * Tokenize the supplied string using a ' ,' delimiter.
+ * @param string the string to tokenize
+ * @return the array of values
+ */
+ private static String[] tokenize( String string )
+ {
+ ArrayList result = new ArrayList();
+ StringTokenizer st = new StringTokenizer( string, " ,", false );
+ while( st.hasMoreTokens() )
+ {
+ result.add( st.nextToken() );
+ }
+ String[] retVal = new String[ result.size() ];
+ result.toArray( retVal );
+ return retVal;
+ }
+}

Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResolvingContextHandler.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResolvingContextHandler.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResolvingContextHandler.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+import net.dpml.transit.util.PropertyResolver;
+
+import net.dpml.logging.Logger;
+
+/**
+ * Context handler with enhanced support for symbolic property
dereferencing.
+ */
+public class ResolvingContextHandler extends
org.mortbay.jetty.handler.ContextHandler
+{
+ /**
+ * Set the context reosurce base. The supplied path argument
+ * may contain system property references as symbolic references in the
+ * form ${name} which will be expanded prior to value assignment.
+ *
+ * @param path the base resource as a string
+ */
+ public void setResourceBase( String path )
+ {
+ if( null == path )
+ {
+ throw new NullPointerException( "path" );
+ }
+ String resolved = PropertyResolver.resolve( path );
+ super.setResourceBase( resolved );
+ }
+}

Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResourceHandler.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResourceHandler.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ResourceHandler.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,52 @@
+/*
+ * Copyright 2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+import java.io.File;
+import java.io.IOException;
+import java.net.URI;
+
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.jetty.servlet.ServletMapping;
+
+/**
+ * Default implementation of a static resource handler.
+ */
+public class ResourceHandler extends org.mortbay.jetty.servlet.ServletHandler
+{
+ public interface Context
+ {
+ String getName();
+ String getPath( String path );
+ }
+
+ public ResourceHandler( String name, String path )
+ {
+ super();
+
+ ServletHolder holder = new ServletHolder();
+ holder.setName( name );
+ holder.setClassName( "org.mortbay.jetty.servlet.DefaultServlet" );
+ ServletHolder[] servlets = new ServletHolder[]{holder};
+ setServlets( servlets );
+
+ ServletMapping mapping = new ServletMapping();
+ mapping.setPathSpec( path );
+ mapping.setServletName( name );
+ ServletMapping[] mappings = new ServletMapping[]{mapping};
+ setServletMappings( mappings );
+ }
+}

Modified:
trunk/main/planet/web/server/src/main/net/dpml/web/server/Server.java
===================================================================
--- trunk/main/planet/web/server/src/main/net/dpml/web/server/Server.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/server/src/main/net/dpml/web/server/Server.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -21,9 +21,14 @@

import net.dpml.logging.Logger;

+import net.dpml.metro.PartsManager;
+import net.dpml.metro.ComponentHandler;
+import net.dpml.part.Provider;
+
import org.mortbay.thread.ThreadPool;
import org.mortbay.jetty.RequestLog;
import org.mortbay.jetty.Handler;
+import org.mortbay.jetty.RequestLog;
import org.mortbay.xml.XmlConfiguration;
import org.mortbay.util.LazyList;

@@ -38,13 +43,30 @@
public interface Context
{
/**
- * Get the Jetty XML configuration uri.
+ * Get the Jetty XML configuration uri. The configuration uri is
+ * used to establish the default server configuration.
+ *
* @param uri the default uri
- * @return a uri referencing a Jetty configuration
+ * @return a uri referencing a Jetty configuration profile
*/
URI getConfiguration( URI uri );
+
+ /**
+ * Get the assigned request logger. If no request logger is
+ * assigned by the deployment scenario a default request logger
+ * will be established.
+ *
+ * @param logger the default value
+ * @return the resolved request logger
+ */
+ RequestLog getRequestLog( RequestLog logger );
}

+ public interface Parts extends PartsManager
+ {
+ RequestLog getRequestLog();
+ }
+
private final Logger m_logger;
private final Context m_context;

@@ -53,15 +75,15 @@
* @param logger the assigned logging channel
* @param context the assigned deployment context
*/
- public Server( Logger logger, Context context ) throws Exception
+ public Server( Logger logger, Context context, Parts parts ) throws
Exception
{
super();

m_logger = logger;
m_context = context;

- getLogger().debug( "commancing http server deployment" );
- URI standard = new URI( "local:xml:dpml/planet/web/jetty" );
+ getLogger().debug( "commencing http server deployment" );
+ URI standard = new URI( "local:xml:dpml/planet/web/default" );
URI uri = context.getConfiguration( standard );
Thread.currentThread().setContextClassLoader(
getClass().getClassLoader() );
if( null != uri )
@@ -71,6 +93,52 @@
XmlConfiguration config = new XmlConfiguration( url );
config.configure( this );
}
+
+ //
+ // setup the request log
+ //
+
+ RequestLog log = context.getRequestLog( null );
+ if( null != log )
+ {
+ super.setRequestLog( log );
+ }
+ else
+ {
+ super.setRequestLog( parts.getRequestLog() );
+ }
+
+ //
+ // check for any internal parts that are context handlers
+ //
+
+ getLogger().info( "# START HANDLER ADDITION" );
+ ComponentHandler[] handlers = parts.getComponentHandlers(
org.mortbay.jetty.handler.ContextHandler.class );
+ for( int i=0; i<handlers.length; i++ )
+ {
+ getLogger().info( "# HANDLER START " + (i+1) );
+ ComponentHandler handler = handlers[i];
+ try
+ {
+ getLogger().info( "# A" );
+ handler.getContextMap().put( "server", this );
+ getLogger().info( "# B" );
+ Provider provider = handler.getProvider();
+ getLogger().info( "# C" );
+ ContextHandler ch = (ContextHandler) provider.getValue(
false );
+ getLogger().info( "# D" );
+ super.addHandler( ch );
+ }
+ catch( Throwable e )
+ {
+ final String error =
+ "Failed to deploy content handler: " + handler;
+ throw new Exception( error, e );
+ }
+ getLogger().info( "# HANDLER DONE " + (i+1) );
+ }
+ getLogger().info( "# STOP HANDLER ADDITION" );
+
getLogger().debug( "http server is configured" );
}


Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHandler.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHandler.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHandler.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+import org.mortbay.jetty.servlet.ServletHolder;
+import org.mortbay.jetty.servlet.ServletMapping;
+
+/**
+ * A ServletHandler maintains a collection of servlets and a collection
+ * servlet name to context mappings.
+ */
+public class ServletHandler extends org.mortbay.jetty.servlet.ServletHandler
+{
+ public ServletHandler( ServletHolder[] servlets, ServletMapping[] maps )
+ {
+ super();
+
+ setServlets( servlets );
+ setServletMappings( maps );
+ }
+}

Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHolder.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHolder.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletHolder.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+/**
+ * Servlet classname to name binding.
+ */
+public class ServletHolder extends org.mortbay.jetty.servlet.ServletHolder
+{
+ public ServletHolder( String name, String classname )
+ {
+ super();
+
+ setName( name );
+ setClassName( classname );
+ }
+}

Added:
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletMapping.java
===================================================================
---
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletMapping.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/server/src/main/net/dpml/web/server/ServletMapping.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2006 Stephen McConnell.
+ *
+ * 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 net.dpml.web.server;
+
+/**
+ * Servlet path to name mapping.
+ */
+public class ServletMapping extends org.mortbay.jetty.servlet.ServletMapping
+{
+ public ServletMapping( String name, String path )
+ {
+ super();
+
+ setServletName( name );
+ setPathSpec( path );
+ }
+}

Added: trunk/main/planet/web/test/etc/prefs/xmls/jetty.xml
===================================================================
--- trunk/main/planet/web/test/etc/prefs/xmls/jetty.xml 2006-02-04 18:10:18
UTC (rev 1020)
+++ trunk/main/planet/web/test/etc/prefs/xmls/jetty.xml 2006-02-04 18:27:57
UTC (rev 1021)
@@ -0,0 +1,151 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN"
"http://jetty.mortbay.org/configure.dtd";>
+
+
+<!-- =============================================================== -->
+<!-- Configure the Jetty Server -->
+<!-- =============================================================== -->
+<Configure id="Server" class="org.mortbay.jetty.Server">
+
+ <!-- =========================================================== -->
+ <!-- Server Thread Pool -->
+ <!-- =========================================================== -->
+ <Set name="ThreadPool">
+ <New class="org.mortbay.thread.BoundedThreadPool">
+ <Set name="minThreads">10</Set>
+ <Set name="maxThreads">100</Set>
+ </New>
+ </Set>
+
+ <!-- =========================================================== -->
+ <!-- Set connectors -->
+ <!-- =========================================================== -->
+ <Set name="connectors">
+ <Array type="org.mortbay.jetty.Connector">
+
+ <Item>
+ <New class="org.mortbay.jetty.nio.BlockingChannelConnector">
+ <Set name="port">8080</Set>
+ </New>
+ </Item>
+
+ </Array>
+ </Set>
+
+ <!-- =========================================================== -->
+ <!-- Set handlers -->
+ <!-- =========================================================== -->
+
+ <Set name="handlers">
+ <Array type="org.mortbay.jetty.Handler">
+
+ <!-- ======================================================= -->
+ <!-- Setup a handler for static content -->
+ <!-- ======================================================= -->
+ <Item>
+ <New id="docsContext" class="net.dpml.web.server.ContextHandler">
+ <Set name="contextPath">/docs</Set>
+ <Set name="resourceBase">${dpml.data}/docs</Set>
+ <Set name="priority">100</Set>
+ <Set name="handler">
+ <New id="docsServletHandler"
class="org.mortbay.jetty.servlet.ServletHandler">
+ <Set name="servlets">
+ <Array type="org.mortbay.jetty.servlet.ServletHolder">
+ <Item>
+ <New class="org.mortbay.jetty.servlet.ServletHolder">
+ <Set name="name">Default</Set>
+ <Set
name="className">org.mortbay.jetty.servlet.DefaultServlet</Set>
+ </New>
+ </Item>
+ </Array>
+ </Set>
+ <Set name="servletMappings">
+ <Array type="org.mortbay.jetty.servlet.ServletMapping">
+ <Item>
+ <New class="org.mortbay.jetty.servlet.ServletMapping">
+ <Set name="pathSpec">/</Set>
+ <Set name="servletName">Default</Set>
+ </New>
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+ </New>
+ </Item>
+
+ <!-- ======================================================= -->
+ <!-- Configure a test web application with web.xml -->
+ <!-- ======================================================= -->
+
+ <Item>
+ <New id="testWebAppContext"
class="org.mortbay.jetty.webapp.WebAppContext">
+ <Set name="contextPath">/</Set>
+ <!--<Set name="war">./webapps/test</Set>-->
+ <Set name="war">link:war:dpml/planet/web/dpml-web-test</Set>
+ <Set name="VirtualHosts"><Array
type="java.lang.String"></Array></Set>
+ <Get name="SessionHandler">
+ <Set name="SessionManager"><New
class="org.mortbay.jetty.servlet.HashSessionManager"/></Set>
+ </Get>
+ </New>
+ </Item>
+
+ </Array>
+ </Set>
+
+
+ <!-- =========================================================== -->
+ <!-- Additional contexts not defined above -->
+ <!-- =========================================================== -->
+ <Call class="org.mortbay.jetty.webapp.WebAppContext"
name="addWebApplications">
+ <Arg><Ref id="Server"/></Arg>
+ <Arg>./webapps</Arg>
+ <Arg>org/mortbay/jetty/webapp/webdefault.xml</Arg>
+ <Arg type="boolean">True</Arg>
+ <Arg type="boolean">True</Arg>
+ </Call>
+
+ <!-- =========================================================== -->
+ <!-- Configure Realms -->
+ <!-- =========================================================== -->
+ <Set name="UserRealms">
+ <Array type="org.mortbay.jetty.security.UserRealm">
+ <Item>
+ <New class="net.dpml.web.server.HashUserRealm">
+ <Set name="name">Test Realm</Set>
+ <Set name="config">local:properties:dpml/planet/web/realm</Set>
+ </New>
+ </Item>
+ </Array>
+ </Set>
+
+ <!-- =========================================================== -->
+ <!-- Configure Request Log -->
+ <!-- =========================================================== -->
+ <!-- uncomment for a request log (and create logs directory)
+ <Set name="requestLog">
+ <New id="requestLogImpl" class="org.mortbay.jetty.NCSARequestLog">
+ <Arg><SystemProperty name="jetty.home"
default="."/>/logs/yyyy_mm_dd.request.log</Arg>
+ <Set name="retainDays">90</Set>
+ <Set name="append">true</Set>
+ <Set name="extended">false</Set>
+ <Set name="LogTimeZone">GMT</Set>
+ </New>
+ </Set>
+ -->
+
+ <!-- =========================================================== -->
+ <!-- Start the server -->
+ <!-- =========================================================== -->
+ <Call name="start"/>
+
+</Configure>
+
+
+
+
+
+
+
+
+

Deleted: trunk/main/planet/web/test/etc/web.xml
===================================================================
--- trunk/main/planet/web/test/etc/web.xml 2006-02-04 18:10:18 UTC (rev
1020)
+++ trunk/main/planet/web/test/etc/web.xml 2006-02-04 18:27:57 UTC (rev
1021)
@@ -1,173 +0,0 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
-<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_5.xsd";
- version="2.5">
-
- <display-name>Test WebApp</display-name>
-
- <listener>
- <listener-class>org.acme.TestListener</listener-class>
- </listener>
-
- <filter>
- <filter-name>TestFilter</filter-name>
- <filter-class>org.acme.TestFilter</filter-class>
- </filter>
-
- <filter-mapping>
- <filter-name>TestFilter</filter-name>
- <url-pattern>/dump/*</url-pattern>
- <url-pattern>*.dump</url-pattern>
- <servlet-name>*</servlet-name>
- </filter-mapping>
-
- <filter>
- <filter-name>Chat</filter-name>
- <filter-class>org.acme.ChatFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>Chat</filter-name>
- <url-pattern>/chat/*</url-pattern>
- </filter-mapping>
-
- <servlet>
- <servlet-name>Hello</servlet-name>
- <servlet-class>org.acme.HelloWorld</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Hello</servlet-name>
- <url-pattern>/hello/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Dump</servlet-name>
- <servlet-class>org.acme.Dump</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Dump</servlet-name>
- <url-pattern>/dump/*</url-pattern>
- <url-pattern>*.dump</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Session</servlet-name>
- <servlet-class>org.acme.SessionDump</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Session</servlet-name>
- <url-pattern>/session/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>Dispatch</servlet-name>
- <servlet-class>org.acme.DispatchServlet</servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>Dispatch</servlet-name>
- <url-pattern>/dispatch/*</url-pattern>
- </servlet-mapping>
-
- <servlet>
- <servlet-name>JspSnoop</servlet-name>
- <jsp-file>/snoop.jsp</jsp-file>
- <load-on-startup>1</load-on-startup>
- </servlet>
-
- <servlet-mapping>
- <servlet-name>JspSnoop</servlet-name>
- <url-pattern>/jspsnoop/*</url-pattern>
- </servlet-mapping>
-
- <!--
- <error-page>
- <error-code>404</error-code>
- <location>/dump/ERROR</location>
- </error-page>
- -->
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Any User</web-resource-name>
- <url-pattern>/dump/auth/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>*</role-name>
- </auth-constraint>
- </security-constraint>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>relax</web-resource-name>
- <url-pattern>/dump/auth/relax/*</url-pattern>
- <http-method>GET</http-method>
- <http-method>HEAD</http-method>
- </web-resource-collection>
- </security-constraint>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Admin Role</web-resource-name>
- <url-pattern>/dump/auth/admin/*</url-pattern>
- </web-resource-collection>
- <auth-constraint>
- <role-name>content-administrator</role-name>
- </auth-constraint>
- </security-constraint>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>Forbidden</web-resource-name>
- <url-pattern>/dump/auth/noaccess/*</url-pattern>
- </web-resource-collection>
- <auth-constraint/>
- </security-constraint>
-
- <security-constraint>
- <web-resource-collection>
- <web-resource-name>SSL</web-resource-name>
- <url-pattern>/dump/auth/ssl/*</url-pattern>
- </web-resource-collection>
- <user-data-constraint>
- <transport-guarantee>CONFIDENTIAL</transport-guarantee>
- </user-data-constraint>
- </security-constraint>
-
- <login-config>
- <auth-method>BASIC</auth-method>
- <realm-name>Test Realm</realm-name>
- </login-config>
-
-<!--
- <login-config>
- <auth-method>DIGEST</auth-method>
- <realm-name>Test Realm</realm-name>
- </login-config>
--->
-
-<!--
- <login-config>
- <auth-method>FORM</auth-method>
- <realm-name>Test Realm</realm-name>
- <form-login-config>
- <form-login-page>/logon.html?param=test</form-login-page>
- <form-error-page>/logonError.html?param=test</form-error-page>
- </form-login-config>
- </login-config>
--->
-
-
-
-
-</web-app>
-
-

Added:
trunk/main/planet/web/test/src/test/net/dpml/web/test/KeystoreIntegrityTestCase.java
===================================================================
---
trunk/main/planet/web/test/src/test/net/dpml/web/test/KeystoreIntegrityTestCase.java
2006-02-04 18:10:18 UTC (rev 1020)
+++
trunk/main/planet/web/test/src/test/net/dpml/web/test/KeystoreIntegrityTestCase.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,59 @@
+/*
+ * Copyright 2004 Stephen J. McConnell.
+ * Copyright 1999-2004 The 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 net.dpml.web.test;
+
+import java.io.File;
+import java.net.URI;
+import java.net.URL;
+import java.security.KeyStore;
+
+import junit.framework.TestCase;
+
+/**
+ * Test integrity of the deployed keystore.
+ *
+ * @author <a href="mailto:dev-dpml AT lists.ibiblio.org";>The Digital Product
Meta Library</a>
+ * @version $Id: AbstractDescriptorTestCase.java 1556 2005-01-22 12:43:42Z
niclas $
+ */
+public class KeystoreIntegrityTestCase extends TestCase
+{
+ private static final String TEST_DIR_KEY = "project.test.dir";
+
+ /**
+ * Test keystore loading (also validates that the installed keystore is
not corrupted).
+ */
+ public void testKeystore() throws Exception
+ {
+ KeyStore keyStore = KeyStore.getInstance( "JKS" );
+ String password = "password";
+ URL url = new URL( "local:keystore:dpml/planet/web/demo" );
+ keyStore.load( url.openStream(), password.toCharArray() );
+ }
+
+ static
+ {
+ System.setProperty(
+ "java.util.logging.config.class",
+ System.getProperty(
+ "java.util.logging.config.class",
+ "net.dpml.transit.util.ConfigurationHandler" ) );
+ System.setProperty( "java.protocol.handler.pkgs", "net.dpml.transit"
);
+ }
+}

Modified:
trunk/main/planet/web/test/src/test/net/dpml/web/test/ServerTestCase.java
===================================================================
--- trunk/main/planet/web/test/src/test/net/dpml/web/test/ServerTestCase.java
2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/test/src/test/net/dpml/web/test/ServerTestCase.java
2006-02-04 18:27:57 UTC (rev 1021)
@@ -50,29 +50,6 @@
* Test the deployment of the Jetty server.
* @exception Exception if an error occurs
*/
- public void testPassword() throws Exception
- {
- Password password = new Password(
"OBF:1vny1zlo1x8e1vnw1vn61x8g1zlu1vn4" );
- System.out.println( "# PASSWORD: :" + password.toString() );
- }
-
- /**
- * Test keystroe loading
- */
- public void testKeystore() throws Exception
- {
- KeyStore keyStore = KeyStore.getInstance( "JKS" );
- String password = "password";
- //URL url = new URL( "local:keystore:dpml/planet/web/demo" );
- //keyStore.load( url.openStream(), password.toCharArray() );
- Resource resource = Resource.newResource(
"local:keystore:dpml/planet/web/demo" );
- keyStore.load( resource.getInputStream(), password.toCharArray() );
- }
-
- /**
- * Test the deployment of the Jetty server.
- * @exception Exception if an error occurs
- */
public void testServerDeployment() throws Exception
{
File test = new File( System.getProperty( TEST_DIR_KEY ) );
@@ -112,12 +89,12 @@

static
{
- System.setProperty( "java.protocol.handler.pkgs", "net.dpml.transit"
);
//System.setProperty( "dpml.logging.config",
"local:properties:dpml/transit/debug" );
System.setProperty(
"java.util.logging.config.class",
System.getProperty(
"java.util.logging.config.class",
"net.dpml.transit.util.ConfigurationHandler" ) );
+ System.setProperty( "java.protocol.handler.pkgs", "net.dpml.transit"
);
}
}


Property changes on: trunk/main/planet/web/war
___________________________________________________________________
Name: svn:ignore
+ target


Added: trunk/main/planet/web/war/build.xml
===================================================================
--- trunk/main/planet/web/war/build.xml 2006-02-04 18:10:18 UTC (rev 1020)
+++ trunk/main/planet/web/war/build.xml 2006-02-04 18:27:57 UTC (rev 1021)
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+<!--
+ * Copyright 2004-2005 Stephen J. McConnell.
+ * Copyright 2004 Niclas Hedman.
+ *
+ * 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.dpml.net/central/about/legal/
+ *
+ * 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.
+-->
+
+<project default="install"
+ xmlns:transit="antlib:net.dpml.transit" xmlns:depot="dpml:depot" >
+
+ <transit:import uri="local:template:dpml/tools/standard"/>
+
+ <target name="package" depends="standard.package">
+ <property name="war.dir" value="${basedir}/target/deliverables/wars"/>
+ <depot:property feature="filename" name="project.filename" type="war"/>
+ <property name="war.path" value="${war.dir}/${project.filename}"/>
+ <mkdir dir="${war.dir}"/>
+ <war destfile="${war.path}" webxml="target/web.xml">
+ <fileset dir="target/web"/>
+ <classes dir="target/classes/main"/>
+ </war>
+ </target>
+
+</project>

Copied: trunk/main/planet/web/war/etc/web (from rev 1003,
trunk/main/planet/web/test/etc/web)

Copied: trunk/main/planet/web/war/etc/web.xml (from rev 1003,
trunk/main/planet/web/test/etc/web.xml)

Copied: trunk/main/planet/web/war/src/main/org (from rev 1003,
trunk/main/planet/web/test/src/main/org)

Copied: trunk/main/planet/web/war/src/main/org/acme (from rev 1020,
trunk/main/planet/web/test/src/main/org/acme)




  • r1021 - in trunk/main: metro/model/src/main/net/dpml/metro/data metro/runtime/src/main/net/dpml/metro/runtime metro/tools/src/main/net/dpml/metro/tools planet/web planet/web/server planet/web/server/etc/prefs/xmls planet/web/server/src/main/net/dpml/web/server planet/web/test/etc planet/web/test/etc/prefs planet/web/test/etc/prefs/xmls planet/web/test/src/main planet/web/test/src/test/net/dpml/web/test planet/web/war planet/web/war/etc planet/web/war/src planet/web/war/src/main planet/web/war/src/main/org, mcconnell at BerliOS, 02/04/2006

Archive powered by MHonArc 2.6.24.

Top of Page