db-ojb-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Armin Waibel <arm...@apache.org>
Subject Re: org.odmg.LockNotGrantedException
Date Tue, 14 Jun 2005 13:47:04 GMT
Hi again,

Johnson wrote:
> Hi!
> 
> tks your help I use OJB in cocoon tmocat here's the code.
> this code is work on 1.0.1 but not work in 1.0.3.
> 

I can't reproduce the problem with latest from CVS (OJB_1_0_RELEASE
branch). I wrote two tests simulating the problem, first test doesn't
find a query object and lock the bean object, second test return a dummy
object in query. Both tests pass.

I attached the tests below (the test can be found in CVS OJB_1_0_RELEASE
branch, LockingTest#testWrite_X). Are these tests different from your
problem? Could you locally setup a test case to reproduce the problem?
Are you able to test upcoming OJB 1.0.4 from CVS?

regards,
Armin




public void testWrite_1() throws Exception
{
    String name = "testWrite_1_" + System.currentTimeMillis();
    LockObject bean = new LockObject(name + "_bean_dummy");

    performCocoonSaveMethod(bean.getId(), bean);

    Transaction tx = odmg1.newTransaction();
    tx.begin();
    OQLQuery query = odmg1.newOQLQuery();
    query.create("select objs from " + LockObject.class.getName() + "
where value = $1");
    query.bind(name + "_bean_dummy");
    List result = (List) query.execute();
    tx.commit();
    assertEquals(1, result.size());
    LockObject tmp = (LockObject) result.get(0);
    assertEquals(bean, tmp);
}

public void testWrite_2() throws Exception
{
    String name = "testWrite_2_" + System.currentTimeMillis();

    Transaction tx = odmg1.newTransaction();
    tx.begin();
    LockObject tmp = new LockObject(name + "_temp");
    db1.makePersistent(tmp);
    tx.commit();

    LockObject bean = new LockObject(name + "_bean_dummy");
    bean.setId(tmp.getId());

    performCocoonSaveMethod(tmp.getId(), bean);

    tx = odmg1.newTransaction();
    tx.begin();
    OQLQuery query = odmg1.newOQLQuery();
    query.create("select objs from " + LockObject.class.getName() + "
where value = $1");
    query.bind(name + "_bean_dummy");
    List result = (List) query.execute();
    tx.commit();
    assertEquals(1, result.size());
    tmp = (LockObject) result.get(0);
    assertEquals(bean, tmp);
}

private LockObject performCocoonSaveMethod(Integer testId, LockObject
bean) throws Exception
{
    LockObject toBeEdited = null;
    Transaction tx = odmg1.newTransaction();
    tx.begin();
    OQLQuery query = odmg1.newOQLQuery();
    query.create("select objs from " + LockObject.class.getName() + "
where id = $1");
    query.bind(testId);
    List result = (List) query.execute();
    if(result.size() != 0)
    {
        toBeEdited = (LockObject) result.get(0);
        if(toBeEdited != null)
        {
            try
            {
                PropertyUtils.copyProperties(toBeEdited, bean);
                tx.commit();
            }
            catch(Exception e)
            {
                e.printStackTrace();
                fail("Unexpected exception: " + e.getMessage());
            }
            tx.begin();
            tx.lock(toBeEdited, Transaction.UPGRADE);
            tx.commit();
        }
        else
        {
            tx.abort();
        }
    }
    else
    {
        try
        {
            tx.lock(bean, Transaction.WRITE);
            tx.commit();
        }
        catch(Exception e)
        {
            e.printStackTrace();
            fail("Unexpected exception: " + e.getMessage());
        }
    }
    return toBeEdited;
}

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


Mime
View raw message