On Wednesday 04 June 2003 10:20, Mahler Thomas wrote:
> Hi again,
>
> correct the collection attribute should be typed as DList.
>
> the respective collecion descriptor in repository.xml could look like
> follows:
> <collection-descriptor
>   name="myListAttribute"
>   collection-class="org.apache.ojb.odmg.collections.DListImpl"
>   element-class-ref="com.my.ListEntry"
> />

Hi Thomas,

I think I did what you sad but ...

This is a class of my user object:

package com.birosoft.comex.entity.user;

import java.io.Serializable;
import org.odmg.DList;
import org.apache.ojb.odmg.collections.DListImpl;

public class Korisnik implements Serializable
{

    private String korisnickoIme; // username (objects id)
    private String punoIme; // full name
    private DList vrstaPosla; // should contain a jobs which user can do

    public Korisnik() {
        this.setVrstaPosla(new DListImpl());
    }
    
    public String getKorisnickoIme() {        
        return korisnickoIme;
    } 

    public void setKorisnickoIme(String _korisnickoIme) {        
        korisnickoIme = _korisnickoIme;
    } 

    public String getPunoIme() {        
        return punoIme;
    } 

    public void setPunoIme(String _punoIme) {        
        punoIme = _punoIme;
    } 
    
    public DList getVrstaPosla()
    {
        return vrstaPosla;
    }

    public void setVrstaPosla(DList list)
    {
        vrstaPosla = list;
    }

    public String toString() {        
        return this.korisnickoIme+" <"+this.punoIme+">";
    } 

} // end Korisnik

This is a class of my job object:

package com.birosoft.comex.entity.user;

import java.io.Serializable;
import org.odmg.DList;
import org.apache.ojb.odmg.collections.DListImpl;

public class VrstaPosla implements Serializable {

    private int posao;    // objects id
    private String naziv; // name of job
    private DList korisnici; // should contains a users which belongs to it

    public VrstaPosla()
    {
        this.setKorisnici(new DListImpl());
    }
    
    public int getPosao() {        
        return posao;
    } 

    public void setPosao(int _posao) {        
        posao = _posao;
    } 
    
    public String getNaziv() {
        return naziv;
    }
    
    public void setNaziv(String _naziv) {
        naziv = _naziv;
    }
    
    public DList getKorisnici() 
    {
        return korisnici;
    }
    
    public void setKorisnici(DList list) 
    {
        korisnici = list;
    }

    public String toString() {
        return naziv;
    } 

} // end VrstaPosla

Repository for these class is presented here:

<!-- Definitions for com.birosoft.comex.entity.user.Korisnik -->
   <class-descriptor
          class="com.birosoft.comex.entity.user.Korisnik"
          table="DC_USERS"
   >
      <field-descriptor id="1"
         name="korisnickoIme"
         column="USERNAME"
         jdbc-type="VARCHAR"
         primarykey="true"
      />
      <field-descriptor id="2"
         name="punoIme"
         column="FULLNAME"
         jdbc-type="VARCHAR"
      />
      <collection-descriptor
         name="vrstaPosla"
         collection-class="org.apache.ojb.odmg.collections.DListImpl"
         element-class-ref="com.birosoft.comex.entity.user.VrstaPosla"
      />
   </class-descriptor>

<!-- Definitions for com.birosoft.comex.entity.user.VrstaPosla -->
   <class-descriptor
          class="com.birosoft.comex.entity.user.VrstaPosla"
          table="DC_JOBS"
   >
      <field-descriptor id="1"
         name="posao"
         column="JOB"
         jdbc-type="INTEGER"
         primarykey="true"
         autoincrement="true"
      />
      <field-descriptor id="2"
         name="naziv"
         column="JOBNAME"
         jdbc-type="VARCHAR"
      />
      <collection-descriptor
         name="korisnici"
         collection-class="org.apache.ojb.odmg.collections.DListImpl"
         element-class-ref="com.birosoft.comex.entity.user.Korisnik"
      />
   </class-descriptor>

