On Tuesday, October 14, 2003, at 10:29 AM, [EMAIL PROTECTED] wrote:
I bet this is the problem.  You'd probably better
use one of the managed collections.  Could you please
check by outputting xxx.getClass().getName() somewhere?


On retrieved collections it uses:


.org.apache.ojb.broker.util.collections.RemovalAwareCollection
F
Time: 2.508


If 'one' is a non-manageable collection, such as Vector,
then 'one' does not get marked as dirty, so it won't be
stored.

(Just a guess, maybe someelse can tell you more exactly.)


On new objects it is an ArrayList, on retrieved objects a RemovalAwareCollection


I tried changing the collection-class to org.apache.ojb.broker.util.collections.ManageableArrayList but have the same results:

    public void testRequestFriend() throws Exception
    {
        Unit unit = Unit.begin();
        one = UserRepository.findById(one.getId(), unit);
        two = UserRepository.findById(two.getId(), unit);
        System.err.println(one.getFriends().getClass().getName());
        one.addFriend(two);
        unit.commit();

TestTools.clearCache();

        unit = Unit.begin();
        one = UserRepository.findById(one.getId(), unit);
        List friends = one.getFriends();
        System.err.println(friends.getClass().getName());
        Assert.assertEquals(1, one.getFriends().size());
        unit.commit();
    }

-------------------------
org.apache.ojb.broker.util.collections.ManageableArrayList
org.apache.ojb.broker.util.collections.ManageableArrayList
F
Time: 2.732
There was 1 failure:
1) testRequestFriend(org.skife.kim.model.TestUserRelations)junit.framework. AssertionFailedError: expected:<1> but was:<0>
at org.skife.kim.model.TestUserRelations.testRequestFriend(TestUserRelation s.java:79)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav a:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor Impl.java:25)
at com.intellij.rt.execution.junit.TextTestRunner.main(TextTestRunner.java: 12)


FAILURES!!!
Tests run: 1,  Failures: 1,  Errors: 0

Hmm....

Using the PB API to do the same thing...

public void testRequestFriendPB() throws Exception
{
PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();


        Criteria tomCrit = new Criteria();
        tomCrit.addEqualTo("id", one.getId());
        Query tomQuery = new QueryByCriteria(User.class, tomCrit);
        User tom = (User) broker.getObjectByQuery(tomQuery);

        Criteria mikeCrit = new Criteria();
        mikeCrit.addEqualTo("id", one.getId());
        Query mikeQuery = new QueryByCriteria(User.class, mikeCrit);
        User mike = (User) broker.getObjectByQuery(mikeQuery);

        Assert.assertNotNull(tom);
        Assert.assertNotNull(mike);

        tom.addFriend(mike);
        broker.store(tom);

broker.clearCache();

User tim = (User) broker.getObjectByQuery(tomQuery);

Assert.assertEquals(1, tim.getFriends().size());

        broker.close();
    }

Succeeds.

ODMG Implementation...

    public void testRequestFriendODMG() throws Exception
    {
        Implementation odmg = OJB.getInstance();
        Database db = odmg.newDatabase();
        db.open("default", Database.OPEN_READ_WRITE);

Transaction tx = odmg.newTransaction();
tx.begin();
OQLQuery tomQuery = odmg.newOQLQuery();
tomQuery.create("select tom from " + User.class.getName() + " where id = $1");
tomQuery.bind(one.getId());
DList results = (DList) tomQuery.execute();
User tom = (User) results.iterator().next();


OQLQuery mikeQuery = odmg.newOQLQuery();
mikeQuery.create("select mike from " + User.class.getName() + " where id = $1");
mikeQuery.bind(two.getId());
results = (DList) mikeQuery.execute();
User mike = (User) results.iterator().next();


        tom.addFriend(mike);
        tx.commit();

PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
broker.clearCache();
broker.close();


tx = odmg.newTransaction();
tx.begin();
OQLQuery timQuery = odmg.newOQLQuery();
timQuery.create("select tom from " + User.class.getName() + " where id = $1");
timQuery.bind(one.getId());
results = (DList) timQuery.execute();
User tim = (User) results.iterator().next();


Assert.assertEquals(1, tim.getFriends().size());

        tx.commit();
    }

Also succeeds.

The explicit OTM implementation..

public void testRequestFriendOTM() throws Exception
{
OTMConnection conn = SimpleKit.getInstance().acquireConnection(PersistenceBrokerFactory.getDe faultKey());
org.apache.ojb.otm.core.Transaction tx = SimpleKit.getInstance().getTransaction(conn);
tx.begin();
EnhancedOQLQuery tomQuery = conn.newOQLQuery();
tomQuery.create("select tom from " + User.class.getName() + " where id = $1");
tomQuery.bind(one.getId());


EnhancedOQLQuery mikeQuery = conn.newOQLQuery();
mikeQuery.create("select tom from " + User.class.getName() + " where id = $1");
mikeQuery.bind(two.getId());


        User tom = (User) conn.getIteratorByOQLQuery(tomQuery).next();
        User mike = (User) conn.getIteratorByOQLQuery(mikeQuery).next();

        tom.addFriend(mike);
        tx.commit();
        conn.close();

PersistenceBroker broker = PersistenceBrokerFactory.defaultPersistenceBroker();
broker.clearCache();
broker.close();


conn = SimpleKit.getInstance().acquireConnection(PersistenceBrokerFactory.getDe faultKey());
tx = SimpleKit.getInstance().getTransaction(conn);
tx.begin();
EnhancedOQLQuery timQuery = conn.newOQLQuery();
timQuery.create("select tim from " + User.class.getName() + " where id = $1");
timQuery.bind(one.getId());


User tim = (User) conn.getIteratorByOQLQuery(timQuery).next();

Assert.assertEquals(1, tim.getFriends().size());

        tx.commit();
        conn.close();
    }

fails.



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Reply via email to