You are viewing a plain text version of this content. The canonical link for it is here.
Posted to ojb-dev@db.apache.org by ar...@apache.org on 2003/09/20 16:24:44 UTC

cvs commit: db-ojb/src/java/org/apache/ojb/broker/util/sequence SequenceManagerNativeImpl.java

arminw      2003/09/20 07:24:44

  Modified:    src/test/org/apache/ojb/broker/sequence
                        NativeIdentifierTest.java
               src/java/org/apache/ojb/broker/util/sequence
                        SequenceManagerNativeImpl.java
  Log:
  - add test case using odmg-api to store objects
  - add workaround for storing problem using odmg-api
  
  Revision  Changes    Path
  1.8       +36 -3     db-ojb/src/test/org/apache/ojb/broker/sequence/NativeIdentifierTest.java
  
  Index: NativeIdentifierTest.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/test/org/apache/ojb/broker/sequence/NativeIdentifierTest.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- NativeIdentifierTest.java	5 Aug 2003 07:21:26 -0000	1.7
  +++ NativeIdentifierTest.java	20 Sep 2003 14:24:44 -0000	1.8
  @@ -5,6 +5,7 @@
   import org.apache.ojb.broker.Identity;
   import org.apache.ojb.broker.PersistenceBroker;
   import org.apache.ojb.broker.PersistenceBrokerFactory;
  +import org.apache.ojb.broker.TestHelper;
   import org.apache.ojb.broker.metadata.MetadataManager;
   import org.apache.ojb.broker.metadata.SequenceDescriptor;
   import org.apache.ojb.broker.platforms.PlatformHsqldbImpl;
  @@ -14,6 +15,10 @@
   import org.apache.ojb.broker.query.QueryByCriteria;
   import org.apache.ojb.broker.query.QueryFactory;
   import org.apache.ojb.broker.util.sequence.SequenceManagerNativeImpl;
  +import org.apache.ojb.odmg.OJB;
  +import org.odmg.Implementation;
  +import org.odmg.Database;
  +import org.odmg.Transaction;
   
   import java.io.Serializable;
   import java.sql.Connection;
  @@ -82,7 +87,6 @@
           if (skipTest()) return;
           Connection con;
           Statement stmt;
  -        boolean needTableCreation = false;
   
           try
           {
  @@ -150,7 +154,6 @@
   
           Connection con;
           Statement stmt;
  -        boolean needTableCreation = false;
           PersistenceBroker pb = PersistenceBrokerFactory.defaultPersistenceBroker();
           try
           {
  @@ -199,6 +202,36 @@
           broker.store(obj_3);
   //        System.out.println("obj_3: "+obj_3);
           broker.commitTransaction();
  +
  +        Criteria crit = new Criteria();
  +        crit.addEqualTo("name", name);
  +        QueryByCriteria query = QueryFactory.newQuery(SMNativeObject.class, crit);
  +        int result = broker.getCount(query);
  +        assertEquals("Not all objects created", 3, result);
  +        assertNotNull(obj_1.getIdentifier());
  +    }
  +
  +    public void testSimpleInsertODMG() throws Exception
  +    {
  +        long timestamp = (long) (System.currentTimeMillis() * Math.random());
  +        String name = "testSimpleInsert_" + timestamp;
  +
  +        if (skipTest()) return;
  +
  +        SMNativeObject obj_1 = new SMNativeObject(null, name);
  +        SMNativeObject obj_2 = new SMNativeObject(null, name);
  +        SMNativeObject obj_3 = new SMNativeObject(null, name);
  +
  +        Implementation odmg = OJB.getInstance();
  +        Database db = odmg.newDatabase();
  +        db.open(TestHelper.DEF_DATABASE_NAME, Database.OPEN_READ_WRITE);
  +
  +        Transaction tx = odmg.newTransaction();
  +        tx.begin();
  +        tx.lock(obj_1, Transaction.WRITE);
  +        tx.lock(obj_2, Transaction.WRITE);
  +        tx.lock(obj_3, Transaction.WRITE);
  +        tx.commit();
   
           Criteria crit = new Criteria();
           crit.addEqualTo("name", name);
  
  
  
  1.8       +9 -5      db-ojb/src/java/org/apache/ojb/broker/util/sequence/SequenceManagerNativeImpl.java
  
  Index: SequenceManagerNativeImpl.java
  ===================================================================
  RCS file: /home/cvs/db-ojb/src/java/org/apache/ojb/broker/util/sequence/SequenceManagerNativeImpl.java,v
  retrieving revision 1.7
  retrieving revision 1.8
  diff -u -r1.7 -r1.8
  --- SequenceManagerNativeImpl.java	13 Aug 2003 18:16:10 -0000	1.7
  +++ SequenceManagerNativeImpl.java	20 Sep 2003 14:24:44 -0000	1.8
  @@ -116,18 +116,18 @@
   public class SequenceManagerNativeImpl extends AbstractSequenceManager
   {
       private Log log = LogFactory.getLog(SequenceManagerNativeImpl.class);
  +
       /*
        TODO:
        1. Find a better solution for this problem
        We need this dummy field to return a negative long value
        on getUniqueLong(...) call. If we return always the same
        value, the resulting Identity object was found on cache.
  -     arminw:
  -     seems to work when always -1 was returned
   
        2. Problem is that generated oid (by Identity column)
        must not begin with 0.
        */
  +    private long tempKey = -1;
   
       public SequenceManagerNativeImpl(PersistenceBroker broker)
       {
  @@ -238,7 +238,7 @@
           else
           {
               throw new SequenceManagerException(
  -                    "Field does not support autoincrement, please check repository: " + fd);
  +                    "No autoincrement field declared, please check repository for " + cld);
           }
           return newId;
       }
  @@ -265,6 +265,10 @@
        */
       protected long getUniqueLong(FieldDescriptor field) throws SequenceManagerException
       {
  -        return -1;
  +        /*
  +        workaround for locking problems of new objects
  +        We need unique 'dummy keys' for new objects before storing
  +        */
  +        return --tempKey;
       }
   }
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: ojb-dev-unsubscribe@db.apache.org
For additional commands, e-mail: ojb-dev-help@db.apache.org