You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by ha...@apache.org on 2001/10/31 00:15:47 UTC

cvs commit: jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport Reply.java UpdateReply.java

hammant     01/10/30 15:15:47

  Modified:    apps/db  build.xml
               apps/db/src/java/org/apache/avalon/db/actions Action.java
                        ActionException.java Create.java
               apps/db/src/java/org/apache/avalon/db/bcelactions
                        BCELCreateTable.java BCELInsertSingleValue.java
               apps/db/src/java/org/apache/avalon/db/bcelparser
                        BCELSQLParser.java
               apps/db/src/java/org/apache/avalon/db/server
                        AbstractDatabaseManager.java
               apps/db/src/java/org/apache/avalon/db/transport Reply.java
                        UpdateReply.java
  Added:       apps/db/src/java/org/apache/avalon/db/bcelactions
                        AbstractBCELAction.java
               apps/db/src/java/org/apache/avalon/db/bcelparser
                        GeneratedObjectClassLoader.java
  Log:
  ClassLoader for generated object exists now
  
  Revision  Changes    Path
  1.4       +4 -0      jakarta-avalon-cornerstone/apps/db/build.xml
  
  Index: build.xml
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/build.xml,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- build.xml	2001/10/30 20:25:55	1.3
  +++ build.xml	2001/10/30 23:15:47	1.4
  @@ -138,6 +138,10 @@
           <include name="avalon-db.jar"/>
         </lib>      
   
  +      <lib dir="lib">
  +        <include name="bcel.jar"/>
  +      </lib>
  +
         <zipfileset dir="${conf.dir}" fullpath="conf/keyStore">
           <include name="keystore"/>
         </zipfileset>   
  
  
  
  1.4       +3 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Action.java
  
  Index: Action.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Action.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Action.java	2001/10/30 20:06:32	1.3
  +++ Action.java	2001/10/30 23:15:47	1.4
  @@ -8,6 +8,7 @@
    */
   package org.apache.avalon.db.actions;
   
  +import org.apache.avalon.db.services.DatabasePersistor;
   
   
   /**
  @@ -15,8 +16,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version * $Revision: 1.3 $
  + * @version * $Revision: 1.4 $
    */
   public interface Action {
       void execute() throws ActionException;
  +    void setDatabasePersistor(DatabasePersistor databasePersistor);
   }
  
  
  
  1.2       +6 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/ActionException.java
  
  Index: ActionException.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/ActionException.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ActionException.java	2001/10/28 14:09:19	1.1
  +++ ActionException.java	2001/10/30 23:15:47	1.2
  @@ -15,6 +15,10 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class ActionException extends Exception {}
  +public class ActionException extends Exception {
  +    public ActionException(String reason) {
  +        super(reason);
  +    }
  +}
  
  
  
  1.3       +4 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Create.java
  
  Index: Create.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/actions/Create.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- Create.java	2001/10/28 20:57:39	1.2
  +++ Create.java	2001/10/30 23:15:47	1.3
  @@ -15,6 +15,8 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version * $Revision: 1.2 $
  + * @version * $Revision: 1.3 $
    */
  -public interface Create extends WriteAction {}
  +public interface Create extends WriteAction {
  +    int getRecordCount();
  +}
  
  
  
  1.2       +21 -3     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELCreateTable.java
  
  Index: BCELCreateTable.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELCreateTable.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BCELCreateTable.java	2001/10/30 17:45:14	1.1
  +++ BCELCreateTable.java	2001/10/30 23:15:47	1.2
  @@ -11,6 +11,9 @@
   
   
   import org.apache.avalon.db.actions.CreateTable;
  +import org.apache.avalon.db.actions.ActionException;
  +import org.apache.avalon.db.services.DatabasePersistor;
  +import org.apache.avalon.db.data.Table;
   import org.apache.bcel.classfile.JavaClass;
   
   
  @@ -19,12 +22,13 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class BCELCreateTable implements CreateTable {
  +public class BCELCreateTable extends AbstractBCELAction implements CreateTable {
   
       private JavaClass mPendingClass;
       private String mTableName;
  +    private int mRecordCount;
   
       /**
        * Constructor BCELCreateTable
  @@ -39,10 +43,24 @@
           mTableName = tableName;
       }
   
  +
  +
       /**
        * Method execute
        *
        *
        */
  -    public void execute() {}
  +    public void execute() throws ActionException {
  +        if (mDatabasePersistor.tableExists(mTableName)) {
  +            throw new ActionException("Table " + mTableName + " Already Exists");
  +        }
  +        byte[] bytes = mPendingClass.getBytes();
  +        mBCELSQLParser.addGeneratedClass(mTableName, bytes);
  +        Table table = (Table) mBCELSQLParser.getGeneratedInstance(mTableName);
  +        mDatabasePersistor.addTable(mTableName, table);
  +    }
  +
  +    public int getRecordCount() {
  +        return mRecordCount;
  +    }
   }
  
  
  
  1.2       +7 -2      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELInsertSingleValue.java
  
  Index: BCELInsertSingleValue.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/BCELInsertSingleValue.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BCELInsertSingleValue.java	2001/10/30 17:45:14	1.1
  +++ BCELInsertSingleValue.java	2001/10/30 23:15:47	1.2
  @@ -12,6 +12,7 @@
   
   import org.apache.avalon.db.actions.Insert;
   import org.apache.avalon.db.data.Table;
  +import org.apache.avalon.db.services.DatabasePersistor;
   import org.apache.bcel.classfile.JavaClass;
   
   import java.util.Vector;
  @@ -26,9 +27,9 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
  -public class BCELInsertSingleValue implements Insert {
  +public class BCELInsertSingleValue extends AbstractBCELAction implements Insert {
   
       private Vector mColumnNames;
       private Vector mColumnValues;
  @@ -48,6 +49,10 @@
           mTable = table;
           mColumnNames = columnNames;
           mColumnValues = columnValues;
  +    }
  +
  +    public void setDatabasePersistor(DatabasePersistor databasePersistor) {
  +        mDatabasePersistor = databasePersistor;
       }
   
       /**
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelactions/AbstractBCELAction.java
  
  Index: AbstractBCELAction.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.db.bcelactions;
  
  import org.apache.avalon.db.services.DatabasePersistor;
  import org.apache.avalon.db.bcelparser.GeneratedObjectClassLoader;
  import org.apache.avalon.db.bcelparser.BCELSQLParser;
  
  public class AbstractBCELAction {
  
      protected DatabasePersistor mDatabasePersistor;
      protected BCELSQLParser mBCELSQLParser;
  
      public void setDatabasePersistor(DatabasePersistor databasePersistor) {
          mDatabasePersistor = databasePersistor;
      }
      public void setBCELSQLParser(BCELSQLParser bcelSQLParser) {
          mBCELSQLParser = bcelSQLParser;
      }
  
  }
  
  
  
  1.2       +14 -2     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelparser/BCELSQLParser.java
  
  Index: BCELSQLParser.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelparser/BCELSQLParser.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- BCELSQLParser.java	2001/10/30 17:45:14	1.1
  +++ BCELSQLParser.java	2001/10/30 23:15:47	1.2
  @@ -50,13 +50,15 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class BCELSQLParser extends AbstractLoggable
           implements Block, SQLParser, Contextualizable, Composable, Configurable, Initializable {
   
       private DatabasePersistor mDatabasePersistor;
  +    private GeneratedObjectClassLoader mGenClassLoader = new GeneratedObjectClassLoader();
   
  +
       /**
        * Method createAction
        *
  @@ -234,7 +236,9 @@
               System.err.println(e);
           }
   
  -        return new BCELCreateTable(cg.getJavaClass(), table);
  +        CreateTable action = new BCELCreateTable(cg.getJavaClass(), table);
  +        action.setDatabasePersistor(mDatabasePersistor);
  +        return action;
       }
   
       private Type getType(String type) {
  @@ -322,6 +326,14 @@
   
       //private Insert createSelectInsert(Table table, String sql) {
       //}
  +
  +    public void addGeneratedClass(String name, byte[] bytes) {
  +        mGenClassLoader.addGeneratedClass(name, bytes);
  +    }
  +    public Object getGeneratedInstance(String name) {
  +        return mGenClassLoader.getGeneratedInstance(name);
  +    }
  +
   
       /**
        * Method main
  
  
  
  1.1                  jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/bcelparser/GeneratedObjectClassLoader.java
  
  Index: GeneratedObjectClassLoader.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.db.bcelparser;
  
  import java.net.URLClassLoader;
  import java.util.HashMap;
  
  public class GeneratedObjectClassLoader extends ClassLoader {
  
      private HashMap mGeneratedClasses = new HashMap();
  
      public Class findClass(String name) {
          Holder holder = (Holder) mGeneratedClasses.get(name);
          byte[] bytes = holder.getBytes();
          return defineClass(name, bytes, 0, bytes.length);
      }
  
      void addGeneratedClass(String name, byte[] bytes) {
          mGeneratedClasses.put(name, new Holder(bytes));
      }
  
      Object getGeneratedInstance(String name) {
          Class clazz = findClass(name);
          try {
              return clazz.newInstance();
          } catch (Throwable t) {
              return null;
          }
      }
  
      private class Holder {
          private byte[] ba;
          Holder(byte[] ba) {
              this.ba = ba;
          }
          byte[] getBytes() {
              return ba;
          }
      }
  }
  
  
  
  1.5       +10 -6     jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractDatabaseManager.java
  
  Index: AbstractDatabaseManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/server/AbstractDatabaseManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- AbstractDatabaseManager.java	2001/10/30 20:06:33	1.4
  +++ AbstractDatabaseManager.java	2001/10/30 23:15:47	1.5
  @@ -17,6 +17,7 @@
   import org.apache.avalon.db.transport.*;
   import org.apache.avalon.db.actions.Select;
   import org.apache.avalon.db.actions.ActionException;
  +import org.apache.avalon.db.actions.CreateTable;
   import org.apache.avalon.framework.logger.AbstractLoggable;
   import org.apache.avalon.framework.component.ComponentManager;
   import org.apache.avalon.framework.component.ComponentException;
  @@ -27,7 +28,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
   public abstract class AbstractDatabaseManager extends AbstractLoggable {
   
  @@ -72,10 +73,8 @@
                   return processSelectRequest((SelectRequest) request);
   
               case (Request.CREATETABLE) :
  +                return processCreateTableRequest((CreateTableRequest) request);
   
  -                //TODO
  -                break;
  -
               case (Request.INSERT) :
   
                   //TODO
  @@ -89,12 +88,17 @@
       }
   
       protected Reply processSelectRequest(SelectRequest selectRequest) throws ActionException {
  -
           SelectRequest optimizedSelectRequest =
               mSQLOptimizer.optimizeSelectRequest(selectRequest);
           Select select = mSQLParser.createSelectAction(optimizedSelectRequest);
  -
           select.execute();
           return new ResultSetReply(select.getRowSet());
       }
  +
  +    protected Reply processCreateTableRequest(CreateTableRequest createTableRequest) throws ActionException {
  +        CreateTable ct = mSQLParser.createCreateTableAction(createTableRequest);
  +        ct.execute();
  +        return new UpdateReply(ct.getRecordCount());
  +    }
  +
   }
  
  
  
  1.5       +2 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/Reply.java
  
  Index: Reply.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/Reply.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Reply.java	2001/10/29 15:18:16	1.4
  +++ Reply.java	2001/10/30 23:15:47	1.5
  @@ -18,7 +18,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.4 $
  + * @version $Revision: 1.5 $
    */
   public abstract class Reply implements Serializable {
   
  @@ -29,6 +29,7 @@
       public static final int READONLYREPLY = 14;
       public static final int TRANSACTIONISOLATIONREPLY = 15;
       public static final int CATALOGREPLY = 16;
  +    public static final int UPDATEREPLY = 17;
   
       private int mReplyCode;
   
  
  
  
  1.2       +1 -1      jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/UpdateReply.java
  
  Index: UpdateReply.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-cornerstone/apps/db/src/java/org/apache/avalon/db/transport/UpdateReply.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- UpdateReply.java	2001/10/29 15:18:16	1.1
  +++ UpdateReply.java	2001/10/30 23:15:47	1.2
  @@ -18,7 +18,7 @@
    *
    *
    * @author Paul Hammant <a href="mailto:Paul_Hammant@yahoo.com">Paul_Hammant@yahoo.com</a>
  - * @version $Revision: 1.1 $
  + * @version $Revision: 1.2 $
    */
   public class UpdateReply extends Reply {
   
  @@ -32,7 +32,7 @@
        *
        */
       public UpdateReply(int rc) {
  -        super(TRANSACTIONISOLATIONREPLY);
  +        super(UPDATEREPLY);
           mRowCount = rc;
       }
   
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>