org.jboss.deployment.DeploymentException: No ejb-relationshi
troypoppe Apr 15, 2004 4:40 PMI am developing a set of CMP EJBs that have CMRs using XDoclet to generate most of the code required. When I build and deploy this application, I get the following exception for each CMP entity bean that I have developed:
org.jboss.deployment.DeploymentException: No ejb-relationship-role-name element found
This is an example of two of my beans, and the resulting ejb-jar.xml and jbosscmp-jdbc.xml files.
package gov.doe.eia.party;
import gov.doe.eia.party.interfaces.PartyLocal;
import gov.doe.eia.party.interfaces.PartyLocalHome;
import gov.doe.eia.party.util.PartyUtil;
import gov.doe.eia.party.vo.PartyValue;
import gov.doe.eia.party.vo.PersonValue;
import java.util.Collection;
import javax.ejb.CreateException;
import javax.ejb.EntityBean;
import javax.ejb.FinderException;
import javax.naming.NamingException;
/**
* @ejb.bean name="Person"
* jndi-name="ejb/Person"
* local-jndi-name="ejb/PersonLocal"
* type="CMP"
* primkey-field="personID"
* cmp-version="2.x"
* view-type = "local"
*
* @ejb.persistence
* table-name = "person"
*
* @jboss.persistence
* datasource = "java:/jdbc/PartyDS"
* datasource-mapping = "Oracle9i"
* create-table = "false"
* remove-table = "false"
*
* @ejb.value-object
* name = "Person"
* match = "*"
*
* @ejb.ejb-ref
* ejb-name = "Party"
* ref-name = "ejb/PartyLocal"
* view-type = "local"
*/
public abstract class PersonBean implements EntityBean
{
/**
* Returns the personID
* @return the personID
*
* @ejb.persistent-field
* @ejb.persistence
* column-name="personid"
* sql-type="NUMBER"
* @ejb.pk-field
* @ejb.interface-method
* view-type = "local"
*
*/
public abstract java.lang.Integer getPersonID();
/**
* Sets the personID
*
* @param java.lang.Integer the new personID value
*
* @ejb.interface-method
* view-type = "local"
*/
public abstract void setPersonID(java.lang.Integer personID);
/**
*
* @ejb.interface-method
* view-type = "local"
*
* @return
*/
public abstract PersonValue getPersonValue();
/**
* @ejb.interface-method
* view-type = "local"
*
* @param valueHolder
*/
public abstract void setPersonValue(PersonValue valueHolder);
// -------------------------- RELATIONS ---------------------------------//
/**
* @ejb.relation
* name = "RoleInstancePerson"
* role-name = "PersonHasRoleInstances"
*
* @ejb.interface-method
* view-type = "local"
*
* @ejb.value-object
* compose="gov.doe.eia.party.vo.RoleInstanceValue"
* compose-name="RoleInstance"
* members="gov.doe.eia.party.interfaces.RoleInstanceLocal"
* member-name="RoleInstance"
* relation="external"
* type="Collection"
*
* @jboss.relation
* fk-column = "personID"
* related-pk-field = "assignedPerson"
*
* @author TPO
*/
public abstract Collection getRoleInstances();
/**
* @ejb.interface-method
* view-type = "local"
*
* @jboss.relation
* fk-column = "personID"
* related-pk-field = "assignedPerson"
*
* @author TPO
*/
public abstract void setRoleInstances(Collection roleInstances);
/**
* @ejb.relation
* name = "PersonParty"
* role-name = "PersonIsAParty"
* target-ejb = "Party"
*
* @ejb.interface-method
* view-type = "local"
*
* @jboss.relation
* fk-column = "personID"
* related-pk-field = "partyID"
*
* @ejb.value-object
* relation = "external"
*
* @author TPO
*/
public abstract PartyLocal getParty();
/**
* @ejb.interface-method
* view-type = "local"
*
* @jboss.relation
* fk-column = "personID"
* related-pk-field = "partyID"
*
* @author TPO
*/
public abstract void setParty(PartyLocal party);
// -------------------------- CREATES ---------------------------------//
/**
* The ejbCreate method.
*
* @ejb.create-method
*/
public java.lang.Integer ejbCreate(PersonValue personValue)
throws javax.ejb.CreateException
{
// EJB 2.0 spec says return null for CMP ejbCreate methods.
PartyValue partyValue = new PartyValue(null, new Integer(PartyType.PERSON));
try
{
PartyLocalHome plHome = PartyUtil.getLocalHome();
PartyLocal pl = plHome.create(partyValue);
partyValue = pl.getPartyValue();
personValue.setPersonID(partyValue.getPartyID());
setPersonValue(personValue);
}
catch ( NamingException ex )
{
}
catch ( CreateException ex )
{
}
return null;
}
/**
* The container invokes this method immediately after it calls ejbCreate.
*
*/
public void ejbPostCreate(PersonValue personValue)
throws javax.ejb.CreateException
{
try
{
PartyLocalHome plHome = PartyUtil.getLocalHome();
PartyLocal pl = plHome.findByPrimaryKey(getPersonID());
setParty(pl);
}
catch ( NamingException ex )
{
}
catch ( FinderException ex )
{
}
}
}
package gov.doe.eia.party;
import gov.doe.eia.party.vo.PartyValue;
import javax.ejb.EntityBean;
/**
* @ejb.bean
* name="Party"
* jndi-name="ejb/Party"
* local-jndi-name = "ejb/PartyLocal"
* type="CMP"
* primkey-field="partyID"
* cmp-version="2.x"
* view-type = "local"
*
* @ejb.persistence
* table-name = "party"
*
* @jboss.persistence
* datasource = "java:/jdbc/PartyDS"
* datasource-mapping = "Oracle9i"
* create-table = "false"
* remove-table = "false"
*
* @ejb.value-object
* name = "Party"
* match = "*"
*
* @ejb.ejb-ref
* ejb-name = "SequenceManager"
* ref-name = "ejb/SequenceManagerLocal"
* view-type = "local"
*/
public abstract class PartyBean implements EntityBean
{
/**
* Returns the partyID
* @return the partyID
*
* @ejb.persistent-field
* @ejb.persistence
* column-name="partyID"
* sql-type="NUMBER"
* @ejb.pk-field
* @ejb.interface-method
*
*/
public abstract java.lang.Integer getPartyID();
/**
* Sets the partyID
*
* @param java.lang.Integer the new partyID value
*
* @ejb.interface-method
*/
public abstract void setPartyID(java.lang.Integer partyID);
/**
* Returns the partyTypeID
* @return the partyTypeID
*
* @ejb.persistent-field
* @ejb.persistence
* column-name="partyTypeID"
* sql-type="NUMBER"
*
* @ejb.interface-method
*
*/
public abstract java.lang.Integer getPartyTypeID();
/**
* Sets the partyTypeID
*
* @param java.lang.Integer the new partyTypeID value
*
* @ejb.interface-method
*/
public abstract void setPartyTypeID(java.lang.Integer partyTypeID);
/**
*
* @ejb.interface-method
* view-type = "local"
*
* @return
*/
public abstract PartyValue getPartyValue();
/**
* @ejb.interface-method
* view-type = "local"
*
* @param valueHolder
*/
public abstract void setPartyValue(PartyValue valueHolder);
// -------------------------- RELATIONS ---------------------------------//
// -------------------------- CREATES ---------------------------------//
/**
* The ejbCreate method.
*
* @ejb.create-method
*/
public java.lang.Integer ejbCreate(PartyValue partyValue)
throws javax.ejb.CreateException
{
// EJB 2.0 spec says return null for CMP ejbCreate methods.
// TODO: set PK!!
setPartyValue(partyValue);
return null;
}
/**
* The container invokes this method immediately after it calls ejbCreate.
*
*/
public void ejbPostCreate(PartyValue partyValue)
throws javax.ejb.CreateException
{
}
}
<entity >
<description><![CDATA[]]></description>
<ejb-name>Party</ejb-name>
<local-home>gov.doe.eia.party.interfaces.PartyLocalHome</local-home>
<local>gov.doe.eia.party.interfaces.PartyLocal</local>
<ejb-class>gov.doe.eia.party.cmp.PartyCMP</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Party</abstract-schema-name>
<cmp-field >
<description><![CDATA[Returns the partyID]]></description>
<field-name>partyID</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Returns the partyTypeID]]></description>
<field-name>partyTypeID</field-name>
</cmp-field>
<primkey-field>partyID</primkey-field>
<ejb-local-ref >
<ejb-ref-name>ejb/SequenceManagerLocal</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<local-home>gov.doe.eia.party.interfaces.SequenceManagerLocalHome</local-home>
<local>gov.doe.eia.party.interfaces.SequenceManagerLocal</local>
<ejb-link>SequenceManager</ejb-link>
</ejb-local-ref>
<!-- Write a file named ejb-finders-PartyBean.xml if you want to define extra finders. -->
</entity>
<entity >
<description><![CDATA[]]></description>
<ejb-name>Person</ejb-name>
<local-home>gov.doe.eia.party.interfaces.PersonLocalHome</local-home>
<local>gov.doe.eia.party.interfaces.PersonLocal</local>
<ejb-class>gov.doe.eia.party.cmp.PersonCMP</ejb-class>
<persistence-type>Container</persistence-type>
<prim-key-class>java.lang.Integer</prim-key-class>
<reentrant>False</reentrant>
<cmp-version>2.x</cmp-version>
<abstract-schema-name>Person</abstract-schema-name>
<cmp-field >
<description><![CDATA[Returns the personID]]></description>
<field-name>personID</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Returns the lastName]]></description>
<field-name>lastName</field-name>
</cmp-field>
<cmp-field >
<description><![CDATA[Returns the firstName]]></description>
<field-name>firstName</field-name>
</cmp-field>
<primkey-field>personID</primkey-field>
<ejb-local-ref >
<ejb-ref-name>ejb/PartyLocal</ejb-ref-name>
<ejb-ref-type>Entity</ejb-ref-type>
<local-home>gov.doe.eia.party.interfaces.PartyLocalHome</local-home>
<local>gov.doe.eia.party.interfaces.PartyLocal</local>
<ejb-link>Party</ejb-link>
</ejb-local-ref>
<!-- Write a file named ejb-finders-PersonBean.xml if you want to define extra finders. -->
</entity>
<ejb-relation >
<ejb-relation-name>PersonParty</ejb-relation-name>
<ejb-relationship-role >
<ejb-relationship-role-name>PersonIsAParty</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source >
<ejb-name>Person</ejb-name>
</relationship-role-source>
<cmr-field >
<cmr-field-name>party</cmr-field-name>
</cmr-field>
</ejb-relationship-role>
<ejb-relationship-role >
<multiplicity>One</multiplicity>
<relationship-role-source >
<ejb-name>Party</ejb-name>
</relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
<entity>
<ejb-name>Party</ejb-name>
<datasource>java:/jdbc/PartyDS</datasource>
<datasource-mapping>Oracle9i</datasource-mapping>
<create-table>false</create-table>
<remove-table>false</remove-table>
<table-name>party</table-name>
<cmp-field>
<field-name>partyID</field-name>
<column-name>partyID</column-name>
</cmp-field>
<cmp-field>
<field-name>partyTypeID</field-name>
<column-name>partyTypeID</column-name>
</cmp-field>
<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->
</entity>
<entity>
<ejb-name>Person</ejb-name>
<datasource>java:/jdbc/PartyDS</datasource>
<datasource-mapping>Oracle9i</datasource-mapping>
<create-table>false</create-table>
<remove-table>false</remove-table>
<table-name>person</table-name>
<cmp-field>
<field-name>personID</field-name>
<column-name>personid</column-name>
</cmp-field>
<cmp-field>
<field-name>lastName</field-name>
<column-name>lastName</column-name>
</cmp-field>
<cmp-field>
<field-name>firstName</field-name>
<column-name>firstName</column-name>
</cmp-field>
<!-- jboss 3.2 features -->
<!-- optimistic locking does not express the exclusions needed -->
</entity>
<ejb-relation>
<ejb-relation-name>PersonParty</ejb-relation-name>
<ejb-relationship-role>
<ejb-relationship-role-name>PersonIsAParty</ejb-relationship-role-name>
<key-fields/>
</ejb-relationship-role>
<ejb-relationship-role>
<ejb-relationship-role-name></ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>partyID</field-name>
<column-name>personID</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
</ejb-relation>
Can anyone help me, I cant see find anything wrong with this. I certainly dont understand why I am getting that error.
Thanks.
Troy Poppe