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]
