avalon-cvs mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From mcconn...@apache.org
Subject cvs commit: jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/file PersistentObject.java TransactionalFileSession.java
Date Sat, 02 Feb 2002 04:02:10 GMT
mcconnell    02/02/01 20:02:10

  Modified:    apps/enterprise/pss/src/java/org/apache/pss/connector/database
                        PersistentObject.java PersistentObjectHome.java
                        PersistentRef.java
                        TransactionalDatabaseSession.java
               apps/enterprise/pss/src/java/org/apache/pss/connector/file
                        PersistentObject.java TransactionalFileSession.java
  Log:
  javadoc additions
  
  Revision  Changes    Path
  1.3       +25 -28    jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentObject.java
  
  Index: PersistentObject.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentObject.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PersistentObject.java	2 Feb 2002 01:19:58 -0000	1.2
  +++ PersistentObject.java	2 Feb 2002 04:02:10 -0000	1.3
  @@ -14,75 +14,72 @@
   import org.apache.pss.connector.PID;
   
   /**
  - * 
  - *
  + * Interface implemented by generated storage types for database persistence.
    */
   public interface PersistentObject
   {
   
       /**
  -     * Sets the persistentLinks attribute of the PersistentObject object
  +     * Sets the home base and PID for the persistent object.
        *
  -     * @param pid The new persistentLinks value
  -     * @param storagehomebase The new persistentLinks value
  +     * @param pid the PID identifer
  +     * @param storagehomebase the storage home base implementation managing this persistent
object
        */
       public abstract void setPersistentLinks( PID pid, StorageHomeBase storagehomebase );
   
   
       /**
  -     * Gets the pID attribute of the PersistentObject object
  +     * Gets the PID attribute of the PersistentObject object
        *
  -     * @return The pID value
  +     * @return PID the PID value of the instance
        */
       public abstract PID getPID();
   
   
       /**
  -     * 
  -     *
  -     * @param persistentobject 
  +     * Flags a persistent object as embedded within another persistent object.
  +     * @param persistentobject the persistent object that this object is embedded within
        */
       public abstract void markAsEmbedded( PersistentObject persistentobject );
   
   
       /**
  -     * 
  +     * Invokes the embedded builder to build an embedded storage object.
        */
       public abstract void embeddedBuilder();
   
   
  +
       /**
  -     * 
  -     *
  -     * @param aoutputstream 
  +     * Checks all state members for transient status and returns true if 
  +     * the persistent object should be flushed.
  +     * @return boolean true if flush required
        */
  -    public abstract void write( OutputStream aoutputstream[] );
  +    public abstract boolean checkForFlush();
   
   
       /**
  -     * 
  -     *
  -     * @param ainputstream 
  +     * Flushes the incarnation.
        */
  -    public abstract void read( InputStream ainputstream[] );
  +    public abstract void flushIncarnation();
   
   
       /**
  -     * 
  -     *
  -     * @return (doc-pending)
  +     * Refreshes the incarnation.
        */
  -    public abstract boolean checkForFlush();
  -
  +    public abstract void refreshIncarnation();
   
       /**
  -     * 
  +     * Write the incarnation to an output stream array.
  +     * @param output 
        */
  -    public abstract void flushIncarnation();
  +    public abstract void write( OutputStream[] output );
   
   
       /**
  -     * 
  +     * Read an incarnation state from an input stream array.
  +     * @param input 
        */
  -    public abstract void refreshIncarnation();
  +    public abstract void read( InputStream[] input );
  +
   }
  
  
  
  1.4       +31 -39    jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentObjectHome.java
  
  Index: PersistentObjectHome.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentObjectHome.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PersistentObjectHome.java	2 Feb 2002 03:04:45 -0000	1.3
  +++ PersistentObjectHome.java	2 Feb 2002 04:02:10 -0000	1.4
  @@ -13,33 +13,30 @@
   import org.apache.pss.connector.NotFoundException;
   
   /**
  - * 
  - *
  + * Interface implemented by generated storage homes for database persistence.
    */
   public interface PersistentObjectHome
   {
   
       /**
  -     * Sets the persistentLinks attribute of the PersistentObjectHome object
  +     * Sets the catalog and home PID for the home.
        *
  -     * @param catalogbase The new persistentLinks value
  -     * @param pid The new persistentLinks value
  +     * @param catalogbase the catalog managing this home
  +     * @param pid the PID identifer
        */
       public abstract void setPersistentLinks( CatalogBase catalogbase, PID pid );
   
   
       /**
  -     * Gets the pID attribute of the PersistentObjectHome object
  -     *
  -     * @return The pID value
  +     * Gets the PID for this home.
  +     * @return PID the home identifier.
        */
       public abstract PID getPID();
   
   
       /**
  -     * 
  -     *
  -     * @param pid 
  +     * Remove a storage type from the home.
  +     * @param pid the PID of the storage type to remove
        * @exception NotFoundException 
        */
       public abstract void remove_storage_type( PID pid )
  @@ -47,66 +44,61 @@
   
   
       /**
  -     * 
  -     *
  -     * @param pid 
  -     * @return (doc-pending)
  +     * Check is a storage type is stored within the home.
  +     * @param pid the PID of the storage type to check
  +     * @return boolean true is the storage type is stored in this home
        */
       public abstract boolean is_stored( PID pid );
   
   
       /**
  -     * 
  -     *
  -     * @param persistentobject 
  +     * Refresh a persistent object in this home.
  +     * @param persistentobject the persistent object to refresh
        */
       public abstract void refresh( PersistentObject persistentobject );
   
   
       /**
  -     * 
  +     * Refresh all persistent objects in this home.
        */
       public abstract void refreshAll();
   
   
       /**
  -     * 
  -     *
  -     * @param persistentobject 
  +     * Flush a persistent object in this home.
  +     * @param persistentobject the persistent object to flush
        */
       public abstract void flush( PersistentObject persistentobject );
   
   
       /**
  -     * 
  -     *
  -     * @param pid 
  -     * @return (doc-pending)
  +     * Get the <code>StorageObject</code> given a supplied PID.
  +     * @param pid the PID 
  +     * @return StorageObject the corresponding storage object
        */
       public abstract StorageObject deref( PID pid );
   
   
       /**
  -     * Gets the homeMembers attribute of the PersistentObjectHome object
  -     *
  -     * @return The homeMembers value
  +     * Create a storage object ref given a persist object identifier.
  +     * @param pid persistent object identifier  
  +     * @return StorageObjectRef
        */
  -    public abstract String[] getHomeMembers();
  +    public abstract StorageObjectRef create_reference( byte[] pid );
   
   
       /**
  -     * 
  -     *
  -     * @param abyte0 
  -     * @return (doc-pending)
  +     * Create a new empty <code>StorageObject</code> of the type 
  +     * managed by this home.
  +     * @return StorageObject
        */
  -    public abstract StorageObjectRef create_reference( byte abyte0[] );
  +    public abstract StorageObject create_object();
   
   
       /**
  -     * 
  -     *
  -     * @return (doc-pending)
  +     * Returns an array of home names.
  +     * @return String[] home member names
        */
  -    public abstract StorageObject create_object();
  +    public abstract String[] getHomeMembers();
  +
   }
  
  
  
  1.3       +9 -8      jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentRef.java
  
  Index: PersistentRef.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/PersistentRef.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PersistentRef.java	2 Feb 2002 01:19:58 -0000	1.2
  +++ PersistentRef.java	2 Feb 2002 04:02:10 -0000	1.3
  @@ -12,25 +12,26 @@
   import org.apache.pss.connector.PID;
   
   /**
  - * 
  - *
  + * Interface implemented by database peristent object implementations 
  + * that describes a reference to a storage object.
    */
   public interface PersistentRef
   {
   
       /**
  -     * Sets the persistentLinks attribute of the PersistentRef object
  +     * Sets the storage home implementation and instance PID value.
        *
  -     * @param storagehomebase The new persistentLinks value
  -     * @param pid The new persistentLinks value
  +     * @param storagehomebase the storage home managing this instance
  +     * @param pid the PID value for this instance
        */
       public abstract void setPersistentLinks( StorageHomeBase storagehomebase, PID pid );
   
   
       /**
  -     * 
  +     * Updates the PID value for this instances based on the supplied 
  +     * persitent object identifier 
        *
  -     * @param abyte0 
  +     * @param pid persistent object identifier 
        */
  -    public abstract void update( byte abyte0[] );
  +    public abstract void update( byte[] pid );
   }
  
  
  
  1.3       +109 -128  jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/TransactionalDatabaseSession.java
  
  Index: TransactionalDatabaseSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/database/TransactionalDatabaseSession.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransactionalDatabaseSession.java	2 Feb 2002 01:19:58 -0000	1.2
  +++ TransactionalDatabaseSession.java	2 Feb 2002 04:02:10 -0000	1.3
  @@ -13,7 +13,12 @@
   import java.util.Hashtable;
   
   import org.omg.CORBA.*;
  +import org.omg.CORBA.BAD_OPERATION;
  +import org.omg.CORBA.INVALID_TRANSACTION;
  +import org.omg.CORBA.PERSIST_STORE;
  +import org.omg.CORBA.CompletionStatus;
   import org.omg.CosPersistentState.*;
  +import org.omg.CosPersistentState.TransactionalSession;
   import org.omg.CosTransactions.Coordinator;
   import org.omg.CosTransactions.ResourceHelper;
   import org.omg.PortableInterceptor.ORBInitInfo;
  @@ -29,8 +34,8 @@
   
   
   /**
  - * 
  - *
  + * Extended DatabaseSession that adds support for association of 
  + * transactional resources.
    */
   public class TransactionalDatabaseSession extends DatabaseSession
            implements TransactionalSession
  @@ -55,44 +60,43 @@
       /**
        * Constructor for the TransactionalDatabaseSession object
        *
  -     * @param orbinitinfo 
  +     * @param info 
        */
  -    public TransactionalDatabaseSession( ORBInitInfo orbinitinfo )
  +    public TransactionalDatabaseSession( ORBInitInfo info )
       {
  -        _info = orbinitinfo;
  -        _association_status = 0;
  +        _info = info;
  +        _association_status = TransactionalSession.NO_ASSOCIATION;
       }
   
   
       /**
  -     * Sets the baseInfo attribute of the TransactionalDatabaseSession object
  +     * Set the catalog base information.
        *
  -     * @param databaseconnector The new baseInfo value
  -     * @param word0 The new baseInfo value
  -     * @param endofassociationcallback The new baseInfo value
  -     * @param word1 The new baseInfo value
  -     * @param aparameter The new baseInfo value
  +     * @param connector the database connector
  +     * @param default_isolation_level default isolation level
  +     * @param callback the end of association callback
  +     * @param access access mode
  +     * @param parameters the connection parameters
        */
  -    public void setBaseInfo( DatabaseConnector databaseconnector, short word0, EndOfAssociationCallback
endofassociationcallback, short word1, Parameter aparameter[] )
  +    public void setBaseInfo( DatabaseConnector connector, short default_isolation_level,
EndOfAssociationCallback callback, short access, Parameter[] parameters )
       {
  -        for ( int i = 0; i < aparameter.length; i++ )
  +        for ( int i = 0; i < parameters.length; i++ )
           {
  -            if ( aparameter[i].name.equals( "HomeExtension" ) )
  +            if ( parameters[i].name.equals( "HomeExtension" ) )
               {
  -                _extension = aparameter[i].val.extract_string();
  +                _extension = parameters[i].val.extract_string();
               }
           }
   
  -        _isolation_level = word0;
  -        _callback = endofassociationcallback;
  -        setBaseInfo( databaseconnector, word1, aparameter );
  +        _isolation_level = default_isolation_level;
  +        _callback = callback;
  +        setBaseInfo( connector, access, parameters );
       }
   
   
       /**
  -     * 
  -     *
  -     * @return (doc-pending)
  +     * Returns the association status.
  +     * @return short association status
        */
       public short get_association_status()
       {
  @@ -101,25 +105,23 @@
   
   
       /**
  -     * 
  -     *
  -     * @param coordinator 
  -     * @return (doc-pending)
  +     * Test if this transactional session is associated to a transaction coordinator.
  +     * @param transaction 
  +     * @return boolean
        */
  -    public boolean is_associated_to( Coordinator coordinator )
  +    public boolean is_associated_to( Coordinator transaction )
       {
           if ( _coordinator == null )
           {
               return false;
           }
  -        return _coordinator.hash_transaction() == coordinator.hash_transaction();
  +        return _coordinator.hash_transaction() == transaction.hash_transaction();
       }
   
   
       /**
  -     * 
  -     *
  -     * @return (doc-pending)
  +     * Returns the default isolation level.
  +     * @return short
        */
       public short default_isolation_level()
       {
  @@ -128,112 +130,94 @@
   
   
       /**
  -     * 
  +     * Start a transactional session.
        *
        * @param coordinator 
        */
  -    public void start( Coordinator coordinator )
  +    public void start( org.omg.CosTransactions.Coordinator transaction )
       {
  -        _coordinator = coordinator;
  +        _coordinator = transaction;
           switch ( _association_status )
           {
  -            case 0:
  -                // '\0'
  -                register_database_resource( coordinator );
  -                _association_status = 1;
  -                break;
  -            case 2:
  -                // '\002'
  -                _association_status = 1;
  -                break;
  -            case 1:
  -                // '\001'
  -                throw new BAD_OPERATION();
  -            case 3:
  -                // '\003'
  -                _association_status = 1;
  -                break;
  +          case TransactionalSession.NO_ASSOCIATION :
  +            register_database_resource( transaction );
  +            _association_status = TransactionalSession.ACTIVE;
  +            break;
  +          case TransactionalSession.SUSPENDED :
  +            _association_status = TransactionalSession.ACTIVE;
  +            break;
  +          case TransactionalSession.ACTIVE :
  +            throw new BAD_OPERATION();
  +          case TransactionalSession.ENDING :
  +            _association_status = TransactionalSession.ACTIVE;
  +            break;
           }
       }
   
   
       /**
  -     * 
  -     *
  -     * @param coordinator 
  +     * Suspend a transactional session.
  +     * @param transaction 
        */
  -    public void suspend( Coordinator coordinator )
  +    public void suspend( Coordinator transaction )
       {
           switch ( _association_status )
           {
  -            case 0:
  -                // '\0'
  -                throw new PERSIST_STORE( 5, CompletionStatus.COMPLETED_NO );
  -            case 2:
  -                // '\002'
  -                throw new BAD_OPERATION();
  -            case 1:
  -                // '\001'
  -                if ( _coordinator.hash_transaction() != coordinator.hash_transaction()
)
  -                {
  -                    throw new INVALID_TRANSACTION();
  -                }
  -                _association_status = 2;
  -                break;
  -            case 3:
  -                // '\003'
  -                throw new BAD_OPERATION();
  +          case TransactionalSession.NO_ASSOCIATION :
  +            throw new PERSIST_STORE( 5, CompletionStatus.COMPLETED_NO );
  +          case TransactionalSession.SUSPENDED :
  +            throw new BAD_OPERATION();
  +          case TransactionalSession.ACTIVE :
  +            if ( _coordinator.hash_transaction() != transaction.hash_transaction() )
  +                throw new INVALID_TRANSACTION();
  +            _association_status = TransactionalSession.SUSPENDED;
  +            break;
  +          case TransactionalSession.ENDING :
  +            throw new BAD_OPERATION();
           }
       }
   
   
       /**
  -     * 
  -     *
  -     * @param coordinator 
  -     * @param flag 
  +     * End the transaction.
  +     * @param transaction 
  +     * @param success 
        */
  -    public void end( Coordinator coordinator, boolean flag )
  +    public void end( Coordinator transaction, boolean success )
       {
           switch ( _association_status )
           {
  -            case 0:
  -                // '\0'
  -                throw new PERSIST_STORE( 5, CompletionStatus.COMPLETED_NO );
  -            case 1:
  -            // '\001'
  -            case 2:
  -                // '\002'
  -                if ( _coordinator.hash_transaction() != coordinator.hash_transaction()
)
  -                {
  -                    throw new INVALID_TRANSACTION();
  -                }
  -                if ( !flag )
  -                {
  -                    _cache.clear();
  -                    try
  -                    {
  -                        _datastore.rollback();
  -                    }
  -                    catch ( Exception exception )
  -                    {}
  -                }
  -                else
  +          case TransactionalSession.NO_ASSOCIATION :
  +            throw new PERSIST_STORE( 5, org.omg.CORBA.CompletionStatus.COMPLETED_NO );
  +          case TransactionalSession.SUSPENDED :
  +          case TransactionalSession.ACTIVE :
  +            if ( _coordinator.hash_transaction() != transaction.hash_transaction() )
  +                throw new INVALID_TRANSACTION();
  +            if ( success == false )
  +            {
  +                _cache.clear();
  +                try
                   {
  -                    flush();
  +                    // rollback the transaction...
  +                    _datastore.rollback();
                   }
  -                break;
  -            case 3:
  -                // '\003'
  -                throw new BAD_OPERATION();
  +                catch ( java.lang.Exception ex )
  +                { }
  +            }
  +            else
  +            {
  +                flush();
  +            }
  +            break;
  +          case TransactionalSession.ENDING :
  +            throw new BAD_OPERATION();
           }
       }
   
   
       /**
  -     * 
  -     *
  -     * @return (doc-pending)
  +     * Return the transaction coordinator.
  +     * @return Coordinator
        */
       public Coordinator transaction()
       {
  @@ -242,7 +226,7 @@
   
   
       /**
  -     * 
  +     * Release the coordinator and association status associated to the session. 
        */
       public void remove_database_resource()
       {
  @@ -257,9 +241,9 @@
   
   
       /**
  -     * 
  +     * Connecto to the database.
        *
  -     * @return (doc-pending)
  +     * @return Connection the SQL connection
        */
       protected Connection connectToDatabase()
       {
  @@ -278,27 +262,23 @@
           {}
           try
           {
  -            byte byte0 = 0;
  +            int level = 0;
               switch ( _isolation_level )
               {
  -                case 0:
  -                    // '\0'
  -                    byte0 = 1;
  -                    break;
  -                case 1:
  -                    // '\001'
  -                    byte0 = 2;
  -                    break;
  -                case 2:
  -                    // '\002'
  -                    byte0 = 4;
  -                    break;
  -                case 3:
  -                    // '\003'
  -                    byte0 = 8;
  -                    break;
  +              case READ_UNCOMMITTED.value :
  +                level = java.sql.Connection.TRANSACTION_READ_UNCOMMITTED;
  +                break;
  +              case READ_COMMITTED.value :
  +                level = java.sql.Connection.TRANSACTION_READ_COMMITTED;
  +                break;
  +              case REPEATABLE_READ.value :
  +                level = java.sql.Connection.TRANSACTION_REPEATABLE_READ;
  +                break;
  +              case SERIALIZABLE.value :
  +                level = java.sql.Connection.TRANSACTION_SERIALIZABLE;
  +                break;
               }
  -            connection.setTransactionIsolation( byte0 );
  +            connection.setTransactionIsolation( level );
           }
           catch ( SQLException sqlexception )
           {
  @@ -309,7 +289,8 @@
   
   
       /**
  -     * 
  +     * Create a new transactional resource. The implementation registered 
  +     * a new database resource with the POA.
        *
        * @param coordinator 
        */
  
  
  
  1.3       +17 -16    jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/file/PersistentObject.java
  
  Index: PersistentObject.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/file/PersistentObject.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- PersistentObject.java	2 Feb 2002 01:19:59 -0000	1.2
  +++ PersistentObject.java	2 Feb 2002 04:02:10 -0000	1.3
  @@ -37,20 +37,6 @@
   
   
       /**
  -     * Writes the instance to an output stream.
  -     * @param outputstream the output stream
  -     */
  -    public abstract void write( OutputStream outputstream );
  -
  -
  -    /**
  -     * Reads the instance state in from a supplied input stream.
  -     * @param inputstream the input stream
  -     */
  -    public abstract void read( InputStream inputstream );
  -
  -
  -    /**
        * Flags a persistent object as embedded within another persistent object.
        * @param persistentobject the persistent object that this object is embedded within
        */
  @@ -60,7 +46,6 @@
       /**
        * Checks all state members for transient status and returns true if 
        * the persistent object should be flushed.
  -     *
        * @return boolean true if flush required
        */
       public abstract boolean checkForFlush();
  @@ -79,7 +64,23 @@
   
   
       /**
  -     * 
  +     * Invokes the embedded builder to build an embedded storage object.
        */
       public abstract void embeddedBuilder();
  +
  +    /**
  +     * Writes the instance to an output stream.
  +     * @param outputstream the output stream
  +     */
  +    public abstract void write( OutputStream outputstream );
  +
  +
  +    /**
  +     * Reads the instance state in from a supplied input stream.
  +     * @param inputstream the input stream
  +     */
  +    public abstract void read( InputStream inputstream );
  +
  +
  +
   }
  
  
  
  1.3       +3 -4      jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/file/TransactionalFileSession.java
  
  Index: TransactionalFileSession.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/enterprise/pss/src/java/org/apache/pss/connector/file/TransactionalFileSession.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- TransactionalFileSession.java	2 Feb 2002 01:19:59 -0000	1.2
  +++ TransactionalFileSession.java	2 Feb 2002 04:02:10 -0000	1.3
  @@ -31,7 +31,6 @@
   /**
    * Extended FileSession that adds support for association of 
    * transactional file resources.
  - *
    */
   public class TransactionalFileSession extends FileSession
            implements TransactionalSession
  @@ -69,13 +68,13 @@
       /**
        * Sets the baseInfo attribute of the TransactionalFileSession object
        *
  -     * @param fileconnector The new baseInfo value
  +     * @param connector the file connector
        * @param word0 The new baseInfo value
        * @param endofassociationcallback The new baseInfo value
        * @param word1 The new baseInfo value
        * @param aparameter The new baseInfo value
        */
  -    public void setBaseInfo( FileConnector fileconnector, short word0, EndOfAssociationCallback
endofassociationcallback, short word1, Parameter aparameter[] )
  +    public void setBaseInfo( FileConnector connector, short word0, EndOfAssociationCallback
endofassociationcallback, short word1, Parameter aparameter[] )
       {
           for ( int i = 0; i < aparameter.length; i++ )
           {
  @@ -85,7 +84,7 @@
               }
           }
   
  -        setCatalogInfo( fileconnector, word1, aparameter );
  +        setCatalogInfo( connector, word1, aparameter );
           _isolation_level = word0;
           _callback = endofassociationcallback;
       }
  
  
  

--
To unsubscribe, e-mail:   <mailto:avalon-cvs-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:avalon-cvs-help@jakarta.apache.org>


Mime
View raw message