I'm using next method inside my EJB to make a Job. For test reasons I made 
this method to look like this.

    /**
     * @ejb:interface-method
     */
    public VrstaPosla storeJob(String jobName, Korisnik user)
    {
        VrstaPosla vp = new VrstaPosla();
        vp.setNaziv(jobName);
        if (user != null)
        {
            DList l = vp.getKorisnici();
            l.add(user);
           vp.setKorisnici(l);
        }
        return (VrstaPosla) this.storeObject(vp);
    }

When I run this method in hsqldb properties file I got next content:

CREATE TABLE OJB_HL_SEQ(TABLENAME VARCHAR NOT NULL,FIELDNAME VARCHAR NOT 
NULL,MAX_KEY INTEGER,GRAB_SIZE INTEGER,VERSION 
INTEGER,UNIQUE(TABLENAME,FIELDNAME))
CREATE UNIQUE INDEX SYS_PK_OJB_HL_SEQ ON OJB_HL_SEQ(TABLENAME,FIELDNAME)
CREATE TABLE OJB_LOCKENTRY(OID_ VARCHAR NOT NULL,TX_ID VARCHAR NOT 
NULL,TIMESTAMP_ TIMESTAMP,ISOLATIONLEVEL INTEGER,LOCKTYPE 
INTEGER,UNIQUE(OID_,TX_ID))
CREATE UNIQUE INDEX SYS_PK_OJB_LOCKENTRY ON OJB_LOCKENTRY(OID_,TX_ID)
CREATE TABLE OJB_NRM(NAME VARCHAR NOT NULL PRIMARY KEY,OID_ LONGVARBINARY)
CREATE TABLE OJB_DLIST(ID INTEGER NOT NULL PRIMARY KEY,SIZE_ INTEGER)
CREATE TABLE OJB_DLIST_ENTRIES(ID INTEGER NOT NULL PRIMARY KEY,DLIST_ID 
INTEGER,POSITION_ INTEGER,OID_ LONGVARBINARY)
CREATE TABLE OJB_DSET(ID INTEGER NOT NULL PRIMARY KEY,SIZE_ INTEGER)
CREATE TABLE OJB_DSET_ENTRIES(ID INTEGER NOT NULL PRIMARY KEY,DLIST_ID 
INTEGER,POSITION_ INTEGER,OID_ LONGVARBINARY)
CREATE TABLE OJB_DMAP(ID INTEGER NOT NULL PRIMARY KEY,SIZE_ INTEGER)
CREATE TABLE OJB_DMAP_ENTRIES(ID INTEGER NOT NULL PRIMARY KEY,DMAP_ID 
INTEGER,KEY_OID LONGVARBINARY,VALUE_OID LONGVARBINARY)
CREATE TABLE DC_USERS(USERNAME VARCHAR NOT NULL PRIMARY KEY,FULLNAME VARCHAR)
CREATE TABLE DC_JOBS(JOB INTEGER NOT NULL PRIMARY KEY,JOBNAME VARCHAR NOT 
NULL)
CREATE TABLE DC_USERS_JOBS(USERNAME VARCHAR NOT NULL,JOB INTEGER NOT 
NULL,UNIQUE(USERNAME,JOB))
GRANT ALL ON CLASS "java.lang.Math" TO PUBLIC
GRANT ALL ON CLASS "org.hsqldb.Library" TO PUBLIC
CREATE USER SA PASSWORD "" ADMIN
CREATE ALIAS DAYNAME FOR "org.hsqldb.Library.dayname"
CREATE ALIAS SPACE FOR "org.hsqldb.Library.space"
CREATE ALIAS SUBSTRING FOR "org.hsqldb.Library.substring"
CREATE ALIAS SQRT FOR "java.lang.Math.sqrt"
CREATE ALIAS ABS FOR "java.lang.Math.abs"
CREATE ALIAS POWER FOR "java.lang.Math.pow"
CREATE ALIAS CHAR FOR "org.hsqldb.Library.character"
CREATE ALIAS CONCAT FOR "org.hsqldb.Library.concat"
CREATE ALIAS PI FOR "org.hsqldb.Library.pi"
CREATE ALIAS SECOND FOR "org.hsqldb.Library.second"
CREATE ALIAS TRUNCATE FOR "org.hsqldb.Library.truncate"
CREATE ALIAS MONTH FOR "org.hsqldb.Library.month"
CREATE ALIAS LOWER FOR "org.hsqldb.Library.lcase"
CREATE ALIAS ATAN2 FOR "java.lang.Math.atan2"
CREATE ALIAS REPEAT FOR "org.hsqldb.Library.repeat"
CREATE ALIAS DAYOFMONTH FOR "org.hsqldb.Library.dayofmonth"
CREATE ALIAS TAN FOR "java.lang.Math.tan"
CREATE ALIAS RADIANS FOR "java.lang.Math.toRadians"
CREATE ALIAS FLOOR FOR "java.lang.Math.floor"
CREATE ALIAS NOW FOR "org.hsqldb.Library.now"
CREATE ALIAS ACOS FOR "java.lang.Math.acos"
CREATE ALIAS DAYOFWEEK FOR "org.hsqldb.Library.dayofweek"
CREATE ALIAS CEILING FOR "java.lang.Math.ceil"
CREATE ALIAS DAYOFYEAR FOR "org.hsqldb.Library.dayofyear"
CREATE ALIAS LCASE FOR "org.hsqldb.Library.lcase"
CREATE ALIAS WEEK FOR "org.hsqldb.Library.week"
CREATE ALIAS SOUNDEX FOR "org.hsqldb.Library.soundex"
CREATE ALIAS ASIN FOR "java.lang.Math.asin"
CREATE ALIAS LOCATE FOR "org.hsqldb.Library.locate"
CREATE ALIAS EXP FOR "java.lang.Math.exp"
CREATE ALIAS MONTHNAME FOR "org.hsqldb.Library.monthname"
CREATE ALIAS YEAR FOR "org.hsqldb.Library.year"
CREATE ALIAS LEFT FOR "org.hsqldb.Library.left"
CREATE ALIAS ROUNDMAGIC FOR "org.hsqldb.Library.roundMagic"
CREATE ALIAS BITOR FOR "org.hsqldb.Library.bitor"
CREATE ALIAS LTRIM FOR "org.hsqldb.Library.ltrim"
CREATE ALIAS COT FOR "org.hsqldb.Library.cot"
CREATE ALIAS COS FOR "java.lang.Math.cos"
CREATE ALIAS MOD FOR "org.hsqldb.Library.mod"
CREATE ALIAS SIGN FOR "org.hsqldb.Library.sign"
CREATE ALIAS DEGREES FOR "java.lang.Math.toDegrees"
CREATE ALIAS LOG FOR "java.lang.Math.log"
CREATE ALIAS SIN FOR "java.lang.Math.sin"
CREATE ALIAS CURTIME FOR "org.hsqldb.Library.curtime"
CREATE ALIAS DIFFERENCE FOR "org.hsqldb.Library.difference"
CREATE ALIAS INSERT FOR "org.hsqldb.Library.insert"
CREATE ALIAS SUBSTR FOR "org.hsqldb.Library.substring"
CREATE ALIAS DATABASE FOR "org.hsqldb.Library.database"
CREATE ALIAS MINUTE FOR "org.hsqldb.Library.minute"
CREATE ALIAS HOUR FOR "org.hsqldb.Library.hour"
CREATE ALIAS IDENTITY FOR "org.hsqldb.Library.identity"
CREATE ALIAS QUARTER FOR "org.hsqldb.Library.quarter"
CREATE ALIAS CURDATE FOR "org.hsqldb.Library.curdate"
CREATE ALIAS BITAND FOR "org.hsqldb.Library.bitand"
CREATE ALIAS USER FOR "org.hsqldb.Library.user"
CREATE ALIAS UCASE FOR "org.hsqldb.Library.ucase"
CREATE ALIAS RTRIM FOR "org.hsqldb.Library.rtrim"
CREATE ALIAS LOG10 FOR "org.hsqldb.Library.log10"
CREATE ALIAS RIGHT FOR "org.hsqldb.Library.right"
CREATE ALIAS ATAN FOR "java.lang.Math.atan"
CREATE ALIAS UPPER FOR "org.hsqldb.Library.ucase"
CREATE ALIAS ASCII FOR "org.hsqldb.Library.ascii"
CREATE ALIAS RAND FOR "java.lang.Math.random"
CREATE ALIAS LENGTH FOR "org.hsqldb.Library.length"
CREATE ALIAS ROUND FOR "org.hsqldb.Library.round"
CREATE ALIAS REPLACE FOR "org.hsqldb.Library.replace"
INSERT INTO OJB_HL_SEQ VALUES('SEQ_OJB_DLIST','ID',480,20,24)
INSERT INTO OJB_HL_SEQ VALUES('SEQ_OJB_DLIST_ENTRIES','ID',780,20,39)
INSERT INTO OJB_HL_SEQ VALUES('SEQ_DC_JOBS','JOB',120,20,6)
INSERT INTO DC_USERS VALUES('mikeai','Miroslav')
/*C1*/CONNECT USER sa PASSWORD ""
/*C2*/CONNECT USER sa PASSWORD ""
SET AUTOCOMMIT FALSE
DELETE FROM OJB_HL_SEQ WHERE TABLENAME='SEQ_OJB_DLIST' AND FIELDNAME='ID' AND 
MAX_KEY=480 AND GRAB_SIZE=20 AND VERSION=24
INSERT INTO OJB_HL_SEQ VALUES('SEQ_OJB_DLIST','ID',500,20,25)
DELETE FROM OJB_HL_SEQ WHERE TABLENAME='SEQ_OJB_DLIST_ENTRIES' AND 
FIELDNAME='ID' AND MAX_KEY=780 AND GRAB_SIZE=20 AND VERSION=39
INSERT INTO OJB_HL_SEQ VALUES('SEQ_OJB_DLIST_ENTRIES','ID',800,20,40)
COMMIT
SET AUTOCOMMIT TRUE
SET AUTOCOMMIT FALSE
COMMIT
SET AUTOCOMMIT TRUE
SET AUTOCOMMIT FALSE
COMMIT
SET AUTOCOMMIT TRUE
SET AUTOCOMMIT FALSE
DELETE FROM OJB_HL_SEQ WHERE TABLENAME='SEQ_DC_JOBS' AND FIELDNAME='JOB' AND 
MAX_KEY=120 AND GRAB_SIZE=20 AND VERSION=6
INSERT INTO OJB_HL_SEQ VALUES('SEQ_DC_JOBS','JOB',140,20,7)
INSERT INTO DC_JOBS VALUES(121,'Administrator')
COMMIT
SET AUTOCOMMIT TRUE
SET AUTOCOMMIT FALSE
COMMIT
SET AUTOCOMMIT TRUE

Like you can see there is no any sql command to remember that Administrator 
job contain a user with username mikeai.

I can't make a user or job object within client app while their classes have a 
members of DList . Because of that I must call above method instead bellow 
method from client app.

    /**
     * @ejb:interface-method
     */
    public VrstaPosla storeJob(VrstaPosla object)
    {
        return (VrstaPosla) this.storeObject(object);
    }

I really can't imagine why is so hard to do. I think I followed all rules 
which I read about this.

-- 
Best regards,
Mickey          [EMAIL PROTECTED], [EMAIL PROTECTED]


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

Reply via email to