I've tried everything to get this to work, and it's real close to doing
so.  The N updates mostly.  However, the old values are left in the db.
 They don't seem to appear in the constituted object, but that may be a
cache problem.. Here's the setup:
 <!--
   collection-class="java.util.Vector"   
collection-class="org.apache.ojb.broker.util.collections.RemovalAwareCollection"
                -->
<collection-descriptor
        name="roles"
        element-class-ref="virtual_village.membership.Role"
        collection-class="org.apache.ojb.odmg.collections.DListImpl"
        >
                <inverse-foreignkey field-ref="memberOID"/>
</collection-descriptor>

In the 1 class the roles are defined as RemovalAware, and also has been
DListImpl as well.
The actual code doing the saving is:

        public void updateMember(Member updatedMember) throws
MembershipDAOSysException
        {
                cat.debug( "Update member " + updatedMember);
                
                TransactionImpl tx = null;
                // 3. open transaction
                tx = (TransactionImpl) odmg.newTransaction();
                //tx =  odmg.newTransaction();
                
                try
                {
                        Member staleMember = findByOID( updatedMember.getOid());
                        
                        cat.debug( "staleMember   " + staleMember);
                        cat.debug( "updatedMember " + updatedMember);
                                        
                        tx.begin();
                        PersistenceBroker pb = tx.getBroker();
                        pb.removeFromCache( staleMember);
                        
                        
                        // 4. acquire write lock on new object
                        tx.lock(staleMember, Transaction.WRITE);
                        BeanUtils.copyProperties(updatedMember, staleMember);
                        cat.debug( "after modification " + staleMember);
                        
                        // 5. commit transaction
                        tx.commit();
                }catch( Throwable t)
                {
                        cat.error( "Error trying to update member " + updatedMember);
                        throw new MembershipDAOSysException( "Error trying to update 
member
" + updatedMember, t);
                }
        }

The calling routine looks like:
Member member = createMember();
                        member.addRoles( createRoles( 5));
                        testDAO.addMember( member);
                        System.out.println( "Added: " + member);
                        Member addedMember = testDAO.findByOID( member.getOid());
                        assertTrue("The member and added member are not the same.", 
isSame(
member, addedMember));
                        addedMember.setRoles( createRoles( 3));
                        testDAO.updateMember( addedMember);

Could someone please point out what I'm doing wrong.  



=====
Grim Shieldsson (James A Barrows)
Acting Chieftain of Clan StormWolf
Barbarian Freehold Alliance
 "The real destroyer of the liberties of the people is he who spreads among them 
bounties, donations and benefits." 
--Plutarch

__________________________________
Do you Yahoo!?
Yahoo! SiteBuilder - Free, easy-to-use web site design software
http://sitebuilder.yahoo.com

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

Reply via email to