Hi ½²³Õ¦Ü,

Why don't you simply use the ODMG DMap Implementation?
This will save you a lot of work!

Thomas



½²³Õ¦Ü wrote:
> Hi!
>     I try to use user-defined collections to implement 1:n associations. I have read 
> tutorial3.html, and 
> code a sample program almost like as ArticleCollection class. Its name 
> MapCollection1.class :
> <--------------------------------------------------------------------------------------->
> package businessclass;
> 
> import org.apache.ojb.broker.ManageableCollection;
> import java.util.*;
> 
> public class MapCollection1 extends HashMap implements ManageableCollection,
> {
> 
>     public void add(SimpleUserForMap pMember)
>     {
>         this.put(pMember.getOID(),pMember);
>     }
> 
>     /**
>      * add a single Object to the Collection. This method is
>      * used during reading Collection elements from the
>      * database. Thus it is is save to cast anObject
>      * to the underlying element type of the collection.
>      */
>     public void ojbAdd(java.lang.Object anObject)
>     {
>         if (anObject instanceof SimpleUserForMap){
>             add((SimpleUserForMap) anObject);
>         }
>     }
> 
>     /**
>      * adds a Collection to this collection. Used in reading
>      * Extents from the Database.
>      * Thus it is save to cast otherCollection to this.getClass().
>      */
>     public void ojbAddAll(
>             ManageableCollection otherCollection)
>     {
>         this.putAll(
>                 ((MapCollection1) otherCollection);
>     }
> 
>     /**
>      * returns an Iterator over all elements in the collection.
>      * Used during store and delete Operations.
>      */
>     public java.util.Iterator ojbIterator()
>     {
>         return this.values().iterator();
>     }
> }
> <--------------------------------------------------------------------------------------->
> 
> Then I declare two objects SimpleUserForMap and SimpleOrgForMap.
> SimpleOrgForMap has a MapCollection1 type property named "users" .Its elements are 
> SimpleUserForMap object.
> They are:
> 
> <--------------------------------------------------------------------------------------->
> package businessclass;
> 
> import persistentlayertest.PersistentObject;
> 
> public class SimpleUserForMap extends PersistentObject{
>     /** name*/
>     private String name = null;
> 
>     public String getName() {
>         return this.name;
>     }
> 
>     public void setName(String pNewValue) {
>         this.name = pNewValue;
>     }
> 
>     private String organizationOID = "";
> 
>     public String getOrganizationOID(){
>         return this.organizationOID;
>     }
>     public void setOrganizationOID(String pNewValue){
> 
>         this.organizationOID = pNewValue;
>     }
> 
>     private SimpleOrgForMap organization = null;
> 
>     public SimpleOrgForMap getOrganization(){
>         return this.organization;
>     }
> 
>     public void setOrganization(SimpleOrgForMap pNewValue){
>         this.organization = pNewValue;
>         setOrganizationOID(pNewValue.getOID());
>     }
> 
>     public SimpleUserForMap() {
>     }
> }
> <--------------------------------------------------------------------------------------->
> package businessclass;
> 
> import persistentlayertest.PersistentObject;
> import java.util.Collection;
> import java.util.Vector;
> import java.util.Map;
> import java.util.HashMap;
> import org.odmg.DMap;
> import org.apache.ojb.odmg.collections.DMapImpl;
> 
> public class SimpleOrgForMap extends PersistentObject{
>     private MapCollection1 users ;
> 
>     public void addUsers(SimpleUserForMap pUser){
>         System.out.println("***************Add Users For MapCollection.");
>         if (users == null)
>         {
>             users = new MapCollection1();
>         }
>         this.users.add(pUser);
>     }
>     public MapCollection1 getUsers(){
>         System.out.println("***************Get Users For MapCollection.");
>         return this.users;
>     }
> 
>     public void setUsers(MapCollection1 pMembers){
>         this.users = pMembers;
>     }
>     public SimpleOrgForMap() {
>     }
> }
> <--------------------------------------------------------------------------------------->
> 
> The repository is:
> <--------------------------------------------------------------------------------------->
> 
>    <class-descriptor class="businessclass.SimpleOrgForMap" table="SimpleOrg">
>       <field-descriptor id="1"
>          name="OID"
>          column="OID"
>          jdbc-type="CHAR"
>          primarykey="true"
>       />
>       
>       <collection-descriptor
>          name="users"
>          element-class-ref="businessclass.SimpleUserForMap"
>          collection-class="businessclass.MapCollection1"
>       >
>          <inverse-foreignkey field-id-ref="3"/>
>       </collection-descriptor>
>    </class-descriptor> 
> 
>    <class-descriptor class="businessclass.SimpleUserForMap" table="SimpleUser">
>       <field-descriptor id="1"
>          name="OID"
>          column="OID"
>          jdbc-type="CHAR"
>          primarykey="true"
>       /> 
>       <field-descriptor id="2"
>          name="name"
>          column="name"
>          jdbc-type="VARCHAR"
>       />
>       <field-descriptor id="3"
>          name="organizationOID"
>          column="organizationOID"
>          jdbc-type="CHAR"
>       />
>       <reference-descriptor
>          name="organization"
>          class-ref="businessclass.SimpleOrgForMap"
>       >
>          <foreignkey field-id-ref="3"/>
>       </reference-descriptor>
>    </class-descriptor>
> 
> <--------------------------------------------------------------------------------->
> 
> I new a SimpleOrgForMap object that there are several SimpleUserForMap elements in 
> its users property.
> When I presistent  SimpleOrgForMap , always raise the error message:
> 
> 11:40:27,125 INFO  [STDOUT] Locking obj [EMAIL PROTECTED] with lock mode 4 failed
> 11:40:27,140 INFO  [STDOUT] businessclass.MapCollection1
> 11:40:27,156 ERROR [STDERR] org.odmg.ClassNotPersistenceCapableException: 
> businessclass.MapCollection1
> 11:40:27,171 ERROR [STDERR]     at org.apache.ojb.odmg.ObjectEnvelope.manage(Unknown 
> Source)
> 11:40:27,187 ERROR [STDERR]     at org.apache.ojb.odmg.ObjectEnvelope.<init>(Unknown 
> Source)
> 11:40:27,203 ERROR [STDERR]     at 
> org.apache.ojb.odmg.TransactionImpl.register(Unknown Source)
> 11:40:27,218 ERROR [STDERR]     at org.apache.ojb.odmg.TransactionImpl.lock(Unknown 
> Source)
> 11:40:27,234 ERROR [STDERR]     at 
> org.apache.ojb.odmg.NarrowTransaction.lock(Unknown Source)
>                                         :
>                                         :
> What wrong with my code or repository setting? May I set OJB.properties some 
> attribute specially??
> 
> Thanks in advance
> Dogie Tsai
> 
> ps.I use odmg to persistent objects, and use it with JBoss3.0.4.
>    The 1:n associations can work well with Collection,List and Vector.
> 



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

Reply via email to