bloritsch 01/04/04 08:29:50
Modified: proposal/4.0 changes.txt
proposal/4.0/src/java/org/apache/avalon/aut/io FileUtil.java
proposal/4.0/src/java/org/apache/avalon/aut/security
AbstractPolicy.java
proposal/4.0/src/java/org/apache/avalon/camelot
AbstractContainer.java AbstractDeployer.java
AvalonState.java CamelotUtil.java Container.java
ContainerException.java DefaultFactory.java
DefaultLoader.java DefaultLocator.java
DefaultRegistry.java Deployer.java
DeployerUtil.java DeploymentException.java
Entry.java Factory.java FactoryException.java
Loader.java Locator.java MetaInfo.java
Registry.java RegistryException.java State.java
proposal/4.0/src/java/org/apache/avalon/datasource
DataSourceComponent.java J2eeDataSource.java
JdbcConnection.java JdbcConnectionPool.java
JdbcDataSource.java
proposal/4.0/src/java/org/apache/avalon/pool Recyclable.java
proposal/4.0/src/java/org/apache/framework/configuration
AbstractConfiguration.java
DefaultConfiguration.java
Added: proposal/4.0/src/java/org/apache/avalon/aut BinaryHeap.java
Circuit.java CircularBuffer.java
CircularDependencyException.java
DependencyGraph.java Lock.java LockException.java
Primes.java PriorityQueue.java
PropertyException.java PropertyUtil.java
ProxyClassLoader.java ProxyGenerator.java
SynchronizedPriorityQueue.java
proposal/4.0/src/java/org/apache/avalon/aut/io
AndFileFilter.java InvertedFileFilter.java
OrFileFilter.java
Log:
Made a bit more solid with compilation, etc.
Revision Changes Path
1.5 +9 -1 jakarta-avalon/proposal/4.0/changes.txt
Index: changes.txt
===================================================================
RCS file: /home/cvs/jakarta-avalon/proposal/4.0/changes.txt,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- changes.txt 2001/04/03 23:40:27 1.4
+++ changes.txt 2001/04/04 15:29:46 1.5
@@ -49,4 +49,12 @@
-moved cli package to org.apache.avalon.cli
-moved all container interfaces back to camelot (will stabilize later)
-moved implementations of framework related classes to live with their interfaces
--moved thread related interfaces to live with their component until further
stabilisation
\ No newline at end of file
+-moved thread related interfaces to live with their component until further
stabilisation
+
+BL:
+-Added Utility classes as DataSources (stable) needs Lock/LockException
+-Added CLI classes as Cocoon uses them for command line mode
+-Made sure everything is compilable
+-Updated DataSources code so that it is the stable version
+-Moved all Camelot code to Camelot as it is quite messy to have packages
+ not match the directory heirarchy and Camelot is under construction
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/BinaryHeap.java
Index: BinaryHeap.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.NoSuchElementException;
/**
* Iterface for priority queues.
* This interface does not dictate whether it is min or max heap.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Ram Chidambaram</a>
*/
public final class BinaryHeap
implements PriorityQueue
{
protected final static int DEFAULT_CAPACITY = 13;
protected int m_size;
protected Comparable[] m_elements;
protected boolean m_isMinHeap;
public BinaryHeap()
{
this( DEFAULT_CAPACITY, true );
}
public BinaryHeap( final int capacity )
{
this( capacity, true );
}
public BinaryHeap( final boolean isMinHeap )
{
this( DEFAULT_CAPACITY, isMinHeap );
}
public BinaryHeap( final int capacity, final boolean isMinHeap )
{
m_isMinHeap = isMinHeap;
//+1 as 0 is noop
m_elements = new Comparable[ capacity + 1 ];
}
/**
* Clear all elements from queue.
*/
public void clear()
{
m_size = 0;
}
/**
* Test if queue is empty.
*
* @return true if queue is empty else false.
*/
public boolean isEmpty()
{
return ( 0 == m_size );
}
/**
* Test if queue is full.
*
* @return true if queue is full else false.
*/
public boolean isFull()
{
//+1 as element 0 is noop
return ( m_elements.length == m_size+1 );
}
/**
* Insert an element into queue.
*
* @param element the element to be inserted
*/
public void insert( final Comparable element )
{
if( isFull() ) grow();
//percolate element to it's place in tree
if( m_isMinHeap ) percolateUpMinHeap( element );
else percolateUpMaxHeap( element );
}
/**
* Return element on top of heap but don't remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
public Comparable peek() throws NoSuchElementException
{
if( isEmpty() ) throw new NoSuchElementException();
else return m_elements[ 1 ];
}
/**
* Return element on top of heap and remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
public Comparable pop() throws NoSuchElementException
{
final Comparable result = peek();
m_elements[ 1 ] = m_elements[ m_size-- ];
//set the unused element to 'null' so that the garbage collector
//can free the object if not used anywhere else.(remove reference)
m_elements[ m_size + 1 ] = null;
if( m_size != 0 )
{
//percolate top element to it's place in tree
if( m_isMinHeap ) percolateDownMinHeap( 1 );
else percolateDownMaxHeap( 1 );
}
return result;
}
/**
* Percolate element down heap from top.
* Assume it is a maximum heap.
*
* @param element the element
*/
protected void percolateDownMinHeap( final int index )
{
final Comparable element = m_elements[ index ];
int hole = index;
while( (hole * 2) <= m_size )
{
int child = hole * 2;
//if we have a right child and that child can not be percolated
//up then move onto other child
if( child != m_size &&
m_elements[ child + 1 ].compareTo( m_elements[ child ] ) < 0 )
{
child++;
}
//if we found resting place of bubble then terminate search
if( m_elements[ child ].compareTo( element ) >= 0 )
{
break;
}
m_elements[ hole ] = m_elements[ child ];
hole = child;
}
m_elements[ hole ] = element;
}
/**
* Percolate element down heap from top.
* Assume it is a maximum heap.
*
* @param element the element
*/
protected void percolateDownMaxHeap( final int index )
{
final Comparable element = m_elements[ index ];
int hole = index;
while( (hole * 2) <= m_size )
{
int child = hole * 2;
//if we have a right child and that child can not be percolated
//up then move onto other child
if( child != m_size &&
m_elements[ child + 1 ].compareTo( m_elements[ child ] ) > 0 )
{
child++;
}
//if we found resting place of bubble then terminate search
if( m_elements[ child ].compareTo( element ) <= 0 )
{
break;
}
m_elements[ hole ] = m_elements[ child ];
hole = child;
}
m_elements[ hole ] = element;
}
/**
* Percolate element up heap from bottom.
* Assume it is a maximum heap.
*
* @param element the element
*/
protected void percolateUpMinHeap( final Comparable element )
{
int hole = ++m_size;
m_elements[ hole ] = element;
while( hole > 1 &&
element.compareTo( m_elements[ hole / 2 ] ) < 0 )
{
//save element that is being pushed down
//as the element "bubble" is percolated up
final int next = hole / 2;
m_elements[ hole ] = m_elements[ next ];
hole = next;
}
m_elements[ hole ] = element;
}
/**
* Percolate element up heap from bottom.
* Assume it is a maximum heap.
*
* @param element the element
*/
protected void percolateUpMaxHeap( final Comparable element )
{
int hole = ++m_size;
while( hole > 1 &&
element.compareTo( m_elements[ hole / 2 ] ) > 0 )
{
//save element that is being pushed down
//as the element "bubble" is percolated up
final int next = hole / 2;
m_elements[ hole ] = m_elements[ next ];
hole = next;
}
m_elements[ hole ] = element;
}
protected void grow()
{
final Comparable[] elements =
new Comparable[ m_elements.length * 2 ];
System.arraycopy( m_elements, 0, elements, 0, m_elements.length );
m_elements = elements;
}
public String toString()
{
final StringBuffer sb = new StringBuffer();
sb.append( "[ " );
for( int i = 1; i < m_size + 1; i++ )
{
if( i != 1 ) sb.append( ", " );
sb.append( m_elements[ i ] );
}
sb.append( " ]" );
return sb.toString();
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/Circuit.java
Index: Circuit.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.Vector;
/**
*
* @version 0.0.20, 04/07/1998
* @author Federico Barbieri <[EMAIL PROTECTED]>
* @author Stefano Mazzocchi <[EMAIL PROTECTED]>
*/
public class Circuit
{
protected Hashtable m_map;
public Circuit()
{
m_map = new Hashtable();
}
public void addNode( final String name )
{
if( null == m_map.get( name ) )
{
m_map.put( name, new Node( name ) );
}
}
public void removeNode( final String name )
{
String tmp = null;
Enumeration e = m_map.keys();
while( e.hasMoreElements() )
{
tmp = (String)e.nextElement();
if( !tmp.equals( name ) )
{
try { unlink( tmp, name ); }
catch( final CircuitException ce) {}
try { unlink( name, tmp ); }
catch( final CircuitException ce ) {}
}
}
m_map.remove( name );
}
public void link( final String parent, final String child )
throws CircuitException
{
Node tempNode = null;
Node pnode = (Node)m_map.get( parent );
Node cnode = (Node)m_map.get( child );
if( null == pnode )
{
throw new CircuitException( "Unknown node " + parent );
}
else if( null == cnode )
{
throw new CircuitException( "Unknown node " + child );
}
else if( pnode.isChildOf( cnode ) )
{
throw new CircuitException( "Loop! Node " + parent +
" is already child of node " + child );
}
else
{
final Enumeration e = m_map.elements();
while( e.hasMoreElements() )
{
tempNode = (Node)e.nextElement();
if( tempNode.isChildOf( cnode ) )
{
tempNode.m_parents.addAll( pnode.m_parents );
}
}
}
}
public void unlink( final String parent, final String child )
throws CircuitException
{
Node cnode = (Node)m_map.get( child );
Node pnode = (Node)m_map.get( parent );
if( cnode.m_parents.contains( pnode ) )
{
Node tempNode = null;
Enumeration e = m_map.elements();
while( e.hasMoreElements() )
{
tempNode = (Node)e.nextElement();
if( tempNode.m_parents.contains( cnode ) )
{
tempNode.m_parents.removeAll( pnode.m_parents );
}
}
}
else
{
throw new CircuitException( "Node " + parent + " is not parent of node "
+ child );
}
}
public Vector getAncestors()
{
Vector ancestors = new Vector();
String name = null;
Node tempNode = null;
Enumeration e = m_map.keys();
while( e.hasMoreElements() )
{
name = (String)e.nextElement();
tempNode = (Node)m_map.get( name );
if( 1 == tempNode.m_parents.size() )
{
ancestors.addElement( name );
}
}
return ancestors;
}
public String getAncestor()
{
String name = null;
Node tempNode = null;
Enumeration e = m_map.keys();
while( e.hasMoreElements() )
{
name = (String)e.nextElement();
tempNode = (Node)m_map.get( name );
if( 1 == tempNode.m_parents.size() )
{
return name;
}
}
return null;
}
public boolean isEmpty()
{
return m_map.isEmpty();
}
protected final class Node
{
protected Vector m_parents;
protected String m_name;
protected Node( final String name )
{
m_parents = new Vector( 5 );
m_parents.addElement( this );
m_name = name;
}
protected boolean isChildOf( final Node parent )
{
return m_parents.contains( parent );
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
Enumeration e = m_parents.elements();
buffer.append( m_name + "[" );
while( e.hasMoreElements() )
{
buffer.append(((Node) e.nextElement()).m_name + " ");
}
buffer.append("]");
return buffer.toString();
}
}
public final class CircuitException
extends RuntimeException
{
public CircuitException()
{
}
public CircuitException( final String message )
{
super( message );
}
}
public String toString()
{
StringBuffer buffer = new StringBuffer();
String name = null;
Node tempNode = null;
Enumeration e = m_map.keys();
while( e.hasMoreElements() )
{
name = (String)e.nextElement();
tempNode = (Node)m_map.get( name );
buffer.append( name + "(" + ( tempNode.m_parents.size() - 1 ) + ") " );
}
return buffer.toString();
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/CircularBuffer.java
Index: CircularBuffer.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
/**
*
* @author Federico Barbieri <[EMAIL PROTECTED]>
*/
public class CircularBuffer
{
protected Object[] m_buffer;
protected int m_bufferSize;
protected int m_contentSize;
protected int m_head;
protected int m_tail;
public CircularBuffer( int size )
{
m_buffer = new Object[size];
m_bufferSize = size;
m_contentSize = 0;
m_head = 0;
m_tail = 0;
}
public CircularBuffer()
{
this( 32 );
}
public boolean isEmpty()
{
return (m_contentSize == 0);
}
public int getContentSize()
{
return m_contentSize;
}
public int getBufferSize()
{
return m_bufferSize;
}
public void append( final Object o )
{
if( m_contentSize >= m_bufferSize )
{
int j = 0;
int i = m_tail;
Object[] tmp = new Object[ m_bufferSize * 2 ];
while( m_contentSize > 0 )
{
i++;
i %= m_bufferSize;
j++;
m_contentSize--;
tmp[ j ] = m_buffer[ i ];
}
m_buffer = tmp;
m_tail = 0;
m_head = j;
m_contentSize = j;
m_bufferSize *= 2;
}
m_buffer[ m_head ] = o;
m_head++;
m_head %= m_bufferSize;
m_contentSize++;
}
public Object get()
{
if( m_contentSize <= 0 )
{
return null;
}
Object o = m_buffer[ m_tail ];
m_tail++;
m_tail %= m_bufferSize;
m_contentSize--;
return o;
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/CircularDependencyException.java
Index: CircularDependencyException.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.List;
import org.apache.framework.CascadingException;
/**
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class CircularDependencyException
extends CascadingException
{
protected List m_stack;
public CircularDependencyException( final String dependee,
final String dependent,
final List stack )
{
super( dependee + " depends upon " + dependent + " which depends upong " +
dependee );
m_stack = stack;
}
public List getStack()
{
return m_stack;
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/DependencyGraph.java
Index: DependencyGraph.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
/**
* DirectedGraph is a acyclic Directed graph implementation.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class DependencyGraph
{
protected final HashMap m_map = new HashMap();
protected boolean m_allowCircularity = true;
public void setAllowCircularity( final boolean allowCircularity )
{
m_allowCircularity = allowCircularity;
}
public void add( final String name, final String[] dependencies )
{
m_map.put( name, new GraphNode( name, dependencies ) );
}
public void remove( final String name )
{
m_map.remove( name );
}
public Dependency[] getDependencyList( final String name )
throws CircularDependencyException
{
final ArrayList list = new ArrayList();
final Dependency dependency = new Dependency( name , null );
list.add( dependency );
if( null != m_map.get( name ) )
{
final ArrayList stack = new ArrayList();
stack.add( name );
buildDependencyList( name, list, new ArrayList(), stack );
}
return (Dependency[])list.toArray( new Dependency[ 0 ] );
}
protected void buildDependencyList( final String name,
final ArrayList list,
final ArrayList done,
final ArrayList stack )
throws CircularDependencyException
{
if( done.contains( name ) ) return;
done.add( name );
final GraphNode node = (GraphNode)m_map.get( name );
if( null == node ) return;
final String[] dependencies = node.getDependencies();
for( int i = 0; i < dependencies.length; i++ )
{
if( stack.contains( dependencies[ i ] ) )
{
if( m_allowCircularity ) continue;
else
{
throw new CircularDependencyException( dependencies[ i ], name,
stack );
}
}
if( done.contains( dependencies[ i ] ) ) continue;
final Dependency dependency = new Dependency( dependencies[ i ], name );
list.add( dependency );
stack.add( dependencies[ i ] );
buildDependencyList( dependencies[ i ], list, done, stack );
stack.remove( stack.size() - 1 );
}
}
public final static class Dependency
{
protected final String m_name;
protected final String m_requiredBy;
protected Dependency( final String name, final String requiredBy )
{
m_name = name;
m_requiredBy = requiredBy;
}
public String getName()
{
return m_name;
}
public String getRequiredBy()
{
return m_requiredBy;
}
public String toString()
{
return getName();
}
}
protected final static class GraphNode
{
protected final String m_name;
protected final String[] m_dependencies;
protected GraphNode( final String name, final String[] dependencies )
{
m_name = name;
m_dependencies = dependencies;
}
public String getName()
{
return m_name;
}
public String[] getDependencies()
{
return m_dependencies;
}
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/Lock.java
Index: Lock.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.Hashtable;
/**
* @author Federico Barbieri <[EMAIL PROTECTED]>
*/
public class Lock
{
private Hashtable locks = new Hashtable();
public boolean isLocked( final Object key )
{
return (locks.get(key) != null);
}
public boolean canI( final Object key )
{
Object o = locks.get( key );
if( null == o || o == this.getCallerId() )
{
return true;
}
return false;
}
public boolean lock( final Object key )
{
Object theLock;
synchronized( this )
{
theLock = locks.get( key );
if( null == theLock )
{
locks.put( key, getCallerId() );
return true;
}
else if( getCallerId() == theLock )
{
return true;
}
else
{
return false;
}
}
}
public boolean unlock( final Object key )
{
Object theLock;
synchronized( this )
{
theLock = locks.get( key );
if( null == theLock )
{
return true;
}
else if( getCallerId() == theLock )
{
locks.remove( key );
return true;
}
else
{
return false;
}
}
}
private Object getCallerId()
{
return Thread.currentThread();
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/LockException.java
Index: LockException.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
public class LockException
extends RuntimeException
{
public LockException( final String message )
{
super( message );
}
public LockException()
{
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/Primes.java
Index: Primes.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
/**
*
* @author Federico Barbieri <[EMAIL PROTECTED]>
* @author Stefano Mazzocchi <[EMAIL PROTECTED]>
*/
public class Primes
{
/**
* Last prime found.
*
*/
protected static long c_lastPrime = 1;
/**
* Return next prime.
*
*/
public static long nextPrime()
{
long l = c_lastPrime + 1;
long v = 2;
while( true )
{
l++;
while( v < l )
{
v++;
if( (l % v) == 0 )
{
v = 0;
break;
}
} // while v < l
if( v == l )
{
c_lastPrime = l;
return l;
} // if v is l
} // while true (break is used to escape)
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/PriorityQueue.java
Index: PriorityQueue.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.NoSuchElementException;
/**
* Iterface for priority queues.
* This interface does not dictate whether it is min or max heap.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public interface PriorityQueue
{
/**
* Clear all elements from queue.
*/
void clear();
/**
* Test if queue is empty.
*
* @return true if queue is empty else false.
*/
boolean isEmpty();
/**
* Insert an element into queue.
*
* @param element the element to be inserted
*/
void insert( Comparable element );
/**
* Return element on top of heap but don't remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
Comparable peek() throws NoSuchElementException;
/**
* Return element on top of heap and remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
Comparable pop() throws NoSuchElementException;
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/PropertyException.java
Index: PropertyException.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import org.apache.framework.CascadingException;
/**
* Thrown when a property can not be resolved properly.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class PropertyException
extends CascadingException
{
/**
* Construct a new <code>PropertyException</code> instance.
*
* @param message The detail message for this exception.
*/
public PropertyException( final String message )
{
this( message, null );
}
/**
* Construct a new <code>PropertyException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
public PropertyException( final String message, final Throwable throwable )
{
super( message, throwable );
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/PropertyUtil.java
Index: PropertyUtil.java
===================================================================
package org.apache.avalon.aut;
import org.apache.framework.context.Context;
import org.apache.framework.context.Resolvable;
/**
* This provides utility methods for properties.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public final class PropertyUtil
{
private PropertyUtil()
{
}
/**
* Resolve property.
* This evaluates all property substitutions based on current context.
*
* @param property the property to resolve
* @param context the context in which to resolve property
* @param ignoreUndefined if false will throw an PropertyException if property
is not found
* @return the reolved property
* @exception PropertyException if an error occurs
*/
public static Object resolveProperty( final String property,
final Context context,
final boolean ignoreUndefined )
throws PropertyException
{
int start = property.indexOf( "${" );
if( -1 == start ) return property;
int end = property.indexOf( '}', start );
if( -1 == end ) return property;
final int length = property.length();
if( 0 == start && end == (length - 1) )
{
return resolveValue( property.substring( start + 2, end ),
context,
ignoreUndefined );
}
final StringBuffer sb = new StringBuffer();
int lastPlace = 0;
while( true )
{
final Object value =
resolveValue( property.substring( start + 2, end ),
context,
ignoreUndefined );
sb.append( property.substring( lastPlace, start ) );
sb.append( value );
lastPlace = end + 1;
start = property.indexOf( "${", end );
if( -1 == start ) break;
end = property.indexOf( '}', start );
if( -1 == end ) break;
}
sb.append( property.substring( lastPlace, length ) );
return sb.toString();
}
protected static Object resolveValue( final String key,
final Context context,
final boolean ignoreUndefined )
throws PropertyException
{
Object value = context.get( key );
while( null != value && value instanceof Resolvable )
{
value = ((Resolvable)value).resolve( context );
}
if( null == value )
{
if( ignoreUndefined )
{
return "";
}
else
{
throw new PropertyException( "Unable to find " + key + " to expand
during " +
"property resolution." );
}
}
return value;
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/ProxyClassLoader.java
Index: ProxyClassLoader.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
/**
* Utility class to help load dynamically generated classes.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class ProxyClassLoader
extends ClassLoader
{
public ProxyClassLoader( final ClassLoader parent )
{
super( parent );
}
public Class loadClass( final String name,
final boolean resolve,
final byte[] classData )
throws ClassNotFoundException
{
final Class result =
defineClass( name, classData, 0, classData.length );
if( resolve )
{
resolveClass( result );
}
return result;
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/ProxyGenerator.java
Index: ProxyGenerator.java
===================================================================
/**
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import gnu.bytecode.Access;
import gnu.bytecode.ClassType;
import gnu.bytecode.ClassTypeWriter;
import gnu.bytecode.CodeAttr;
import gnu.bytecode.Field;
import gnu.bytecode.Scope;
import gnu.bytecode.Type;
import gnu.bytecode.Variable;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.log.LogKit;
import org.apache.log.Logger;
/**
* A class to generate proxies for objects.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public final class ProxyGenerator
{
protected final static boolean DEBUG = false;
protected final static Logger LOGGER =
( DEBUG ) ? LogKit.getLoggerFor( "ProxyGenerator" ) : null;
protected final static Object MONITOR = new Object();
protected final static ClassType BASE_CLASS =
(ClassType)Type.getType( "java.lang.Object" );
protected static long c_currentId;
/**
* Private constructor to block subclassing.
*
*/
private ProxyGenerator()
{
}
/**
* Way to generate unique id for each class.
*
* @return a unique id
*/
protected static long getNextId()
{
synchronized( MONITOR )
{
return c_currentId++;
}
}
/**
* Generate a proxy for object with certain interfaces.
*
* @param object the object
* @param interfaces[] the interfaces
* @return the proxy object
* @exception IllegalArgumentException if an error occurs
*/
public static Object generateProxy( final Object object,
final Class[] interfaces )
throws IllegalArgumentException
{
if( DEBUG )
{
LOGGER.debug( "Generating proxy for " + object.getClass().getName() );
LOGGER.debug( "Interfaces generating:" );
for( int i = 0; i < interfaces.length; i++ )
{
LOGGER.debug( interfaces[ i ].getName() );
}
}
for( int i = 0; i < interfaces.length; i++ )
{
if( !interfaces[ i ].isInterface() )
{
throw new IllegalArgumentException( "Class " + interfaces[ i
].getName() +
" is not an interface" );
}
else if( !interfaces[ i ].isInstance( object ) )
{
throw new IllegalArgumentException( "Object does not implement
interface " +
interfaces[ i ].getName() );
}
}
final HashMap methodSet = determineMethods( interfaces );
final String classname = "org.apache.avalon.tmp.Proxy" + getNextId();
if( DEBUG ) { LOGGER.debug( "Generating proxy named " + classname ); }
final ClassType proxy = createProxyType( classname );
//generate all interface declarations
generateInterfaces( proxy, interfaces );
final ClassType target =
(ClassType)Type.make( object.getClass() );
target.doFixups();
//generate variables/constructor
generateBase( proxy, target );
//generate methods
final Iterator methods = methodSet.values().iterator();
while( methods.hasNext() )
{
generateMethod( proxy, target, (Method)methods.next() );
}
if( DEBUG )
{
//help while debugging
//ClassTypeWriter.print( target, System.out, 0 );
//try { proxy.writeToFile( "/tmp/" + classname.replace('.','/') +
".class" ); }
//catch( final Throwable throwable ) { throwable.printStackTrace(); }
}
proxy.doFixups();
Class proxyClass = null;
try
{
final byte[] classData = proxy.writeToArray();
//extremely inneficient - must fix in future
final ProxyClassLoader classLoader =
new ProxyClassLoader( object.getClass().getClassLoader() );
proxyClass = classLoader.loadClass( classname, true, classData );
final Constructor ctor =
proxyClass.getConstructor( new Class[] { object.getClass() } );
return ctor.newInstance( new Object[] { object } );
}
catch( final Throwable throwable ) { throwable.printStackTrace(); }
return null;
}
/**
* Create Proxy class.
*
* @param classname name of class
* @return the proxy class
*/
protected static ClassType createProxyType( final String classname )
{
final ClassType proxy = new ClassType( classname );
proxy.setModifiers( Access.PUBLIC | /*ACC_SUPER*/ 0x0020 | Access.FINAL );
proxy.setSuper( BASE_CLASS );
return proxy;
}
/**
* generate the list of Interfaces class implements.
*
* @param proxy the proxy class
* @param interfaces[] the interfaces to add
*/
protected static void generateInterfaces( final ClassType proxy,
final Class[] interfaces )
{
final ClassType[] interfaceTypes = new ClassType[ interfaces.length ];
for( int i = 0; i < interfaceTypes.length; i++ )
{
interfaceTypes[ i ] = (ClassType)Type.getType( interfaces[ i ].getName()
);
}
proxy.setInterfaces( interfaceTypes );
}
/**
* Generate code for wrapper method.
*
* @param proxy the class to add to
* @param target the class wrapping
* @param method the method to wrap
*/
protected static void generateMethod( final ClassType proxy,
final ClassType target,
final Method method )
{
final Class[] parameters = method.getParameterTypes();
final Type[] parameterTypes = new Type[ parameters.length ];
for( int i = 0; i < parameterTypes.length; i++ )
{
parameterTypes[ i ] = Type.getType( parameters[ i ].getName() );
}
final Type returnType =
Type.getType( method.getReturnType().getName() );
final gnu.bytecode.Method newMethod =
proxy.addMethod( method.getName(),
Access.PUBLIC,
parameterTypes,
returnType );
newMethod.init_param_slots();
newMethod.pushScope();
final CodeAttr code = newMethod.getCode();
//put m_core on stack;
final Field field = proxy.getField( "m_core" );
code.emitPushThis();
code.emitGetField( field );
for( int i = 0; i < parameterTypes.length; i++ )
{
code.emitLoad( code.getArg( 1 + i ) );
}
//call target method
final gnu.bytecode.Method targetMethod =
target.getMethod( method.getName(), parameterTypes );
code.emitInvokeVirtual( targetMethod );
//return
code.emitReturn();
newMethod.popScope();
}
/**
* Generate constructor code and field data.
*
* @param proxy the representation of class so far
* @param target the type that is wrapped
*/
protected static void generateBase( final ClassType proxy,
final Type target )
{
final Field field = proxy.addField( "m_core", target );
field.flags |= Access.PRIVATE;
final gnu.bytecode.Method constructor =
proxy.addMethod( "<init>",
Access.PUBLIC,
new Type[] { target },
Type.void_type );
final gnu.bytecode.Method superConstructor
= proxy.getSuperclass().addMethod( "<init>",
Access.PUBLIC,
null,
Type.void_type );
constructor.init_param_slots();
constructor.pushScope();
final CodeAttr code = constructor.getCode();
//super();
code.emitPushThis();
code.emitInvokeSpecial( superConstructor );
//m_core = param1;
code.emitPushThis();
code.emitLoad( code.getArg( 1 ) );
code.emitPutField( field );
//return
code.emitReturn();
constructor.popScope();
}
/**
* Determine the methods that must be implemented to
* implement interface, eliminating duplicates.
*
* @param interfaces[] the interfaces to extract methods from
* @return methods
*/
protected static HashMap determineMethods( final Class[] interfaces )
{
final HashMap methodSet = new HashMap();
final StringBuffer sb = new StringBuffer();
for( int i = 0; i < interfaces.length; i++ )
{
if( DEBUG )
{
LOGGER.debug( "Scanning interface " + interfaces[ i ].getName() +
" for methods" );
}
final Method[] methods = interfaces[ i ].getMethods();
//for each method generate a pseudo signature
//Add the method to methodSet under that signature.
//This is to ensure that only one version of a method is
//entered into set even if multiple interfaces declare it
for( int j = 0; j < methods.length; j++ )
{
sb.append( methods[ j ].getName() );
sb.append( '(' );
final Class[] parameters = methods[ j ].getParameterTypes();
for( int k = 0; k < parameters.length; k++ )
{
sb.append( parameters[ k ].getName() );
sb.append( ' ' );
}
sb.append( ";)" );
if( DEBUG )
{
LOGGER.debug( "Found method with pseudo-signature " + sb );
}
methodSet.put( sb.toString(), methods[ j ] );
sb.setLength( 0 );
}
}
return methodSet;
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/SynchronizedPriorityQueue.java
Index: SynchronizedPriorityQueue.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut;
import java.util.NoSuchElementException;
/**
* A thread safe version of the PriorityQueue.
* Provides synchronized wrapper methods for all the methods
* defined in the PriorityQueue interface.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Ram Chidambaram</a>
*/
public final class SynchronizedPriorityQueue
implements PriorityQueue
{
protected final PriorityQueue m_priorityQueue;
public SynchronizedPriorityQueue( final PriorityQueue priorityQueue )
{
m_priorityQueue = priorityQueue;
}
/**
* Clear all elements from queue.
*/
public synchronized void clear()
{
m_priorityQueue.clear();
}
/**
* Test if queue is empty.
*
* @return true if queue is empty else false.
*/
public synchronized boolean isEmpty()
{
return m_priorityQueue.isEmpty();
}
/**
* Insert an element into queue.
*
* @param element the element to be inserted
*/
public synchronized void insert( final Comparable element )
{
m_priorityQueue.insert( element );
}
/**
* Return element on top of heap but don't remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
public synchronized Comparable peek() throws NoSuchElementException
{
return m_priorityQueue.peek();
}
/**
* Return element on top of heap and remove it.
*
* @return the element at top of heap
* @exception NoSuchElementException if isEmpty() == true
*/
public synchronized Comparable pop() throws NoSuchElementException
{
return m_priorityQueue.pop();
}
public synchronized String toString()
{
return m_priorityQueue.toString();
}
}
1.2 +57 -57
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/io/FileUtil.java
Index: FileUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/io/FileUtil.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FileUtil.java 2001/04/03 23:35:23 1.1
+++ FileUtil.java 2001/04/04 15:29:47 1.2
@@ -9,7 +9,7 @@
import java.io.*;
import java.net.URL;
-import org.apache.aut.StringUtil;
+import org.apache.avalon.aut.StringUtil;
/**
* This class provides basic facilities for manipulating files.
@@ -36,7 +36,7 @@
{
final String filename = url.getFile().replace( '/', File.separatorChar
);
return new File( filename );
- }
+ }
}
/**
@@ -52,8 +52,8 @@
public static String removeExtention( final String filename )
{
final int index = filename.lastIndexOf( '.' );
-
- if( -1 == index )
+
+ if( -1 == index )
{
return filename;
}
@@ -76,7 +76,7 @@
{
final int index = filepath.lastIndexOf( File.separator );
- if( -1 == index )
+ if( -1 == index )
{
return filepath;
}
@@ -89,9 +89,9 @@
/**
* Copy file from source to destination.
*/
- public static void copyFileToDirectory( final String source,
- final String destinationDirectory )
- throws IOException
+ public static void copyFileToDirectory( final String source,
+ final String destinationDirectory )
+ throws IOException
{
copyFileToDirectory( new File( source ), new File( destinationDirectory ) );
}
@@ -99,9 +99,9 @@
/**
* Copy file from source to destination.
*/
- public static void copyFileToDirectory( final File source,
- final File destinationDirectory )
- throws IOException
+ public static void copyFileToDirectory( final File source,
+ final File destinationDirectory )
+ throws IOException
{
if( destinationDirectory.exists() && !destinationDirectory.isDirectory() )
{
@@ -114,8 +114,8 @@
/**
* Copy file from source to destination.
*/
- public static void copyFile( final File source, final File destination )
- throws IOException
+ public static void copyFile( final File source, final File destination )
+ throws IOException
{
//check source exists
if( !source.exists() )
@@ -139,39 +139,39 @@
if( source.length() != destination.length() )
{
- throw new IOException( "Failed to copy full contents from " + source +
+ throw new IOException( "Failed to copy full contents from " + source +
" to " + destination );
}
- }
+ }
- public static void copyURLToFile( final URL source, final File destination )
- throws IOException
+ public static void copyURLToFile( final URL source, final File destination )
+ throws IOException
{
//does destinations directory exist ?
if( !destination.getParentFile().exists() )
{
destination.mkdirs();
}
-
+
//make sure we can write to destination
if( destination.exists() && !destination.canWrite() )
{
throw new IOException( "Unable to open file " + destination + " for
writing." );
}
-
+
IOUtil.copy( source.openStream(), new FileOutputStream( destination ) );
- }
+ }
public static String normalize( String location )
{
location = StringUtil.replaceSubString( location, "/./", "/" );
-
+
final StringBuffer sb = new StringBuffer();
-
+
int trail = 0;
int end = location.indexOf( "/../" );
int start = 0;
-
+
while( end != -1 )
{
//TODO: fix when starts with /../
@@ -181,18 +181,18 @@
start = end + 4;
end = location.indexOf( "/../", start );
}
-
+
end = location.length();
sb.append( location.substring( start, end ) );
-
+
return sb.toString();
}
/** Will concatenate 2 paths, dealing with ..
* ( /a/b/c + d = /a/b/d, /a/b/c + ../d = /a/d )
- *
+ *
* Thieved from Tomcat sources...
- *
+ *
* @return null if error occurs
*/
public static String catPath( String lookupPath, String path )
@@ -200,36 +200,36 @@
// Cut off the last slash and everything beyond
int index = lookupPath.lastIndexOf( "/" );
lookupPath = lookupPath.substring( 0, index );
-
+
// Deal with .. by chopping dirs off the lookup path
- while( path.startsWith( "../" ) )
- {
+ while( path.startsWith( "../" ) )
+ {
if( lookupPath.length() > 0 )
{
index = lookupPath.lastIndexOf( "/" );
lookupPath = lookupPath.substring( 0, index );
- }
+ }
else
{
// More ..'s than dirs, return null
return null;
}
-
+
index = path.indexOf( "../" ) + 3;
path = path.substring( index );
}
-
+
return lookupPath + "/" + path;
}
- public static File resolveFile( final File baseFile, String filename )
+ public static File resolveFile( final File baseFile, String filename )
{
- if( '/' != File.separatorChar )
+ if( '/' != File.separatorChar )
{
filename = filename.replace( '/', File.separatorChar );
}
- if( '\\' != File.separatorChar )
+ if( '\\' != File.separatorChar )
{
filename = filename.replace( '\\', File.separatorChar );
}
@@ -239,7 +239,7 @@
{
File file = new File( filename );
- try { file = file.getCanonicalFile(); }
+ try { file = file.getCanonicalFile(); }
catch( final IOException ioe ) {}
return file;
@@ -248,10 +248,10 @@
final char[] chars = filename.toCharArray();
final StringBuffer sb = new StringBuffer();
- //remove duplicate file seperators in succession - except
+ //remove duplicate file seperators in succession - except
//on win32 as UNC filenames can be \\AComputer\AShare\myfile.txt
int start = 0;
- if( '\\' == File.separatorChar )
+ if( '\\' == File.separatorChar )
{
sb.append( filename.charAt( 0 ) );
start++;
@@ -259,12 +259,12 @@
for( int i = start; i < chars.length; i++ )
{
- final boolean doubleSeperator =
+ final boolean doubleSeperator =
File.separatorChar == chars[ i ] && File.separatorChar == chars[ i
- 1 ];
if( !doubleSeperator ) sb.append( chars[ i ] );
}
-
+
filename = sb.toString();
//must be relative
@@ -280,7 +280,7 @@
* Delete a file. If file is directory delete it and all sub-directories.
*/
public static void forceDelete( final String file )
- throws IOException
+ throws IOException
{
forceDelete( new File( file ) );
}
@@ -289,7 +289,7 @@
* Delete a file. If file is directory delete it and all sub-directories.
*/
public static void forceDelete( final File file )
- throws IOException
+ throws IOException
{
if( file.isDirectory() ) deleteDirectory( file );
else
@@ -305,7 +305,7 @@
* Recursively delete a directory.
*/
public static void deleteDirectory( final String directory )
- throws IOException
+ throws IOException
{
deleteDirectory( new File( directory ) );
}
@@ -314,7 +314,7 @@
* Recursively delete a directory.
*/
public static void deleteDirectory( final File directory )
- throws IOException
+ throws IOException
{
if( !directory.exists() ) return;
@@ -323,41 +323,41 @@
{
throw new IOException( "Directory " + directory + " unable to be
deleted." );
}
- }
+ }
/**
* Clean a directory without deleting it.
*/
public static void cleanDirectory( final String directory )
- throws IOException
+ throws IOException
{
cleanDirectory( new File( directory ) );
}
-
+
/**
* Clean a directory without deleting it.
*/
public static void cleanDirectory( final File directory )
- throws IOException
+ throws IOException
{
- if( !directory.exists() )
+ if( !directory.exists() )
{
throw new IllegalArgumentException( directory + " does not exist" );
}
-
+
if( !directory.isDirectory() )
{
throw new IllegalArgumentException( directory + " is not a directory" );
}
-
+
final File[] files = directory.listFiles();
-
- for( int i = 0; i < files.length; i++ )
+
+ for( int i = 0; i < files.length; i++ )
{
final File file = files[ i ];
-
+
if( file.isFile() ) file.delete();
- else if( file.isDirectory() )
+ else if( file.isDirectory() )
{
cleanDirectory( file );
if( false == file.delete() )
@@ -366,5 +366,5 @@
}
}
}
- }
+ }
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/io/AndFileFilter.java
Index: AndFileFilter.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut.io;
import java.io.File;
import java.io.FilenameFilter;
/**
* This takes two file fiters as input. Accepts a selection only if it is
* accpetable to both the input filters
*
* @author Harmeet Bedi <[EMAIL PROTECTED]>
*/
public class AndFileFilter
implements FilenameFilter
{
private final FilenameFilter m_filter1;
private final FilenameFilter m_filter2;
public AndFileFilter( FilenameFilter filter1, FilenameFilter filter2 )
{
m_filter1 = filter1;
m_filter2 = filter2;
}
public boolean accept( final File file, final String name )
{
return m_filter1.accept( file, name ) && m_filter2.accept( file, name );
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/io/InvertedFileFilter.java
Index: InvertedFileFilter.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut.io;
import java.io.File;
import java.io.FilenameFilter;
/**
* This takes a file filter as input and inverts the selection.
* This is used in retrieving files that are not accepted by a filter.
*
* @author Harmeet Bedi <[EMAIL PROTECTED]>
*/
public class InvertedFileFilter implements FilenameFilter
{
private final FilenameFilter m_originalFilter;
public InvertedFileFilter( final FilenameFilter originalFilter )
{
m_originalFilter = originalFilter;
}
public boolean accept( final File file, final String name )
{
return !m_originalFilter.accept( file, name );
}
}
1.1
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/io/OrFileFilter.java
Index: OrFileFilter.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.aut.io;
import java.io.File;
import java.io.FilenameFilter;
/**
* This takes two file fiters as input. Accepts a selection if it is
* accpetable to either input filter
*
* @author Harmeet Bedi <[EMAIL PROTECTED]>
*/
public class OrFileFilter
implements FilenameFilter
{
private final FilenameFilter m_filter1;
private final FilenameFilter m_filter2;
public OrFileFilter( final FilenameFilter filter1, final FilenameFilter filter2 )
{
m_filter1 = filter1;
m_filter2 = filter2;
}
public boolean accept( final File file, final String name )
{
return m_filter1.accept( file, name ) || m_filter2.accept( file, name );
}
}
1.2 +33 -33
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/security/AbstractPolicy.java
Index: AbstractPolicy.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/aut/security/AbstractPolicy.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractPolicy.java 2001/04/03 23:35:23 1.1
+++ AbstractPolicy.java 2001/04/04 15:29:47 1.2
@@ -1,9 +1,9 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.aut.security;
@@ -22,14 +22,14 @@
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.PropertyPermission;
-import org.apache.aut.io.FileUtil;
+import org.apache.avalon.aut.io.FileUtil;
import org.apache.framework.component.Component;
import org.apache.framework.logger.Loggable;
import org.apache.log.Logger;
/**
* Abstract policy extended in avalon.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public abstract class AbstractPolicy
@@ -39,7 +39,7 @@
protected final static boolean DEBUG = true;
protected final ArrayList m_entries = new ArrayList();
-
+
protected Logger m_logger;
/**
@@ -57,10 +57,10 @@
}
/**
- * Overide so we can have a per-application security policy with
+ * Overide so we can have a per-application security policy with
* no side-effects to other applications.
*
- * @param codeSource the codeSource to get permissions for
+ * @param codeSource the codeSource to get permissions for
* @return the PermissionCollection
*/
public PermissionCollection getPermissions( CodeSource codeSource )
@@ -68,14 +68,14 @@
codeSource = normalize( codeSource );
getLogger().debug( "getPermissions(" + codeSource.getLocation() + ");" );
-
+
final Permissions permissions = new Permissions();
final int size = m_entries.size();
-
+
for( int i = 0; i < size; i++ )
{
final PolicyEntry entry = (PolicyEntry)m_entries.get( i );
-
+
if( entry.m_codeSource.implies( codeSource ) )
{
if( DEBUG )
@@ -87,13 +87,13 @@
copyPermissions( permissions, entry.m_permissions );
}
}
-
+
if( DEBUG )
{
getLogger().debug( codeSource.getLocation() + " permissions = " +
permissions );
}
-
- return permissions;
+
+ return permissions;
}
/**
@@ -102,9 +102,9 @@
public void refresh()
{
}
-
+
/**
- * Normalizing CodeSource involves removing relative addressing
+ * Normalizing CodeSource involves removing relative addressing
* (like .. and .) for file urls.
*
* @param codeSource the codeSource to be normalized
@@ -113,14 +113,14 @@
protected CodeSource normalize( final CodeSource codeSource )
{
final URL initialLocation = codeSource.getLocation();
-
+
// This is a bit of a hack. I don't know why CodeSource should behave like
this
// Fear not, this only seems to be a problem for home grown classloaders.
// - Paul Hammant, Nov 2000
if( null == initialLocation ) return codeSource;
String location = null;
-
+
if( !initialLocation.getProtocol().equalsIgnoreCase( "file" ) )
{
location = initialLocation.getFile();
@@ -132,9 +132,9 @@
location = file.getAbsoluteFile().toString().replace(
File.separatorChar, '/' );
location = FileUtil.normalize( location );
}
-
+
URL finalLocation = null;
-
+
try
{
finalLocation = new URL( initialLocation.getProtocol(),
@@ -142,7 +142,7 @@
initialLocation.getPort(),
location );
}
- catch( final MalformedURLException mue )
+ catch( final MalformedURLException mue )
{
getLogger().warn( "Error building codeBase", mue );
}
@@ -158,10 +158,10 @@
destination.add( (Permission)enum.nextElement() );
}
}
-
+
/**
- * Create a permission set for a codeBase.
- * These are read-write permissions and can be written till until the
+ * Create a permission set for a codeBase.
+ * These are read-write permissions and can be written till until the
* time in which they are applied to code.
*
* @param location the location of codes to apply permission set to.
@@ -169,22 +169,22 @@
* @return the new permission set
* @exception MalformedURLException if location string is malformed
*/
- protected Permissions createPermissionSetFor( final String location,
+ protected Permissions createPermissionSetFor( final String location,
final Certificate[] signers )
throws MalformedURLException
{
final PolicyEntry entry = new PolicyEntry();
entry.m_codeSource = new CodeSource( new URL( location ), signers );
entry.m_codeSource = normalize( entry.m_codeSource );
-
- getLogger().debug( "createPermissionSetFor(" +
+
+ getLogger().debug( "createPermissionSetFor(" +
entry.m_codeSource.getLocation() + ");" );
-
+
entry.m_permissions = new Permissions();
-
+
m_entries.add( entry );
return entry.m_permissions;
- }
+ }
protected final Logger getLogger()
{
1.6 +20 -23
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AbstractContainer.java
Index: AbstractContainer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AbstractContainer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AbstractContainer.java 2001/04/03 23:17:59 1.5
+++ AbstractContainer.java 2001/04/04 15:29:47 1.6
@@ -1,22 +1,19 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.framework.component.Component;
-import org.apache.framework.container.Container;
-import org.apache.framework.container.ContainerException;
-import org.apache.framework.container.Entry;
import org.apache.framework.logger.AbstractLoggable;
/**
- * This contains it during execution and may provide certain
+ * This contains it during execution and may provide certain
* facilities (like a thread per EJB etc).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
@@ -72,7 +69,7 @@
throws ContainerException
{
final Entry entry = (Entry)m_entries.get( name );
-
+
if( null == entry )
{
throw new ContainerException( "Name " + name + " not contained" );
@@ -94,7 +91,7 @@
}
/**
- * This method is called before entry is added to give chance for
+ * This method is called before entry is added to give chance for
* sub-class to veto removal.
*
* @param name the name of entry
@@ -107,7 +104,7 @@
}
/**
- * This method is called after entry is added to give chance for
+ * This method is called after entry is added to give chance for
* sub-class to do some cleanup.
*
* @param name the name of entry
@@ -116,9 +113,9 @@
protected void postAdd( final String name, final Entry entry )
{
}
-
+
/**
- * This method is called before entry is removed to give chance for
+ * This method is called before entry is removed to give chance for
* sub-class to veto removal.
*
* @param name the name of entry
@@ -131,7 +128,7 @@
}
/**
- * This method is called after entry is removed to give chance for
+ * This method is called after entry is removed to give chance for
* sub-class to do some cleanup.
*
* @param name the name of entry
@@ -140,7 +137,7 @@
protected void postRemove( final String name, final Entry entry )
{
}
-
+
/**
* List all entries in container.
*
@@ -149,26 +146,26 @@
protected Iterator listEntries()
{
return m_entries.values().iterator();
- }
-
+ }
+
protected void checkEntry( final String name, final Entry entry )
throws ContainerException
{
if( null != m_entries.get( name ) )
{
- throw new ContainerException( "Can not add component to container
because " +
+ throw new ContainerException( "Can not add component to container
because " +
"entry already exists with name " + name
);
}
if( !isValidName( name ) )
{
- throw new ContainerException( "Can not add component to container
because " +
+ throw new ContainerException( "Can not add component to container
because " +
"invalid name " + name );
}
-
+
if( !isValidEntry( entry ) )
{
- throw new ContainerException( "Can not add component to container
because " +
+ throw new ContainerException( "Can not add component to container
because " +
"invalid entry for " + name );
}
1.6 +12 -14
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AbstractDeployer.java
Index: AbstractDeployer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AbstractDeployer.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- AbstractDeployer.java 2001/04/03 23:17:59 1.5
+++ AbstractDeployer.java 2001/04/04 15:29:47 1.6
@@ -1,9 +1,9 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
@@ -16,10 +16,8 @@
import java.util.HashMap;
import org.apache.framework.logger.AbstractLoggable;
import org.apache.framework.component.Component;
-import org.apache.aut.io.FileUtil;
+import org.apache.avalon.aut.io.FileUtil;
import org.apache.log.Logger;
-import org.apache.framework.container.Deployer;
-import org.apache.framework.container.DeploymentException;
/**
* A Deployer is responsible for taking a URL (ie a jar/war/ear) and deploying
@@ -55,10 +53,10 @@
{
throw new DeploymentException( m_type + " already exists at " +
location );
}
-
+
if( !isValidLocation( location ) )
{
- throw new DeploymentException( "Invalid location (" + location +
+ throw new DeploymentException( "Invalid location (" + location +
") for " + m_type );
}
}
@@ -80,7 +78,7 @@
if( !m_autoUndeploy )
{
//we are midstream but not allowed to automagically undeploy ..
therefore
- throw new DeploymentException( m_type + " not ready to undeploy at
" +
+ throw new DeploymentException( m_type + " not ready to undeploy at
" +
location );
}
else
@@ -123,13 +121,13 @@
if( !file.exists() )
{
- throw new DeploymentException( "Could not find application archive at "
+
+ throw new DeploymentException( "Could not find application archive at "
+
file );
}
if( file.isDirectory() )
{
- throw new DeploymentException( "Could not find application archive at "
+
+ throw new DeploymentException( "Could not find application archive at "
+
file + " as it is a directory." );
}
1.4 +6 -8
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AvalonState.java
Index: AvalonState.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/AvalonState.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- AvalonState.java 2001/03/15 04:34:44 1.3
+++ AvalonState.java 2001/04/04 15:29:47 1.4
@@ -1,13 +1,11 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
-
-import org.apache.framework.container.State;
public final class AvalonState
extends State
1.4 +15 -17
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/CamelotUtil.java
Index: CamelotUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/CamelotUtil.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- CamelotUtil.java 2001/03/15 04:34:44 1.3
+++ CamelotUtil.java 2001/04/04 15:29:47 1.4
@@ -1,9 +1,9 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
@@ -11,10 +11,8 @@
import java.io.IOException;
import java.net.MalformedURLException;
import java.util.Iterator;
-import org.apache.aut.io.ExtensionFileFilter;
+import org.apache.avalon.aut.io.ExtensionFileFilter;
import org.apache.framework.component.Component;
-import org.apache.framework.container.Deployer;
-import org.apache.framework.container.DeploymentException;
/**
* Utility methods for Camelot related facilities.
@@ -30,7 +28,7 @@
{
}
- public static void deployFromDirectory( final Deployer deployer,
+ public static void deployFromDirectory( final Deployer deployer,
final File directory,
final String extention )
throws DeploymentException
@@ -38,11 +36,11 @@
deployFromDirectory( deployer, directory, new String[] { extention } );
}
- public static void deployFromDirectory( final Deployer deployer,
+ public static void deployFromDirectory( final Deployer deployer,
final File directory,
final String[] extentions )
throws DeploymentException
-
+
{
final ExtensionFileFilter filter = new ExtensionFileFilter( extentions );
final File[] files = directory.listFiles( filter );
@@ -59,14 +57,14 @@
for( int i = 0; i < files.length; i++ )
{
final String filename = files[ i ].getName();
-
+
int index = filename.lastIndexOf( '.' );
if( -1 == index ) index = filename.length();
-
+
final String name = filename.substring( 0, index );
-
+
try
- {
+ {
final File file = files[ i ].getCanonicalFile();
deployer.deploy( name, file.toURL() );
}
@@ -76,7 +74,7 @@
}
catch( final IOException ioe )
{
- throw new DeploymentException( "Unable to get canonical
representation " +
+ throw new DeploymentException( "Unable to get canonical
representation " +
"for file " + files[ i ], ioe );
}
}
1.2 +8 -8
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Container.java
Index: Container.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Container.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Container.java 2001/04/03 23:17:59 1.1
+++ Container.java 2001/04/04 15:29:47 1.2
@@ -1,17 +1,17 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import java.util.Iterator;
import org.apache.framework.component.Component;
/**
- * This contains it during execution and may provide certain
+ * This contains it during execution and may provide certain
* facilities (like a thread per EJB etc).
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
1.2 +5 -5
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/ContainerException.java
Index: ContainerException.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/ContainerException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- ContainerException.java 2001/04/03 23:17:59 1.1
+++ ContainerException.java 2001/04/04 15:29:48 1.2
@@ -5,16 +5,16 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.CascadingException;
/**
* Exception to indicate error manipulating container.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
-public final class ContainerException
+public final class ContainerException
extends CascadingException
{
/**
@@ -22,7 +22,7 @@
*
* @param message The detail message for this exception.
*/
- public ContainerException( final String message )
+ public ContainerException( final String message )
{
this( message, null );
}
@@ -33,7 +33,7 @@
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
- public ContainerException( final String message, final Throwable throwable )
+ public ContainerException( final String message, final Throwable throwable )
{
super( message, throwable );
}
1.6 +16 -20
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultFactory.java
Index: DefaultFactory.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultFactory.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultFactory.java 2001/04/03 23:17:59 1.5
+++ DefaultFactory.java 2001/04/04 15:29:48 1.6
@@ -1,9 +1,9 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
@@ -11,13 +11,9 @@
import java.util.HashMap;
import org.apache.framework.logger.AbstractLoggable;
import org.apache.framework.component.Component;
-import org.apache.framework.container.Factory;
-import org.apache.framework.container.FactoryException;
-import org.apache.framework.container.Loader;
-import org.apache.framework.container.Locator;
/**
- * This is the component that creates the components.
+ * This is the component that creates the components.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
@@ -40,7 +36,7 @@
* @return the component
* @exception FactoryException if an error occurs
*/
- public Object create( final Locator locator )
+ public Object create( final Locator locator )
throws FactoryException
{
final Loader loader = getLoaderFor( locator.getLocation() );
@@ -48,7 +44,7 @@
try { return loader.load( locator.getName() ); }
catch( final Exception e )
{
- throw new FactoryException( "Unable to create " + locator.getName() +
+ throw new FactoryException( "Unable to create " + locator.getName() +
" from " + locator.getLocation(), e );
}
}
@@ -57,13 +53,13 @@
throws FactoryException
{
final Object object = create( locator );
-
+
if( !clazz.isInstance( object ) )
{
throw new FactoryException( "Created object of type " +
object.getClass().getName() +
" not compatable with type " +
clazz.getName() );
}
-
+
return object;
}
@@ -71,7 +67,7 @@
{
final String location = url.toString();
LoaderEntry loader = (LoaderEntry)m_loaders.get( location );
-
+
if( null == loader )
{
getLogger().info( "Creating ClassLoader for " + location );
@@ -79,14 +75,14 @@
loader.m_loader = setupLoader( url );
loader.m_lastModified = System.currentTimeMillis();
-
+
m_loaders.put( location, loader );
}
else
{
//TODO: Check it up to date and reload if necessary
}
-
+
return loader.m_loader;
}
@@ -95,12 +91,12 @@
final ClassLoader classLoader =
Thread.currentThread().getContextClassLoader();
final Loader loader = createLoader( url, classLoader );
-/* FIX ME
+/* FIX ME
setupLogger( loader );
*/
return loader;
}
-
+
/**
* Create a new loader.
* Put in another method so that it can be overridden.
1.6 +10 -12
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultLoader.java
Index: DefaultLoader.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultLoader.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- DefaultLoader.java 2001/04/03 23:17:59 1.5
+++ DefaultLoader.java 2001/04/04 15:29:48 1.6
@@ -1,9 +1,9 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
@@ -11,12 +11,10 @@
import java.net.URLClassLoader;
import org.apache.framework.ExceptionUtil;
import org.apache.framework.component.Component;
-import org.apache.framework.container.FactoryException;
-import org.apache.framework.container.Loader;
/**
* Class used to load resources from a source.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class DefaultLoader
@@ -37,7 +35,7 @@
public DefaultLoader( final URL location )
{
this( location, Thread.currentThread().getContextClassLoader() );
- }
+ }
public DefaultLoader()
{
@@ -93,13 +91,13 @@
}
catch( final IllegalAccessException iae )
{
- throw new FactoryException( "Failed to instantiate class " + classname
+
+ throw new FactoryException( "Failed to instantiate class " + classname +
" as it does not have a publicly accesable
" +
"default constructor", iae );
}
catch( final Throwable t )
{
- throw new FactoryException( "Failed to get class " + classname +
+ throw new FactoryException( "Failed to get class " + classname +
" due to " + ExceptionUtil.printStackTrace(
t, 5, true ),
t );
}
1.4 +9 -10
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultLocator.java
Index: DefaultLocator.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultLocator.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultLocator.java 2001/03/15 04:34:45 1.3
+++ DefaultLocator.java 2001/04/04 15:29:48 1.4
@@ -1,19 +1,18 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
import java.net.URL;
import org.apache.framework.component.Component;
-import org.apache.framework.container.Locator;
-
+
/**
* This contains information required to locate a component.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public class DefaultLocator
@@ -27,7 +26,7 @@
m_name = name;
m_location = location;
}
-
+
/**
* Retrieve "name" of component type.
* The "name" usually indicates the classname.
1.4 +6 -10
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultRegistry.java
Index: DefaultRegistry.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DefaultRegistry.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DefaultRegistry.java 2001/03/15 04:34:45 1.3
+++ DefaultRegistry.java 2001/04/04 15:29:48 1.4
@@ -1,19 +1,15 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
package org.apache.avalon.camelot;
import java.util.HashMap;
import java.util.Iterator;
import org.apache.framework.component.Component;
-import org.apache.framework.container.Registry;
-import org.apache.framework.container.RegistryException;
-import org.apache.framework.container.MetaInfo;
-
/**
* Represents a Registry of names to types.
1.2 +7 -7
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Deployer.java
Index: Deployer.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Deployer.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Deployer.java 2001/04/03 23:17:59 1.1
+++ Deployer.java 2001/04/04 15:29:48 1.2
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import java.net.URL;
import org.apache.framework.component.Component;
1.5 +21 -22
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DeployerUtil.java
Index: DeployerUtil.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DeployerUtil.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- DeployerUtil.java 2001/04/03 23:17:59 1.4
+++ DeployerUtil.java 2001/04/04 15:29:48 1.5
@@ -23,7 +23,6 @@
import org.apache.framework.component.Composer;
import org.apache.framework.configuration.Configuration;
import org.apache.framework.configuration.ConfigurationException;
-import org.apache.framework.container.DeploymentException;
import org.xml.sax.SAXException;
/**
@@ -66,7 +65,7 @@
final File file = getFileFor( url );
return getZipFileFor( file );
}
-*/
+*/
/**
* Retrieve zip file for file.
*
@@ -80,12 +79,12 @@
try { return new ZipFile( file ); }
catch( final IOException ioe )
{
- throw new DeploymentException( "Error opening " + file +
+ throw new DeploymentException( "Error opening " + file +
" due to " + ioe.getMessage(),
ioe );
- }
+ }
}
-
+
/**
* Utility method to load configuration from zip.
*
@@ -94,13 +93,13 @@
* @return the Configuration
* @exception DeploymentException if an error occurs
*/
- public final static Configuration loadConfiguration( final ZipFile zipFile,
+ public final static Configuration loadConfiguration( final ZipFile zipFile,
final String filename )
throws DeploymentException
{
return buildConfiguration( loadResourceStream( zipFile, filename ) );
}
-
+
/**
* Build a configuration tree based on input stream.
*
@@ -125,7 +124,7 @@
throw new DeploymentException( "Error reading configuration", ioe );
}
}
-
+
/**
* Utility method to load a manifest from a zip file.
*
@@ -136,9 +135,9 @@
throws DeploymentException
{
final InputStream input = loadResourceStream( zipFile,
"META-INF/MANIFEST.MF" );
-
+
try { return new Manifest( input ); }
- catch( final IOException ioe )
+ catch( final IOException ioe )
{
throw new DeploymentException( "Error reading manifest", ioe );
}
@@ -148,7 +147,7 @@
catch( final IOException ioe ) {}
}
}
-
+
/**
* Utility method to load properties from zip.
*
@@ -157,23 +156,23 @@
* @return the Properties
* @exception DeploymentException if an error occurs
*/
- public final static Properties loadProperties( final ZipFile zipFile,
+ public final static Properties loadProperties( final ZipFile zipFile,
final String filename )
throws DeploymentException
{
final Properties properties = new Properties();
-
+
try { properties.load( loadResourceStream( zipFile, filename ) ); }
catch( final IOException ioe )
{
- throw new DeploymentException( "Error reading " + filename +
+ throw new DeploymentException( "Error reading " + filename +
" from " + zipFile.getName(),
ioe );
}
-
+
return properties;
}
-
+
/**
* Load a resource from a zip file.
*
@@ -182,24 +181,24 @@
* @return the InputStream
* @exception DeploymentException if an error occurs
*/
- public final static InputStream loadResourceStream( final ZipFile zipFile,
+ public final static InputStream loadResourceStream( final ZipFile zipFile,
final String filename )
throws DeploymentException
{
final ZipEntry entry = zipFile.getEntry( filename );
-
+
if( null == entry )
{
- throw new DeploymentException( "Unable to locate " + filename +
+ throw new DeploymentException( "Unable to locate " + filename +
" in " + zipFile.getName() );
}
-
+
try { return zipFile.getInputStream( entry ); }
catch( final IOException ioe )
{
- throw new DeploymentException( "Error reading " + filename +
+ throw new DeploymentException( "Error reading " + filename +
" from " + zipFile.getName(),
ioe );
- }
+ }
}
}
1.2 +5 -5
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DeploymentException.java
Index: DeploymentException.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/DeploymentException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DeploymentException.java 2001/04/03 23:17:59 1.1
+++ DeploymentException.java 2001/04/04 15:29:48 1.2
@@ -5,16 +5,16 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.CascadingException;
/**
* Exception to indicate error deploying.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
-public final class DeploymentException
+public final class DeploymentException
extends CascadingException
{
/**
@@ -22,7 +22,7 @@
*
* @param message The detail message for this exception.
*/
- public DeploymentException( final String message )
+ public DeploymentException( final String message )
{
this( message, null );
}
@@ -33,7 +33,7 @@
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
- public DeploymentException( final String message, final Throwable throwable )
+ public DeploymentException( final String message, final Throwable throwable )
{
super( message, throwable );
}
1.2 +12 -12
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Entry.java
Index: Entry.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Entry.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Entry.java 2001/04/03 23:17:59 1.1
+++ Entry.java 2001/04/04 15:29:48 1.2
@@ -1,17 +1,17 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.component.Component;
/**
- * Contains information about a particular instance of contained component.
- * This would contain name, configuration data, parameters, log entries etc.
+ * Contains information about a particular instance of contained component.
+ * This would contain name, configuration data, parameters, log entries etc.
* Basically instance data.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
@@ -63,7 +63,7 @@
{
return m_instance;
}
-
+
/**
* Set instance of component.
*
@@ -73,7 +73,7 @@
{
m_instance = instance;
}
-
+
/**
* Retrieve state of a component.
*
@@ -83,7 +83,7 @@
{
return m_state;
}
-
+
/**
* set state of a component.
*
1.2 +11 -11
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Factory.java
Index: Factory.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Factory.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Factory.java 2001/04/03 23:17:59 1.1
+++ Factory.java 2001/04/04 15:29:48 1.2
@@ -1,16 +1,16 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.component.Component;
/**
- * This is the component that creates the components.
+ * This is the component that creates the components.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
@@ -24,11 +24,11 @@
* @return the component
* @exception FactoryException if an error occurs
*/
- Object create( Locator locator )
+ Object create( Locator locator )
throws FactoryException;
/**
- * Create a component whos position is indicated by locator.
+ * Create a component whos position is indicated by locator.
* Make sure it is of the correct type.
*
* @param locator the locator indicating the component location
@@ -36,6 +36,6 @@
* @return the component
* @exception FactoryException if an error occurs
*/
- Object create( Locator locator, Class clazz )
+ Object create( Locator locator, Class clazz )
throws FactoryException;
}
1.2 +5 -5
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/FactoryException.java
Index: FactoryException.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/FactoryException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- FactoryException.java 2001/04/03 23:17:59 1.1
+++ FactoryException.java 2001/04/04 15:29:48 1.2
@@ -5,16 +5,16 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.CascadingException;
/**
* Exception to indicate error creating entries in factory.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
-public final class FactoryException
+public final class FactoryException
extends CascadingException
{
/**
@@ -22,7 +22,7 @@
*
* @param message The detail message for this exception.
*/
- public FactoryException( final String message )
+ public FactoryException( final String message )
{
this( message, null );
}
@@ -33,7 +33,7 @@
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
- public FactoryException( final String message, final Throwable throwable )
+ public FactoryException( final String message, final Throwable throwable )
{
super( message, throwable );
}
1.2 +8 -8
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Loader.java
Index: Loader.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Loader.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Loader.java 2001/04/03 23:17:59 1.1
+++ Loader.java 2001/04/04 15:29:48 1.2
@@ -1,17 +1,17 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.component.Component;
/**
* Class used to load resources from a source.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public interface Loader
1.2 +8 -8
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Locator.java
Index: Locator.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Locator.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Locator.java 2001/04/03 23:17:59 1.1
+++ Locator.java 2001/04/04 15:29:48 1.2
@@ -1,18 +1,18 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import java.net.URL;
import org.apache.framework.component.Component;
/**
* This contains information required to locate a component.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
public interface Locator
1.2 +7 -7
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/MetaInfo.java
Index: MetaInfo.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/MetaInfo.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- MetaInfo.java 2001/04/03 23:17:59 1.1
+++ MetaInfo.java 2001/04/04 15:29:48 1.2
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
/**
* This contains information about the component.
1.2 +7 -7
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Registry.java
Index: Registry.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/Registry.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Registry.java 2001/04/03 23:17:59 1.1
+++ Registry.java 2001/04/04 15:29:48 1.2
@@ -1,11 +1,11 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import java.util.Iterator;
import org.apache.framework.component.Component;
1.2 +6 -6
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/RegistryException.java
Index: RegistryException.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/RegistryException.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- RegistryException.java 2001/04/03 23:17:59 1.1
+++ RegistryException.java 2001/04/04 15:29:48 1.2
@@ -5,16 +5,16 @@
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
import org.apache.framework.CascadingException;
/**
* Exception to indicate registry error.
- *
+ *
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
-public final class RegistryException
+public final class RegistryException
extends CascadingException
{
/**
@@ -22,18 +22,18 @@
*
* @param message The detail message for this exception.
*/
- public RegistryException( final String message )
+ public RegistryException( final String message )
{
this( message, null );
}
-
+
/**
* Construct a new <code>RegistryException</code> instance.
*
* @param message The detail message for this exception.
* @param throwable the root cause of the exception
*/
- public RegistryException( final String message, final Throwable throwable )
+ public RegistryException( final String message, final Throwable throwable )
{
super( message, throwable );
}
1.2 +9 -9
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/State.java
Index: State.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/camelot/State.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- State.java 2001/04/03 23:17:59 1.1
+++ State.java 2001/04/04 15:29:48 1.2
@@ -1,16 +1,16 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
*/
-package org.apache.framework.container;
+package org.apache.avalon.camelot;
-import org.apache.aut.ValuedEnum;
+import org.apache.avalon.util.ValuedEnum;
/**
- * Defines possible states for contained components.
+ * Defines possible states for contained components.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
1.4 +10 -10
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/DataSourceComponent.java
Index: DataSourceComponent.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/DataSourceComponent.java,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- DataSourceComponent.java 2001/04/03 04:41:42 1.3
+++ DataSourceComponent.java 2001/04/04 15:29:49 1.4
@@ -1,10 +1,10 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
- */
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
+ */
package org.apache.avalon.datasource;
import java.sql.Connection;
@@ -17,14 +17,14 @@
* The standard interface for DataSources in Avalon.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.3 $ $Date: 2001/04/03 04:41:42 $
+ * @version CVS $Revision: 1.4 $ $Date: 2001/04/04 15:29:49 $
*/
-public interface DataSourceComponent
+public interface DataSourceComponent
extends Component, Configurable, ThreadSafe
{
/**
* Gets the Connection to the database
*/
- Connection getConnection()
+ Connection getConnection()
throws SQLException;
}
1.3 +14 -14
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/J2eeDataSource.java
Index: J2eeDataSource.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/J2eeDataSource.java,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- J2eeDataSource.java 2001/03/15 04:34:50 1.2
+++ J2eeDataSource.java 2001/04/04 15:29:49 1.3
@@ -1,10 +1,10 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
- */
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
+ */
package org.apache.avalon.datasource;
import java.sql.Connection;
@@ -15,7 +15,7 @@
import javax.sql.DataSource;
import org.apache.framework.configuration.Configuration;
import org.apache.framework.configuration.ConfigurationException;
-import org.apache.avalon.logger.AbstractLoggable;
+import org.apache.framework.logger.AbstractLoggable;
/**
* The J2EE implementation for DataSources in Cocoon. This uses the
@@ -23,9 +23,9 @@
* J2EE container pools the datasources properly.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.2 $ $Date: 2001/03/15 04:34:50 $
+ * @version CVS $Revision: 1.3 $ $Date: 2001/04/04 15:29:49 $
*/
-public class J2eeDataSource
+public class J2eeDataSource
extends AbstractLoggable
implements DataSourceComponent
{
@@ -45,7 +45,7 @@
public void configure( final Configuration configuration )
throws ConfigurationException
{
- if( null == m_dataSource )
+ if( null == m_dataSource )
{
final String databaseName = configuration.getChild("dbname").getValue();
@@ -53,8 +53,8 @@
{
final Context initialContext = new InitialContext();
m_dataSource = (DataSource)initialContext.lookup( JDBC_NAME +
databaseName );
- }
- catch( final NamingException ne )
+ }
+ catch( final NamingException ne )
{
getLogger().error( "Problem with JNDI lookup of datasource", ne );
throw new ConfigurationException( "Could not use JNDI to find
datasource", ne );
@@ -64,7 +64,7 @@
/** Get the database connection */
public Connection getConnection()
- throws SQLException
+ throws SQLException
{
if( null == m_dataSource )
{
1.7 +41 -42
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcConnection.java
Index: JdbcConnection.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcConnection.java,v
retrieving revision 1.6
retrieving revision 1.7
diff -u -r1.6 -r1.7
--- JdbcConnection.java 2001/04/03 23:18:01 1.6
+++ JdbcConnection.java 2001/04/04 15:29:49 1.7
@@ -1,10 +1,10 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
- */
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
+ */
package org.apache.avalon.datasource;
import java.sql.CallableStatement;
@@ -18,8 +18,7 @@
import org.apache.framework.logger.AbstractLoggable;
import org.apache.avalon.pool.Recyclable;
import org.apache.avalon.pool.Pool;
-import org.apache.avalon.pool.Poolable;
-
+
/**
* The Connection object used in conjunction with the JdbcDataSource
* object.
@@ -29,11 +28,11 @@
* total number of Connection objects that are created.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.6 $ $Date: 2001/04/03 23:18:01 $
+ * @version CVS $Revision: 1.7 $ $Date: 2001/04/04 15:29:49 $
*/
-public class JdbcConnection
+public class JdbcConnection
extends AbstractLoggable
- implements Connection, Recyclable, Poolable
+ implements Connection, Recyclable
{
private Connection m_connection;
private Pool m_pool;
@@ -44,154 +43,154 @@
m_pool = pool;
}
- public Statement createStatement()
+ public Statement createStatement()
throws SQLException
{
return m_connection.createStatement();
}
- public PreparedStatement prepareStatement( final String sql )
+ public PreparedStatement prepareStatement( final String sql )
throws SQLException
{
return m_connection.prepareStatement( sql );
}
- public CallableStatement prepareCall( final String sql )
+ public CallableStatement prepareCall( final String sql )
throws SQLException
{
return m_connection.prepareCall( sql );
}
- public String nativeSQL( final String sql )
+ public String nativeSQL( final String sql )
throws SQLException
{
return m_connection.nativeSQL( sql );
}
- public void setAutoCommit( final boolean autoCommit )
+ public void setAutoCommit( final boolean autoCommit )
throws SQLException
{
m_connection.setAutoCommit( autoCommit );
}
- public boolean getAutoCommit()
+ public boolean getAutoCommit()
throws SQLException
{
return m_connection.getAutoCommit();
}
- public void commit()
+ public void commit()
throws SQLException
{
m_connection.commit();
}
- public void rollback()
+ public void rollback()
throws SQLException
{
m_connection.rollback();
}
- public void close()
+ public void close()
throws SQLException
{
- setAutoCommit( false );
+ clearWarnings();
m_pool.put( this );
}
- public void recycle()
+ public void recycle()
{
- try { m_connection.close(); }
+ try { m_connection.close(); }
catch( final SQLException se )
{
getLogger().warn( "Could not close connection", se );
}
}
- public boolean isClosed()
+ public boolean isClosed()
throws SQLException
{
return m_connection.isClosed();
}
- public DatabaseMetaData getMetaData()
+ public DatabaseMetaData getMetaData()
throws SQLException
{
return m_connection.getMetaData();
}
- public void setReadOnly( final boolean readOnly )
+ public void setReadOnly( final boolean readOnly )
throws SQLException
{
m_connection.setReadOnly( readOnly );
}
- public boolean isReadOnly()
+ public boolean isReadOnly()
throws SQLException
{
return m_connection.isReadOnly();
}
- public void setCatalog( final String catalog )
+ public void setCatalog( final String catalog )
throws SQLException
{
m_connection.setCatalog( catalog );
}
- public String getCatalog()
+ public String getCatalog()
throws SQLException
{
return m_connection.getCatalog();
}
- public void setTransactionIsolation( final int level )
+ public void setTransactionIsolation( final int level )
throws SQLException
{
m_connection.setTransactionIsolation(level);
}
- public int getTransactionIsolation()
+ public int getTransactionIsolation()
throws SQLException
{
return m_connection.getTransactionIsolation();
}
- public SQLWarning getWarnings()
+ public SQLWarning getWarnings()
throws SQLException
{
return m_connection.getWarnings();
}
- public void clearWarnings()
+ public void clearWarnings()
throws SQLException
{
m_connection.clearWarnings();
}
- public Statement createStatement( final int resultSetType,
- final int resultSetConcurrency )
+ public Statement createStatement( final int resultSetType,
+ final int resultSetConcurrency )
throws SQLException
{
return m_connection.createStatement(resultSetType, resultSetConcurrency);
}
- public PreparedStatement prepareStatement( final String sql,
- final int resultSetType,
- final int resultSetConcurrency )
+ public PreparedStatement prepareStatement( final String sql,
+ final int resultSetType,
+ final int resultSetConcurrency )
throws SQLException
{
return m_connection.prepareStatement( sql, resultSetType,
resultSetConcurrency );
}
- public CallableStatement prepareCall( final String sql,
- final int resultSetType,
+ public CallableStatement prepareCall( final String sql,
+ final int resultSetType,
final int resultSetConcurrency )
throws SQLException
{
return m_connection.prepareCall( sql, resultSetType, resultSetConcurrency );
}
- public Map getTypeMap()
+ public Map getTypeMap()
throws SQLException
{
return m_connection.getTypeMap();
1.8 +99 -101
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcConnectionPool.java
Index: JdbcConnectionPool.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcConnectionPool.java,v
retrieving revision 1.7
retrieving revision 1.8
diff -u -r1.7 -r1.8
--- JdbcConnectionPool.java 2001/04/03 23:18:01 1.7
+++ JdbcConnectionPool.java 2001/04/04 15:29:49 1.8
@@ -12,19 +12,21 @@
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
-import org.apache.avalon.pool.Pool;
-import org.apache.avalon.pool.Poolable;
-import org.apache.avalon.pool.Recyclable;
+import java.util.Date;
+import org.apache.framework.logger.AbstractLoggable;
import org.apache.framework.lifecycle.Disposable;
import org.apache.framework.lifecycle.Initializable;
-import org.apache.framework.logger.AbstractLoggable;
+import org.apache.avalon.pool.Poolable;
+import org.apache.avalon.pool.Recyclable;
+import org.apache.avalon.pool.Pool;
+import org.apache.avalon.util.Lock;
/**
* The Pool implementation for JdbcConnections. It uses a background
* thread to manage the number of SQL Connections.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.7 $ $Date: 2001/04/03 23:18:01 $
+ * @version CVS $Revision: 1.8 $ $Date: 2001/04/04 15:29:49 $
*/
public class JdbcConnectionPool
extends AbstractLoggable
@@ -33,84 +35,64 @@
private final String m_dburl;
private final String m_username;
private final String m_password;
- private final int m_min;
private final int m_max;
- private int m_currentCount;
+ private final boolean m_autoCommit;
private List m_active = new ArrayList();
private List m_ready = new ArrayList();
- private boolean m_monitoring = true;
+ private boolean m_initialized = false;
+ private boolean m_disposed = false;
+ private Lock m_lock = new Lock();
+ private Thread m_initThread;
public JdbcConnectionPool( final String url,
final String username,
final String password,
- final int min,
- final int max )
+ final int max,
+ final boolean autoCommit )
{
m_dburl = url;
m_username = username;
m_password = password;
- if( min < 0 )
+ if( max < 1 )
{
- getLogger().warn( "Minumum number of connections specified is " +
- "less than 0, using 0" );
- m_min = 0;
- }
- else
- {
- m_min = min;
- }
-
- if( ( max < min ) || ( max < 1 ) )
- {
getLogger().warn( "Maximum number of connections specified must be at "
+
"least 1 and must be greater than the minumum number
" +
"of connections" );
- m_max = ( min > 1 ) ? min : 1;
+ m_max = 1;
}
else
{
m_max = max;
}
+
+ m_autoCommit = autoCommit;
}
public void init()
{
- for( int i = 0; i < m_min; i++ )
- {
- m_ready.add( createJdbcConnection() );
- }
-
- new Thread( this );
+ m_initThread = new Thread( this );
+ m_initThread.start();
}
private JdbcConnection createJdbcConnection()
+ throws SQLException
{
JdbcConnection connection = null;
- try
+ if( null == m_username )
{
- if( null == m_username )
- {
- connection = new JdbcConnection( DriverManager.getConnection(
m_dburl ), this );
- connection.setLogger(getLogger());
- m_currentCount++;
- }
- else
- {
- connection =
- new JdbcConnection( DriverManager.getConnection( m_dburl,
- m_username,
- m_password ),
- this);
- connection.setLogger(getLogger());
- m_currentCount++;
- }
+ connection = new JdbcConnection( DriverManager.getConnection( m_dburl
), this );
+ connection.setLogger(getLogger());
}
-
- catch( final SQLException se )
+ else
{
- getLogger().error( "Could not create connection to database", se );
+ connection =
+ new JdbcConnection( DriverManager.getConnection( m_dburl,
+ m_username,
+ m_password ),
+ this);
+ connection.setLogger(getLogger());
}
getLogger().debug( "JdbcConnection object created" );
@@ -126,98 +108,114 @@
public Poolable get()
throws Exception
{
- Poolable obj = null;
-
- if( 0 == m_ready.size() )
+ if (! m_initialized)
{
- if( m_currentCount < m_max )
+ if (m_initThread == null)
{
- synchronized( m_active )
- {
- obj = createJdbcConnection();
- m_active.add( obj );
- }
+ throw new IllegalStateException("You cannot get a Connection before
the pool is initialized");
}
else
{
- throw new SQLException("There are no more Connections available");
+ m_initThread.join();
}
}
+
+ if (m_disposed)
+ {
+ throw new IllegalStateException("You cannot get a Connection after the
pool is disposed");
+ }
+
+ m_lock.lock(m_ready);
+ Poolable obj = null;
+ final int size;
+
+ if( 0 == m_ready.size() )
+ {
+ throw new SQLException("There are no more Connections available");
+ }
else
{
- synchronized( m_active )
- {
- obj = (Poolable)m_ready.remove( 0 );
- m_active.add( obj );
- }
+ obj = (Poolable)m_ready.remove( 0 );
+
+ m_lock.lock(m_active);
+ m_active.add( obj );
+ m_lock.unlock(m_active);
}
+ m_lock.unlock(m_ready);
+
+ if (((Connection)obj).getAutoCommit() != m_autoCommit) {
+ ((Connection)obj).setAutoCommit(m_autoCommit);
+ }
+
getLogger().debug( "JdbcConnection '" + m_dburl +
"' has been requested from pool." );
return obj;
}
- public synchronized void put( final Poolable obj )
+ public void put( final Poolable obj )
{
- int location = m_active.indexOf( obj );
+ if (! m_initialized)
+ {
+ throw new IllegalStateException("You cannot return an object to an
uninitialized pool");
+ }
+
+ m_lock.lock(m_active);
m_active.remove( obj );
- if( m_monitoring )
+ if(! m_disposed)
{
+ m_lock.lock(m_ready);
m_ready.add( obj );
+ m_lock.unlock(m_ready);
+ } else {
+ recycle((Recyclable) obj);
}
+ m_lock.unlock(m_active);
+
getLogger().debug( "JdbcConnection '" + m_dburl + "' has been returned to
the pool." );
}
public void run()
{
- while( m_monitoring )
+ m_lock.lock(m_ready);
+ for (int i = 0; i < m_max; i++)
{
- synchronized( m_ready )
- {
- if( m_ready.size() < m_min )
- {
- getLogger().debug( "There are not enough Connections for pool:
" + m_dburl );
-
- while( ( m_ready.size() < m_min ) && ( m_currentCount < m_max )
)
- {
- m_ready.add( createJdbcConnection() );
- }
- }
- else
- {
- getLogger().debug( "Trimming excess fat from pool: " + m_dburl
);
-
- while( m_ready.size() > m_min )
- {
- recycle( (Recyclable)m_ready.remove( 0 ) );
- }
- }
+ try {
+ m_ready.add( createJdbcConnection() );
+ } catch (SQLException se) {
+ getLogger().error( "Could not create connection to database", se );
}
+ }
- try
- {
- Thread.sleep( 1 * 60 * 1000 );
- }
- catch( final InterruptedException ie )
- {
- getLogger().warn( "Caught an InterruptedException", ie );
+ if ((m_ready.size() < m_max) && (m_ready.size() > 0)) {
+ while (m_ready.size() < m_max) {
+ try {
+ m_ready.add( createJdbcConnection() );
+ } catch (SQLException se) {
+ getLogger().error( "Could not create connection to database",
se );
+ }
}
}
+
+ if (m_ready.size() > 0) {
+ m_initialized = true;
+ }
+ m_lock.unlock(m_ready);
}
public void dispose()
{
- m_monitoring = false;
+ m_lock.lock(m_ready);
+ m_disposed = true;
- synchronized (m_ready)
+ while( ! m_ready.isEmpty() )
{
- while( !m_ready.isEmpty() )
- {
- recycle( (Recyclable)m_ready.remove( 0 ) );
- }
+ recycle( (Recyclable)m_ready.remove( 0 ) );
}
+
+ m_lock.unlock(m_ready);
}
}
1.6 +14 -14
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcDataSource.java
Index: JdbcDataSource.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/datasource/JdbcDataSource.java,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -r1.5 -r1.6
--- JdbcDataSource.java 2001/04/03 23:18:01 1.5
+++ JdbcDataSource.java 2001/04/04 15:29:50 1.6
@@ -1,10 +1,10 @@
-/*
- * Copyright (C) The Apache Software Foundation. All rights reserved.
- *
- * This software is published under the terms of the Apache Software License
- * version 1.1, a copy of which has been included with this distribution in
- * the LICENSE file.
- */
+/*
+ * Copyright (C) The Apache Software Foundation. All rights reserved.
+ *
+ * This software is published under the terms of the Apache Software License
+ * version 1.1, a copy of which has been included with this distribution in
+ * the LICENSE file.
+ */
package org.apache.avalon.datasource;
import java.sql.Connection;
@@ -20,9 +20,9 @@
* <code>java.sql.DriverManager</code>.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Berin Loritsch</a>
- * @version CVS $Revision: 1.5 $ $Date: 2001/04/03 23:18:01 $
+ * @version CVS $Revision: 1.6 $ $Date: 2001/04/04 15:29:50 $
*/
-public class JdbcDataSource
+public class JdbcDataSource
extends AbstractLoggable
implements DataSourceComponent
{
@@ -48,10 +48,10 @@
final String passwd = configuration.getChild( "password" ).getValue(
null );
final Configuration controler = configuration.getChild(
"pool-controller" );
- final int min = controler.getAttributeAsInt( "min", 0 );
final int max = controler.getAttributeAsInt( "max", 3 );
+ final boolean autoCommit =
configuration.getChild("auto-commit").getValueAsBoolean(true);
- m_pool = new JdbcConnectionPool( dburl, user, passwd, min, max );
+ m_pool = new JdbcConnectionPool( dburl, user, passwd, max, autoCommit );
m_pool.setLogger(getLogger());
m_pool.init();
}
@@ -59,9 +59,9 @@
/** Get the database connection */
public Connection getConnection()
- throws SQLException
+ throws SQLException
{
- try { return (Connection) m_pool.get(); }
+ try { return (Connection) m_pool.get(); }
catch( final Exception e )
{
getLogger().error( "Could not return Connection", e );
@@ -70,7 +70,7 @@
}
/** Dispose properly of the pool */
- public void dispose()
+ public void dispose()
{
m_pool.dispose();
m_pool = null;
1.2 +9 -9
jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/pool/Recyclable.java
Index: Recyclable.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/avalon/pool/Recyclable.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- Recyclable.java 2001/04/02 04:06:30 1.1
+++ Recyclable.java 2001/04/04 15:29:50 1.2
@@ -12,21 +12,21 @@
* A recyclable object is defined as an object that can be used to
* encapsulate another object without being altered by its content.
* Therefore, a recyclable object may be recycled and reused many times.
- *
- * This is helpful in cases where recyclable objects are continously
- * created and destroied, causing a much greater amount of garbage to
- * be collected by the JVM garbage collector. By making it recyclable,
- * it is possible to reduce the GC execution time thus incrementing the
- * overall performance of a process and decrementing the chance of
+ *
+ * This is helpful in cases where recyclable objects are continously
+ * created and destroied, causing a much greater amount of garbage to
+ * be collected by the JVM garbage collector. By making it recyclable,
+ * it is possible to reduce the GC execution time thus incrementing the
+ * overall performance of a process and decrementing the chance of
* memory overflow.
- *
- * Every implementation must provide their own method to allow this
+ *
+ * Every implementation must provide their own method to allow this
* recyclable object to be reused by setting its content.
*
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
*/
-public interface Recyclable
+public interface Recyclable extends Poolable
{
/**
* This method should be implemented to remove all costly resources
1.2 +1 -2
jakarta-avalon/proposal/4.0/src/java/org/apache/framework/configuration/AbstractConfiguration.java
Index: AbstractConfiguration.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/framework/configuration/AbstractConfiguration.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- AbstractConfiguration.java 2001/04/03 23:18:02 1.1
+++ AbstractConfiguration.java 2001/04/04 15:29:50 1.2
@@ -17,8 +17,7 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
- * @version CVS $Revision: 1.1 $ $Date: 2001/04/03 23:18:02 $
- * @deprecated This has been deprecated in favour of configuration interface in
org.apache.avalon.configuration interface
+ * @version CVS $Revision: 1.2 $ $Date: 2001/04/04 15:29:50 $
*/
public abstract class AbstractConfiguration
implements Configuration
1.2 +23 -24
jakarta-avalon/proposal/4.0/src/java/org/apache/framework/configuration/DefaultConfiguration.java
Index: DefaultConfiguration.java
===================================================================
RCS file:
/home/cvs/jakarta-avalon/proposal/4.0/src/java/org/apache/framework/configuration/DefaultConfiguration.java,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -r1.1 -r1.2
--- DefaultConfiguration.java 2001/04/03 23:18:02 1.1
+++ DefaultConfiguration.java 2001/04/04 15:29:50 1.2
@@ -18,10 +18,9 @@
* @author <a href="mailto:[EMAIL PROTECTED]">Stefano Mazzocchi</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Pierpaolo Fumagalli</a>
* @author <a href="mailto:[EMAIL PROTECTED]">Peter Donald</a>
- * @deprecated This has been deprecated in favour of configuration interface in
org.apache.avalon.configuration interface
*/
-public class DefaultConfiguration
- extends AbstractConfiguration
+public class DefaultConfiguration
+ extends AbstractConfiguration
{
protected final static Iterator EMPTY_ITERATOR = (new
ArrayList(1)).iterator();
@@ -34,7 +33,7 @@
/**
* Create a new <code>DefaultConfiguration</code> instance.
*/
- public DefaultConfiguration( final String name, final String location )
+ public DefaultConfiguration( final String name, final String location )
{
m_name = name;
m_location = location;
@@ -43,7 +42,7 @@
/**
* Returns the name of this configuration element.
*/
- public String getName()
+ public String getName()
{
return m_name;
}
@@ -61,7 +60,7 @@
*
* @exception ConfigurationException If the value is not present.
*/
- public String getValue() throws ConfigurationException
+ public String getValue() throws ConfigurationException
{
if( null != m_value ) return m_value;
else
@@ -77,10 +76,10 @@
*
* @exception ConfigurationException If the attribute is not present.
*/
- public String getAttribute( final String name )
- throws ConfigurationException
+ public String getAttribute( final String name )
+ throws ConfigurationException
{
- final String value =
+ final String value =
(null != m_attributes) ? (String)m_attributes.get( name ) : null;
if( null != value ) return value;
@@ -98,16 +97,16 @@
*
* @param name The name of the required child <code>Configuration</code>.
*/
- public Configuration getChild( final String name )
+ public Configuration getChild( final String name )
{
- if( null == m_children )
+ if( null == m_children )
{
return new DefaultConfiguration( name, "-" );
}
else
{
final int size = m_children.size();
- for( int i = 0; i < size; i++ )
+ for( int i = 0; i < size; i++ )
{
final Configuration configuration = (Configuration)m_children.get(
i );
if( name.equals( configuration.getName() ) )
@@ -128,7 +127,7 @@
*
* @param name The name of the required children <code>Configuration</code>.
*/
- public Iterator getChildren( final String name )
+ public Iterator getChildren( final String name )
{
if( null == m_children ) return EMPTY_ITERATOR;
else
@@ -136,7 +135,7 @@
final ArrayList children = new ArrayList();
final int size = m_children.size();
- for( int i = 0; i < size; i++ )
+ for( int i = 0; i < size; i++ )
{
final Configuration configuration = (Configuration)m_children.get(
i );
if( name.equals( configuration.getName() ) )
@@ -149,7 +148,7 @@
}
}
- public Configuration[] getChildrenAsArray( final String name )
+ public Configuration[] getChildrenAsArray( final String name )
{
if( null == m_children ) return new Configuration[0];
else
@@ -157,7 +156,7 @@
final ArrayList children = new ArrayList();
final int size = m_children.size();
- for( int i = 0; i < size; i++ )
+ for( int i = 0; i < size; i++ )
{
final Configuration configuration = (Configuration)m_children.get(
i );
if( name.equals( configuration.getName() ) )
@@ -172,19 +171,19 @@
return response;
}
}
-
+
/**
* Append data to the value of this configuration element.
*/
- public void appendValueData( final String value )
+ public void appendValueData( final String value )
{
- if( null == m_value )
+ if( null == m_value )
{
m_value = value;
}
- else
+ else
{
m_value = m_value + value;
}
@@ -194,7 +193,7 @@
* Add an attribute to this configuration element, returning its old
* value or <b>null</b>.
*/
- public String addAttribute( final String name, String value )
+ public String addAttribute( final String name, String value )
{
if( null == m_attributes ) m_attributes = new HashMap();
@@ -204,7 +203,7 @@
/**
* Add a child <code>Configuration</code> to this configuration element.
*/
- public void addChild( final Configuration configuration )
+ public void addChild( final Configuration configuration )
{
if( null == m_children )
{
@@ -217,13 +216,13 @@
/**
* Return count of children.
*/
- public int getChildCount()
+ public int getChildCount()
{
if( null == m_children )
{
return 0;
}
-
+
return m_children.size();
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]