Hi Tim...

I'll take a stab at trying to help with this. I have done a lot of work 
with dependent objects.

First, using Orion 1.4.0 I found that unidirectional dependents work as 
they should (when an EB has dependents). If you have an EB with dependents 
in a 1-to-1 relationship, Orion will create one table and map the fields of 
the dependent into the table for the EB. If you have a 1-ri-n relationship, 
Orion will create two tables.

I have found that Orion 1.4.0 does work with dependents in a unidirectional 
relationship properly. The error your reporting seems to indicate a 
descriptor error. Remember that Orion 1.4.0 has a bug in which you must 
define the CMR field also as a CMP field (in violation of all EJB 2.0 spec 
revisions).

I have also found that Orion 1.4.0 fasils to work properly with 
bidirectional dependent relationships. According to Bugzilla, this has been 
fixed in Orion 1.4.4 but I have not attempted to test this yet.

If you can tell us what version of Orion your using and post the relevant 
portion of your descriptor we can probably offer better assistence.

Jim


--On Friday, November 10, 2000 10:42 AM -0500 Tim Drury 
<[EMAIL PROTECTED]> wrote:

>
> I've gotten EJB->dep obj working for 1-to-1 and
> I've gotten EJB->EJB 1-to-1 and 1-to-many working.
> But for the life of me, I cannot get EJB->dep obj
> working for 1-to-many.
>
> The object model is:
>
> EdiFile(EJB) ---- 1 to N ----- EdiEnvelope (DO)
>
> This is a unidirectional relationship.  I think
> someone has been trying bi-directional with no
> luck.
>
> The problem manifests itself in two ways.  First,
> Orion throws an error when it tries to compiles
> the stubs/skeletons:
>
> class EdiEnvelope_Dependent0 is an abstract class.
> It can't be instantiated.
>
> (well this is obvious; dependent objects are supposed
> to be abstract).
>
> Second, the database table for my EJB doesn't contain
> _any_ reference to the dependent object.  BTW, the
> table for the dependent object looks fine.
>
> Thanks for any help,
> -tim
>
>
>
> Here is my dependent object:
>
> ------------------------------------------------------
> package com.tfc.ejb;
>
> import java.rmi.RemoteException;
> import javax.ejb.RemoveException;
>
> import java.util.Date;
> import java.util.Collection;
> import java.util.Iterator;
>
> public abstract class EdiEnvelope implements java.io.Serializable
> {
>    public abstract void setSenderIdQualifier(String s) throws
> RemoteException;
>    public abstract void setSenderId(String s) throws RemoteException;
>    public abstract void setReceiverIdQualifier(String s) throws
> RemoteException;
>    public abstract void setReceiverId(String s) throws RemoteException;
>    public abstract void setDate(Date d) throws RemoteException;
>    public abstract void setVersion(String s) throws RemoteException;
>    public abstract void setControlNumber(long l) throws RemoteException;
>    public abstract void setAck(boolean b) throws RemoteException;
>    public abstract void setNumberOfGroups(int i) throws RemoteException;
>    public abstract void setTransactionSets(Collection c) throws
> RemoteException;
>    public abstract void setId(String s) throws RemoteException;
>
>    public abstract String getSenderIdQualifier() throws RemoteException;
>    public abstract String getSenderId() throws RemoteException;
>    public abstract String getReceiverIdQualifier() throws RemoteException;
>    public abstract String getReceiverId() throws RemoteException;
>    public abstract Date getDate() throws RemoteException;
>    public abstract String getVersion() throws RemoteException;
>    public abstract long getControlNumber() throws RemoteException;
>    public abstract boolean getAck() throws RemoteException;
>    public abstract int getNumberOfGroups() throws RemoteException;
>    public abstract Collection getTransactionSets() throws RemoteException;
>    public abstract String getId() throws RemoteException;
>
>    public String ejbCreateEdiEnvelope() throws RemoteException
>    {
>       this.setId( (new java.rmi.server.UID()).toString() );
>       return null;
>    }
>    public void ejbPostCreateEdiEnvelope() { }
>    public abstract EdiEnvelope deepCopy();
>
> } // end EdiEnvelope
> ----------------------------------------------------------
>
> Here is my EJB:
>
> ----------------------------------------------------------
> package com.tfc.ejb;
>
> import javax.ejb.EntityBean;
> import javax.ejb.CreateException;
> import javax.ejb.RemoveException;
> import java.rmi.RemoteException;
> import javax.ejb.EntityContext;
>
> import java.util.Date;
> import java.util.Iterator;
> import java.util.Collection;
>
> public abstract class EdiFileEJB implements EntityBean
> {
>    private EntityContext ec;
>
>    // accessors
>
>    public void setEntityContext(EntityContext ec) { this.ec = ec; }
>    public void unsetEntityContext()               { ec = null; }
>
>    public abstract void setFilename(String s);
>    public abstract void setDateDownloaded(Date d);
>    public abstract void setEnvelopes(Collection c);
>    public abstract void setId(String s);
>
>    public abstract String getFilename();
>    public abstract Date getDateDownloaded();
>    public abstract Collection getEnvelopes();
>    public abstract String getId();
>
>    public long getNumberOfEnvelopes()
>    {
>       Collection c = this.getEnvelopes();
>       return c.size();
>    }
>    public long getEnvelopeControlNumber(int index) throws RemoteException
>    {
>       long controlNumber = 0;
>       Collection c = this.getEnvelopes();
>       try {
>          EdiEnvelope[] ea = (EdiEnvelope[])c.toArray();
>          EdiEnvelope e = ea[index];
>          controlNumber = e.getControlNumber();
>       } catch (Exception ex) {
>          throw new RemoteException("index out of bounds");
>       }
>       return controlNumber;
>    }
>
>    public void addEnvelope(String senderIdQualifier,
>                            String senderId,
>                            String receiverIdQualifier,
>                            String receiverId,
>                            Date date,
>                            String version,
>                            long controlNumber,
>                            boolean ack) throws RemoteException,
> CreateException
>    {
>       EdiEnvelope e = this.createEdiEnvelope();
>       e.setSenderIdQualifier(senderIdQualifier);
>       e.setSenderId(senderId);
>       e.setReceiverIdQualifier(receiverIdQualifier);
>       e.setReceiverId(receiverId);
>       e.setDate(date);
>       e.setVersion(version);
>       e.setControlNumber(controlNumber);
>       e.setAck(ack);
>       this.getEnvelopes().add(e);
>    }
>
>    public abstract EdiEnvelope createEdiEnvelope() throws CreateException;
>
>    public String ejbCreate()
>    {
>       this.setId( (new java.rmi.server.UID()).toString() );
>       return null;
>    }
>
>    public void ejbPostCreate() { }
>    public void ejbActivate() { }
>    public void ejbPassivate() { }
>    public void ejbLoad() { }
>    public void ejbStore() { }
>    public void ejbRemove() { }
> } // end EdiFileEJB
>
> ---------------------------------------------------
>
> and here are the relevent parts of ejb-jar.xml:
>
> ----------------------------------------------------
>
> ...
>        <entity>
>           <cmp-version>2.x</cmp-version>
>                 <description>EDI file</description>
>                 <ejb-name>EdiFileEJB</ejb-name>
>                 <home>com.tfc.ejb.EdiFileHome</home>
>                 <remote>com.tfc.ejb.EdiFile</remote>
>                 <ejb-class>com.tfc.ejb.EdiFileEJB</ejb-class>
>                 <persistence-type>Container</persistence-type>
>                 <reentrant>False</reentrant>
>                 <cmp-field>
>                   <field-name>filename</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>dateDownloaded</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>envelopes</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>id</field-name>
>                 </cmp-field>
>                 <primkey-field>id</primkey-field>
>                 <prim-key-class>java.lang.String</prim-key-class>
>        </entity>
> ...
>
>       <dependent>
>          <dependent-name>EdiEnvelope</dependent-name>
>          <dependent-class>com.tfc.ejb.EdiEnvelope</dependent-class>
>                 <cmp-field>
>                   <field-name>senderIdQualifier</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>senderId</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>receiverIdQualifier</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>receiverId</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>date</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>version</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>controlNumber</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>ack</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>transactionSets</field-name>
>                 </cmp-field>
>                 <cmp-field>
>                   <field-name>id</field-name>
>                 </cmp-field>
>           <prim-key-class>java.lang.String</prim-key-class>
>                 <primkey-field>id</primkey-field>
>        </dependent>
>
> ...
>
>       <ejb-relation>
>          <ejb-relation-name>EdiFile-EdiEnvelopes</ejb-relation-name>
>          <ejb-relationship-role>
>
> <ejb-relationship-role-name>EdiFile-has-EdiEnvelopes</ejb-relationship-ro
> le- name>
>             <multiplicity>one</multiplicity>
>             <role-source>
>                <ejb-name>EdiFileEJB</ejb-name>
>             </role-source>
>             <cmr-field>
>                <cmr-field-name>envelopes</cmr-field-name>
>                <cmr-field-type>java.util.Collection</cmr-field-type>
>             </cmr-field>
>          </ejb-relationship-role>
>          <ejb-relationship-role>
>
> <ejb-relationship-role-name>EdiEnvelopes-belongsto-EdiFile</ejb-relations
> hip -role-name>
>             <multiplicity>many</multiplicity>
>             <role-source>
>                <dependent-name>EdiEnvelope</dependent-name>
>             </role-source>
>             <cmr-field>
>                <cmr-field-name>ediFile</cmr-field-name>
>             </cmr-field>
>          </ejb-relationship-role>
>       </ejb-relation>
>





Reply via email to