Hmmm...
OK, well I'm glad people looked at my examples I guess <Grin>. It would
have been nicer if they would work <Bigger grin>.
What version of Orion are you using?
Jim
--On Friday, November 10, 2000 2:54 PM -0500 Tim Drury
<[EMAIL PROTECTED]> wrote:
>
> I did put that in. In fact, it was your examples
> that I based all my development on :)
>
> I just don't see any differences between your
> descriptor file and mine.
>
> -tim
>
>
>> -----Original Message-----
>> From: Jim Archer [mailto:[EMAIL PROTECTED]]
>> Sent: Friday, November 10, 2000 2:31 PM
>> To: Tim Drury; Orion-Interest
>> Subject: RE: ejb2: EJB->DO, 1 to many problem
>>
>>
>> Hi Tim...
>>
>> No, I didn't mean in the relationship tag. Sorry for the
>> confusion. My
>> fault entirely. I meant in the <entity> tag.
>>
>> The descriptor I pasted below is an example of one which
>> fails to deploy on
>> Orion 1.4.0 because of a now fixed Orion bug (I have not yet
>> retested but
>> Bugzilla says its fixed in 1.4.4). However, if you exampne
>> the part that
>> defines the entity beans you'll see what I mean. There is a
>> comment you
>> can't miss.
>>
>> Let us know if it works and if not we'll look at other things.
>>
>> Jim
>>
>>
>> <?xml version="1.0"?>
>> <!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise
>> JavaBeans 2.0//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_2_0.dtd">
>> <ejb-jar>
>> <description>Test Sample EJB 2.0 EB</description>
>> <display-name>Person</display-name>
>> <enterprise-beans>
>> <entity>
>> <cmp-version>2.0</cmp-version>
>> <description>Person</description>
>>
>> <display-name>Test20CmpDoOM.eb.Person</display-name>
>> <ejb-name>Test20CmpDoOM.eb.PersonEJB</ejb-name>
>> <home>Test20CmpDoOM.eb.PersonHome</home>
>> <remote>Test20CmpDoOM.eb.Person</remote>
>>
>> <ejb-class>Test20CmpDoOM.eb.PersonEJB</ejb-class>
>> <persistence-type>Container</persistence-type>
>>
>> <prim-key-class>java.lang.String</prim-key-class>
>> <reentrant>True</reentrant>
>>
>> <!-- These lines should not be required
>> (according to the spec) -->
>> <!-- but without them deployment fails -->
>>
>> <cmp-field><field-name>addrDo</field-name></cmp-field>
>>
>> <cmp-field><field-name>emailDos</field-name></cmp-field>
>>
>>
>> <cmp-field><field-name>userId</field-name></cmp-field>
>>
>> <cmp-field><field-name>firstName</field-name></cmp-field>
>>
>> <cmp-field><field-name>lastName</field-name></cmp-field>
>>
>> <primkey-field>userId</primkey-field>
>> </entity>
>> </enterprise-beans>
>>
>> <dependents>
>> <dependent>
>> <dependent-name>addrDo</dependent-name>
>>
>> <dependent-class>Test20CmpDoOM.eb.AddrDo</dependent-class>
>>
>> <cmp-field><field-name>street</field-name></cmp-field>
>>
>> <cmp-field><field-name>city</field-name></cmp-field>
>>
>> <cmp-field><field-name>state</field-name></cmp-field>
>>
>> <cmp-field><field-name>zip</field-name></cmp-field>
>> </dependent>
>> <dependent>
>> <dependent-name>emailDo</dependent-name>
>>
>> <dependent-class>Test20CmpDoOM.eb.EmailDo</dependent-class>
>>
>> <cmp-field><field-name>email</field-name></cmp-field>
>>
>> <cmp-field><field-name>person</field-name></cmp-field>
>> </dependent>
>> </dependents>
>>
>> <relationships>
>> <ejb-relation>
>>
>> <ejb-relation-name>Person-Address</ejb-relation-name>
>> <ejb-relationship-role>
>>
>>
>> <ejb-relationship-role-name>Person-has-Address</ejb-relationsh
>> ip-role-name>
>> <multiplicity>one</multiplicity>
>>
>> <role-source><ejb-name>Test20CmpDoOM.eb.Person</ejb-name></rol
>> e-source>
>> <cmr-field>
>>
>> <cmr-field-name>addrDo</cmr-field-name>
>>
>> <cmr-field-type>Test20CmpDoOM.eb.AddrDo</cmr-field-type>
>> </cmr-field>
>> </ejb-relationship-role>
>> <ejb-relationship-role>
>>
>>
>> <ejb-relationship-role-name>Address-belongsto-User</ejb-relati
>> onship-role-
>> name>
>> <multiplicity>one</multiplicity>
>>
>> <role-source><dependent-name>addrDo</dependent-name></role-source>
>> </ejb-relationship-role>
>> </ejb-relation>
>>
>> <ejb-relation>
>>
>> <ejb-relation-name>Person-Email</ejb-relation-name>
>> <ejb-relationship-role>
>>
>>
>> <ejb-relationship-role-name>Person-has-Email</ejb-relationship
>> -role-name>
>> <multiplicity>one</multiplicity>
>>
>>
>> <role-source><ejb-name>Test20CmpDoOM.eb.PersonEJB</ejb-name></
>> role-source>
>> <cmr-field>
>>
>> <cmr-field-name>emailDos</cmr-field-name>
>>
>> <cmr-field-type>java.util.Collection</cmr-field-type>
>> </cmr-field>
>> </ejb-relationship-role>
>> <ejb-relationship-role>
>>
>>
>> <ejb-relationship-role-name>Email-belongsto-User</ejb-relation
>> ship-role-na
>> me>
>> <multiplicity>many</multiplicity>
>>
>> <role-source><dependent-name>emailDo</dependent-name></role-source>
>> <!-- -->
>> <cmr-field>
>>
>> <cmr-field-name>person</cmr-field-name>
>>
>> <cmr-field-type>Test20CmpDoOM.eb.Person</cmr-field-type>
>> </cmr-field>
>> <!-- -->
>> </ejb-relationship-role>
>> </ejb-relation>
>> </relationships>
>>
>> <assembly-descriptor>
>> <security-role>
>> <description>Users</description>
>> <role-name>users</role-name>
>> </security-role>
>> </assembly-descriptor>
>> </ejb-jar>
>>
>>
>> --On Friday, November 10, 2000 2:19 PM -0500 Tim Drury
>> <[EMAIL PROTECTED]> wrote:
>>
>> >
>> > Jim,
>> >
>> > Thanks for the quick response. I'm using 1.4 and I've
>> > gotten 1:1 to work. I think my problem may be what
>> > you mentioned about a non-standard CMR field in
>> > ejb-jar.xml. What are you talking about exactly?
>> > In the <relationship> tag? Here is my relationship
>> > area again:
>> >
>> > <ejb-relation>
>> > <ejb-relation-name>EdiFile-EdiEnvelopes</ejb-relation-name>
>> > <ejb-relationship-role>
>> >
>> >
>> <ejb-relationship-role-name>EdiFile-has-EdiEnvelopes</ejb-rela
>> tionship-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</ej
>> b-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>
>> >
>> >
>> >> -----Original Message-----
>> >> From: Jim Archer [mailto:[EMAIL PROTECTED]]
>> >> Sent: Friday, November 10, 2000 1:14 PM
>> >> To: Orion-Interest
>> >> Cc: Tim Drury
>> >> Subject: Re: ejb2: EJB->DO, 1 to many problem
>> >>
>> >>
>> >> 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-rela
>> >> tionship-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</ej
>> >> b-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>
>> >> >
>> >>
>> >>
>> >>
>> >>
>>
>>
>>
>>