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]