You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by ba...@apache.org on 2002/04/14 15:42:45 UTC

cvs commit: jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl AbstractStorage.java DBStorage.java

baliuka     02/04/14 06:42:45

  Modified:    simplestore/docs developers-guide.html users-guide.html
               simplestore/src/java/org/apache/commons/simplestore/persistence
                        PersistenceManager.java Spi.java Storage.java
                        TypeConverter.java
               simplestore/src/java/org/apache/commons/simplestore/persistence/impl
                        AbstractStorage.java DBStorage.java
  Log:
  
  
  Revision  Changes    Path
  1.4       +150 -5    jakarta-commons-sandbox/simplestore/docs/developers-guide.html
  
  Index: developers-guide.html
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/docs/developers-guide.html,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- developers-guide.html	3 Apr 2002 18:17:08 -0000	1.3
  +++ developers-guide.html	14 Apr 2002 13:42:45 -0000	1.4
  @@ -5,10 +5,10 @@
       <TITLE>SimpleStore Developers Guide</TITLE>
     <style>
   
  -   h3{color:navy};
  -   pre{color:navy};
  -   code{color:navy};
  -   
  +   h3{color:navy}
  +   pre{color:navy}
  +   code{color:navy}
  +   span{color:red}
     </style>
     </HEAD>
     <BODY link='navy' alink='navy' vlink='navy'>
  @@ -134,6 +134,38 @@
   Implementation must use <code>Cache</code> for reachability management and Identity. Single persistent
   object instance must be loaded with the same OID. OID object and persistent's class is unique pair.
   Use storege implementations as examples or base classes for custom storage implementations.
  +
  +<pre>
  +<b>public</b> java.util.Collection retrieve(Class clasz, int index, Object value)
  +                                                        throws StorageException{
  +        
  +        <b>final</b> Set objects = new HashSet();
  +        <b>final</b> MetaClass mClass =  context.getMetaClass(clasz);
  +        <b>final</b> String sql = <span>"SELECT "</span>+ mClass.getOIDName() + <span>" AS "</span> + INTERNAL_OID +
  +                              <span>", * FROM "</span> + mClass.getName() +
  +        <span>" WHERE "</span> + mClass.getPropertyName(index) + <span>"=?"</span>;
  +        <span style="color:green">//find uncommited objects first</span>
  +        java.util.Collection tObjects = context.getTransactionManager().getTransaction().getTransactionalObjects();
  +        <b>for</b>( java.util.Iterator i = tObjects.iterator(); i.hasNext(); ){
  +          MetaObject mo = (MetaObject)i.next();
  +           <b>if</b>( mo.getPersistentClass().equals(clasz) ){
  +           <b>if</b>( (value == <b>null</b>) && (mo.getProperty(index) == <b>null</b>) ){  
  +                    objects.add( mo.getObject() );
  +                    <b>continue</b>;
  +                  }
  +                 if( value != <b>null</b> && value.equals(mo.getProperty(index))  ){
  +                    objects.add( mo.getObject() );
  +                    <b>continue</b>;
  +                 }
  +           } 
  +        }
  +       <span style="color:green">//execute SQL statement</span>
  +        excecute( sql, <b>new</b> Object[]{value}, new QueryHandler(objects, clasz));
  +        
  +        <b>return</b> objects;
  +    }
  + </pre>   
  +
   </p>
   <a name='cache'><h3>Cache</h3></a>
   <p>
  @@ -156,6 +188,119 @@
    distributed objects, Object to XML mapping.
   SimpleStore use <a href='http://jakarta.apache.org/bcel'>BCEL</a>
    to enhance classes and implement Persistent interface.
  +
  + Generated code for <code>java.util.Vector</code>:
  + 
  +<pre>
  +<b>public boolean</b> removeElement(Object arg1)
  +Code(max_stack = 8, max_locals = 8, code_length = 112)
  +<hr>
  +0:    iconst_1
  +1:    anewarray         &lt;java.lang.Object&gt; (16)
  +4:    dup
  +5:    iconst_0
  +6:    aload_1
  +7:    aastore
  +8:    astore_2
  +9:    aload_0
  +10:   getfield          org.apache.java.util.Vector$$EnhancedBySimplestore$$.h Lorg/apache/commons/simplestore/tools/MethodInterceptor; (14)
  +13:   aload_0
  +14:   getstatic         org.apache.java.util.Vector$$EnhancedBySimplestore$$.METHOD_23 Ljava/lang/reflect/Method; (240)
  +17:   aload_2
  +18:   invokeinterface   org.apache.commons.simplestore.tools.MethodInterceptor.<b>beforeInvoke</b> (Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;)Ljava/lang/Object; (49)    4       0
  +23:   astore_3
  +24:   aconst_null
  +25:   astore            %4
  +27:   iconst_0
  +28:   istore            %5
  +30:   aconst_null
  +31:   astore            %6
  +33:   aload_0
  +34:   getfield          org.apache.java.util.Vector$$EnhancedBySimplestore$$.h Lorg/apache/commons/simplestore/tools/MethodInterceptor; (14)
  +37:   aload_0
  +38:   getstatic         org.apache.java.util.Vector$$EnhancedBySimplestore$$.METHOD_23 Ljava/lang/reflect/Method; (240)
  +41:   aload_2
  +42:   aload_3
  +43:   invokeinterface   org.apache.commons.simplestore.tools.MethodInterceptor.<b>invokeSuper</b> (Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;)Z (57)    5       0
  +48:   ifeq              <b>#73</b>
  +51:   iconst_1
  +52:   istore            %5
  +54:   new               &lt;java.lang.Boolean> (63)
  +57:   dup
  +58:   aload_0
  +59:   aload_1
  +60:   invokespecial     java.util.Vector.<b>removeElement</b> (Ljava/lang/Object;)Z (243)
  +63:   invokespecial     java.lang.Boolean.&lt;init&gt; (Z)V (70)
  +66:   astore            %4
  +68:   goto              <b>#73</b>
  +71:   astore            %6
  +73:   aload_0
  +74:   getfield          org.apache.java.util.Vector$$EnhancedBySimplestore$$.h Lorg/apache/commons/simplestore/tools/MethodInterceptor; (14)
  +77:   aload_0
  +78:   getstatic         org.apache.java.util.Vector$$EnhancedBySimplestore$$.METHOD_23 Ljava/lang/reflect/Method; (240)
  +81:   aload_2
  +82:   aload_3
  +83:   iload             %5
  +85:   aload             %4
  +87:   aload             %6
  +89:   invokeinterface   org.apache.commons.simplestore.tools.MethodInterceptor.<b>afterReturn</b> (Ljava/lang/Object;Ljava/lang/reflect/Method;[Ljava/lang/Object;Ljava/lang/Object;ZLjava/lang/Object;Ljava/lang/Throwable;)Ljava/lang/Object; (53)   8       0
  +94:   astore            %7
  +96:   aload             %7
  +98:   ifnonnull         <b>#103</b>
  +101:  iconst_0
  +102:  ireturn
  +103:  aload             %7
  +105:  checkcast         &lt;java.lang.Boolean&gt; (63)
  +108:  invokevirtual     java.lang.Boolean.<b>booleanValue</b> ()Z (74)
  +111:  ireturn
  +<hr>
  +Exception handler(s) = 
  +From    To      Handler Type
  +54      68      71      java.lang.Throwable(76)
  +</pre>
  +
  + Decompiled code:
  +<pre>
  +
  +<b> package </b> org.apache.java.util;
  +
  +<b> public class </b> Vector$$EnhancedBySimplestore$$ <b> extends </b>java.util.Vector{
  +
  + <b>org.apache.commons.simplestore.tools.MethodInterceptor</b> h;
  + //...
  + <b>static java.lang.reflect.Method </b> METHOD_23 =
  +                Vector.class.getMethod(<span style='color:red'>"removeElement"</span>,
  +                                           new Class[]{Object.class}
  +                                   ); 
  + //...
  +
  + <b>public boolean</b> removeElement(Object arg1){
  +
  +   Object args[] = { arg1 };
  +   Object retValFromBefore = h.<b>beforeInvoke</b>(this,METHOD_23,args);
  +   boolean invokedSuper = false;
  +   Throwable t = null;
  +   Object retValFromSuper = null;
  +
  +   if( h.<b>invokeSuper</b>(this,METHOD_23,args,retValFromBefore) ){
  +     invokedSuper = true;
  +   try{
  +
  +      retValFromSuper = new Boolean( <b>super</b>.removeElement(arg1) );
  +
  +    }catch(Throwable tl){
  +        t = tl
  +    }
  +
  +   }
  +
  +  return ((Boolean) h.<b>afterReturn</b>(this, METHOD_23, args,
  +                       retValFromBefore, invokedSuper, retValFromSuper,t )
  +            ).booleanValue();
  +
  +}
  +</pre>
  + This code will not compile it doe's not handle <code>Throwable</code>.
   </p>
   
   <a name='persistent'><h3>Persistent</h3></a>
  @@ -176,7 +321,7 @@
    <code>Persistent</code> returns this implementation.
   This interface is used by Storage implementation too.
    <pre>
  -public interface MetaObject extends Cloneable {
  +<b>public interface</b> MetaObject <b>extends</b> Cloneable {
   
       public Object <b>getOID</b>();
   
  
  
  
  1.8       +3 -3      jakarta-commons-sandbox/simplestore/docs/users-guide.html
  
  Index: users-guide.html
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/docs/users-guide.html,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- users-guide.html	3 Apr 2002 18:17:08 -0000	1.7
  +++ users-guide.html	14 Apr 2002 13:42:45 -0000	1.8
  @@ -3,9 +3,9 @@
   
   <title>SimpleStore Usere Guide</title>
     <style>
  -   h3{color:navy};
  -   pre{color:navy};
  -   code{color:navy};
  +   h3{color:navy}
  +   pre{color:navy}
  +   code{color:navy}
      
     </style>
   </head>
  
  
  
  1.4       +11 -1     jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/PersistenceManager.java
  
  Index: PersistenceManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/PersistenceManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- PersistenceManager.java	23 Mar 2002 14:54:52 -0000	1.3
  +++ PersistenceManager.java	14 Apr 2002 13:42:45 -0000	1.4
  @@ -72,7 +72,7 @@
    *
    * @author Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - * @version $Id: PersistenceManager.java,v 1.3 2002/03/23 14:54:52 baliuka Exp $
  + * @version $Id: PersistenceManager.java,v 1.4 2002/04/14 13:42:45 baliuka Exp $
    */
   public interface PersistenceManager {
   
  @@ -134,8 +134,18 @@
        */    
       public void removeInstance(Object pc);
   
  +    /** returns state of persistent object
  +     * @param pc Persistent
  +     * @return true if object is new and uncommited
  +     */    
       public boolean isNew(Object pc);
       
  +    /** returns state of persistent object,
  +     * deleted objects are not removed from cache,
  +     * Persistence manager can return deleted object if it exists in cache
  +     * @param pc Persistent
  +     * @return true if object deleted
  +     */    
       public boolean isDeleted(Object pc);
   }
   
  
  
  
  1.2       +5 -1      jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/Spi.java
  
  Index: Spi.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/Spi.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- Spi.java	1 Apr 2002 17:19:33 -0000	1.1
  +++ Spi.java	14 Apr 2002 13:42:45 -0000	1.2
  @@ -55,12 +55,16 @@
   package org.apache.commons.simplestore.persistence;
   
   /**
  + * This All service provider interfaces extend Spi
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: Spi.java,v 1.1 2002/04/01 17:19:33 baliuka Exp $
  + *@version    $Id: Spi.java,v 1.2 2002/04/14 13:42:45 baliuka Exp $
    */
   public interface Spi {
       
  +    /** Sets persitence context
  +     * @param context Configured context object
  +     */    
      public void setContext(Context context);
      
   }
  
  
  
  1.7       +25 -6     jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/Storage.java
  
  Index: Storage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/Storage.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- Storage.java	1 Apr 2002 17:08:09 -0000	1.6
  +++ Storage.java	14 Apr 2002 13:42:45 -0000	1.7
  @@ -63,21 +63,40 @@
    *
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: Storage.java,v 1.6 2002/04/01 17:08:09 baliuka Exp $
  + *@version    $Id: Storage.java,v 1.7 2002/04/14 13:42:45 baliuka Exp $
    */
   
   public interface Storage extends Spi{
   
  -    public void storeObject(MetaObject properties) throws StorageException;
  -
  -    public Object retrieveObject(Class clasz, Object id) throws StorageException;
  +    /** Used by factory to set context object
  +     * @param context Context */    
   
       public void setContext(Context context );
   
  +    /**
  +     * retrieves all objects of clasz type
  +     * @param clasz type
  +     * @throws StorageException on storage error
  +     * @return  set of persistent objects
  +     */    
       public Set retrieveAll(Class clasz) throws StorageException;
  -
  -    public void close() throws StorageException;
       
  +    /**
  +     * retrieve object by OID
  +     * @param clasz type
  +     * @param id OID
  +     * @throws StorageException on storage error
  +     * @return  Persistent object
  +     */    
  +    public Object retrieveObject(Class clasz, Object id) throws StorageException;
  +  
  +    /** retrieve object by property
  +     * @param clasz type
  +     * @param index property index
  +     * @param value property value
  +     * @throws StorageException on storage error
  +     * @return set of persistent objects
  +     */    
       public java.util.Collection retrieve(Class clasz, int index, Object value)throws StorageException;
       
   }
  
  
  
  1.6       +12 -1     jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/TypeConverter.java
  
  Index: TypeConverter.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/TypeConverter.java,v
  retrieving revision 1.5
  retrieving revision 1.6
  diff -u -r1.5 -r1.6
  --- TypeConverter.java	1 Apr 2002 17:08:09 -0000	1.5
  +++ TypeConverter.java	14 Apr 2002 13:42:45 -0000	1.6
  @@ -59,12 +59,23 @@
    *
    *@author     Gerhard Froehlich <a href="mailto:g-froehlich@gmx.de">
    *     g-froehlich@gmx.de</a>
  - *@version    $Id: TypeConverter.java,v 1.5 2002/04/01 17:08:09 baliuka Exp $
  + *@version    $Id: TypeConverter.java,v 1.6 2002/04/14 13:42:45 baliuka Exp $
    */
   
   public interface TypeConverter extends Spi{
            
  +    /** Conversts value from storage to app type
  +     * @param object value
  +     * @param clazz type
  +     * @return transformed object
  +     */    
        public Object toAppType(Object object , Class clazz);
  +     
  +    /** Conversts value to storage  type
  +     * @param object value
  +     * @param clazz type
  +     * @return transformed object
  +     */    
        
        public Object toStorageType(Object object , Class clazz);
        
  
  
  
  1.9       +3 -2      jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/AbstractStorage.java
  
  Index: AbstractStorage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/AbstractStorage.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- AbstractStorage.java	14 Mar 2002 19:42:22 -0000	1.8
  +++ AbstractStorage.java	14 Apr 2002 13:42:45 -0000	1.9
  @@ -69,7 +69,7 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: AbstractStorage.java,v 1.8 2002/03/14 19:42:22 baliuka Exp $
  + *@version    $Id: AbstractStorage.java,v 1.9 2002/04/14 13:42:45 baliuka Exp $
    */
   
   public abstract class AbstractStorage
  @@ -165,7 +165,8 @@
           }
           
       }
  -    
  +
  +    public abstract void storeObject(MetaObject properties) throws StorageException;  
       
       protected abstract void createObject(MetaObject properties) throws StorageException;
       
  
  
  
  1.17      +53 -48    jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java
  
  Index: DBStorage.java
  ===================================================================
  RCS file: /home/cvs/jakarta-commons-sandbox/simplestore/src/java/org/apache/commons/simplestore/persistence/impl/DBStorage.java,v
  retrieving revision 1.16
  retrieving revision 1.17
  diff -u -r1.16 -r1.17
  --- DBStorage.java	24 Mar 2002 06:27:35 -0000	1.16
  +++ DBStorage.java	14 Apr 2002 13:42:45 -0000	1.17
  @@ -84,12 +84,12 @@
   /**
    *@author     Juozas Baliuka <a href="mailto:baliuka@mwm.lt">
    *      baliuka@mwm.lt</a>
  - *@version    $Id: DBStorage.java,v 1.16 2002/03/24 06:27:35 baliuka Exp $
  + *@version    $Id: DBStorage.java,v 1.17 2002/04/14 13:42:45 baliuka Exp $
    */
   public class DBStorage extends AbstractStorage implements org.apache.commons.simplestore.tools.Constants {
       
       private final static String CONNECTION = "org.apache.commons.simplestore.jdbc.DBStorage.connection";
  -     private final static String INTERNAL_OID = "INTERNAL_OID";
  +    private final static String INTERNAL_OID = "INTERNAL_OID";
       //TODO : must be in MetaClass
       private static Properties procedures = new Properties();
       private ConnectionFactory ds;
  @@ -104,7 +104,7 @@
           this.ds = ds;
       }
       
  -
  +    
       public  Object toSQLType(Object object) {
           return context.getTypeConverter().toStorageType(object,null);
       }
  @@ -132,9 +132,9 @@
                           }
                       }
                   }
  -                if (statement.execute()) {
  +                if (statement.execute()) { // SELECT
                       rs = statement.getResultSet();
  -                } else {
  +                } else { // UPDATE
                       return statement.getUpdateCount();
                   }
                   
  @@ -165,7 +165,7 @@
                   }
               }
           } catch (SQLException se) {
  -            throw new StorageException(sql, se);
  +            throw new StorageException(sql, se.fillInStackTrace());
           }
           return result;
       }
  @@ -177,6 +177,7 @@
       
       public Object retrieveObject( final Class clasz, Object id ) throws StorageException {
           
  +        //try cahce first
           Persistent result = (Persistent) context.getCache().get(id);
           
           if (result != null) {
  @@ -197,15 +198,16 @@
                   
                   try {
                       if ( name.equalsIgnoreCase(mClass.getOIDName())) {
  +                        //OID is known
                           return;
                       }
                       
                       int propIndex =  mClass.getPropertyIndex( name );
  -                       props[ propIndex ] = value;
  +                    props[ propIndex ] = value;
                       
                   } catch (Throwable t) {
                       t.printStackTrace();
  -                    throw new StorageException(t.getMessage(), t);
  +                    throw new StorageException(t.getMessage(), t.fillInStackTrace());
                   }
               }
               
  @@ -225,14 +227,16 @@
           final MetaClass mClass =  context.getMetaClass(clasz);
           final String sql = "SELECT "+ mClass.getOIDName() + " AS " + INTERNAL_OID + ", * FROM " + mClass.getName();
           final Set objects = new HashSet();
  -      java.util.Collection tObjects = context.getTransactionManager().getTransaction().getTransactionalObjects();
  +        
  +        //find uncommited objects first
  +        java.util.Collection tObjects = context.getTransactionManager().getTransaction().getTransactionalObjects();
           for( java.util.Iterator i = tObjects.iterator(); i.hasNext(); ){
  -          MetaObject mo = (MetaObject)i.next();
  -          if( mo.getPersistentClass().equals(clasz) ){
  -              objects.add( mo.getObject() );
  -          }
  +            MetaObject mo = (MetaObject)i.next();
  +            if( mo.getPersistentClass().equals(clasz) ){
  +                objects.add( mo.getObject() );
  +            }
           }
  -    
  +        
           
           excecute( sql, null, new QueryHandler(objects, clasz));
           
  @@ -276,7 +280,7 @@
           values.add(properties.getOID());
           
           final String sql = "UPDATE " + name + " SET " + names;
  -            excecute( sql, values.toArray(), null);
  +        excecute( sql, values.toArray(), null);
           
       }
       
  @@ -289,9 +293,7 @@
                   connection.close();
               }
           } catch (Exception e) {
  -            
  -            e.printStackTrace();
  -            // TODO
  +            throw new StorageException(e.getMessage(), e.fillInStackTrace());
           }
       }
       
  @@ -331,6 +333,10 @@
           
       }
       
  +   /**
  +    * this method doe's not removes object from cache  
  +    */
  +    
       protected void removeObject(MetaObject obj) throws StorageException {
           
           final MetaClass mClass =  context.getMetaClass(obj.getPersistentClass());
  @@ -353,7 +359,7 @@
                   connection.close();
               }
           } catch (SQLException se) {
  -            throw new StorageException(se.getMessage(), se);
  +            throw new StorageException(se.getMessage(), se.fillInStackTrace());
           }
       }
       
  @@ -367,61 +373,60 @@
               }
           } catch (SQLException se) {
               
  -            throw new StorageException(se.getMessage(), se);
  +            throw new StorageException(se.getMessage(), se.fillInStackTrace());
           }
       }
       
       protected void internalBegin() throws StorageException {
  -        try {
  -            Connection connection = ds.getConnection();
  -            context.getTransactionManager().getTransaction().setAttribute(CONNECTION, connection);
  -            
  -        } catch (SQLException se) {
  -            throw new StorageException(se.getMessage(), se);
  -        }
  +        // do nothing
       }
       
       private Connection getConnection() {
  -        
  -        Connection connection = (Connection) context.getTransactionManager().getTransaction().getAttribute(CONNECTION);
  -        
  -        if (connection == null) {
  -              throw new IllegalTransactionStateException("Transaction not Started");
  +        try{
  +            Connection connection = (Connection) context.getTransactionManager().getTransaction().getAttribute(CONNECTION);
  +            
  +            if (connection == null) {
  +                // open new connection
  +                connection = ds.getConnection();
  +                context.getTransactionManager().getTransaction().setAttribute(CONNECTION, connection);
  +            }
  +            return connection;
  +            
  +        } catch (SQLException se) {
  +            throw new StorageException(se.getMessage(), se.fillInStackTrace());
           }
  -        
  -        return connection;
       }
       
       public java.util.Collection retrieve(Class clasz, int index, Object value)
  -                                                        throws StorageException{
  +    throws StorageException{
           
           final Set objects = new HashSet();
           final MetaClass mClass =  context.getMetaClass(clasz);
           final String sql = "SELECT "+ mClass.getOIDName() + " AS " + INTERNAL_OID +
  -                              ", * FROM " + mClass.getName() +
  +        ", * FROM " + mClass.getName() +
           " WHERE " + mClass.getPropertyName(index) + "=?";
  -        
  +        //find uncommited objects first
           java.util.Collection tObjects = context.getTransactionManager().getTransaction().getTransactionalObjects();
           for( java.util.Iterator i = tObjects.iterator(); i.hasNext(); ){
  -          MetaObject mo = (MetaObject)i.next();
  -           if( mo.getPersistentClass().equals(clasz) ){
  -           if( (value == null) && (mo.getProperty(index) == null) ){  
  +            MetaObject mo = (MetaObject)i.next();
  +            if( mo.getPersistentClass().equals(clasz) ){
  +                if( (value == null) && (mo.getProperty(index) == null) ){
                       objects.add( mo.getObject() );
                       continue;
  -                  }
  -                 if( value != null && value.equals(mo.getProperty(index))  ){
  +                }
  +                if( value != null && value.equals(mo.getProperty(index))  ){
                       objects.add( mo.getObject() );
                       continue;
  -                 }
  -           } 
  -                
  +                }
  +            }
  +            
           }
           
  -         
  +        
           excecute( sql, new Object[]{value}, new QueryHandler(objects, clasz));
           
           return objects;
  -       
  +        
           
       }
       
  @@ -441,7 +446,7 @@
               try {
                   name = name.toUpperCase();
                   if (index == 1) {
  -                    
  +                    //try to find in cache first
                       Persistent p = (Persistent) context.getCache().get(value);
                       if ( p != null ) {
                           props = null;
  
  
  

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