Hello again,

I've decided to pitch the idea of getting bidirectional M:N for JBoss generated by xdoclet 1.2b3 to work for me in the short term.

Instead, i've received some bidirectional 1:N source that works for someone else (t'anks Jeroen!) and have attempted to graft it into my current situation.

It almost works: xdoclet generates what appears to be a correct relationship declaration, but, upon deployment to jboss, it gets a DeploymentException: CMP field for key not found. field name=account

My research on this mostly turns up references to a bug in a previous 1.2 beta xdoclet, so i'm stuck. This, after a week of tail chasing.

Could somebody give me a few pointers?

Before i cut an paste the appropriate source code, here's what i'm trying to accomplish with it: when i get a User entity, i want to also get their roles as a collection. I also want to be able to find, for any role, a collection of User(s) that have it. Instead of declaring a relationship w/ the Role entity (which is just a glorified lookup table), i'm attempting to declare one with the user/role crosswalk, UserRole, which contains the following fields: 1) userRoleId, 2) role 3) roleGroup, and 4) account (user's account id, which is the foreign key to the User entity)



################
Some UserBean source
################

/**
* This Entity bean represents a UserLocal
*
* @author rruiz
*
* @ejb.value-object
* match="*"
* extends="com.txikisoft.usermgr.ejb.interfaces.AbstractData"
*
* @ejb.bean name="User"
* display-name="UserLocal for your dancing and dining pleasure"
* type="CMP"
* view-type="local"
* local-jndi-name="com/txikisoft/usermgr/ejb/entity/UserLocal"
* primkey-field="userId
* reentrant="true"
* transaction-type="Container"
* cmp-version="${cmp.version}"
* schema="User"
*
* @ejb.interface
* generate="local"
*
* @ejb.env-entry
* name="SequenceName"
* value="User"
*
* @ejb.ejb-ref
* ejb-name="SequenceGenerator"
*
* @ejb.transaction
* type="Required"
*
* @ejb.data-object
* extends="com.txikisoft.usermgr.ejb.interfaces.AbstractData"
* setdata="false"
*
* @ejb.finder
* signature="java.util.Collection findAll()"
* query="SELECT OBJECT(u) FROM User u"
*
* @jboss.query
* description="overides findAll() query"
* signature="java.util.Collection findAll()"
* query="SELECT OBJECT(u) FROM User u ORDER BY u.account"
*
* @ejb.finder
* signature="java.util.Collection findAllByAccountLike( java.lang.String account)"
* query="SELECT OBJECT(u) FROM User u WHERE u.account = ?1"
*
* @jboss.query
* description="overides findAllByAccountLike(...) query with no LIKE... nor ORDER BY clause"
* signature="java.util.Collection findAllByAccountLike( java.lang.String account )"
* query="SELECT OBJECT(u) FROM User u WHERE u.account LIKE CONCAT( ?1, '%' ) ORDER BY u.account"
*
* @ejb.finder
* signature="com.txikisoft.usermgr.ejb.interfaces.UserLocal findById( java.lang.Long id)"
* query="SELECT OBJECT(vu) FROM User vu WHERE vu.id = ?1"
*
* @ejb.finder
* signature="com.txikisoft.usermgr.ejb.interfaces.UserLocal findByAccount( java.lang.String pAccount )"
* query="SELECT OBJECT(vu) FROM User vu WHERE vu.account = ?1"
*
* @jboss.table-name
* table-name="User"
*
* @jboss.create-table
* create="${jboss.create.table}"
*
* @jboss.remove-table
* remove="${jboss.remove.table}"
**/
public abstract class UserBean implements EntityBean {



...SNIP...


    /*************************************
    * CMR
    *************************************
    * @ejb.interface-method view-type="local"
    *
    * @ejb.relation
    *       name="UserRoleName"
    *       role-name="UserHasRoles"
    */
   public abstract java.util.Collection getUserRoles();


/** * @ejb.interface-method view-type="local" */ public abstract void setUserRoles( java.util.Collection userRoles);


######################## Some UserRoleBean source ########################

/**
* This Entity bean represents the relationship between a User and their
* Role(s)
*
* @author rruiz
*
* @ejb.value-object
* match="*"
* extends="com.txikisoft.usermgr.ejb.interfaces.AbstractData"
*
* @ejb.bean
* name="UserRole"
* display-name="UserRoleLocal: User and their Roles"
* type="CMP"
* reentrant="true"
* view-type="local"
* local-jndi-name="com/txikisoft/usermgr/ejb/entity/UserRoleLocal"
* cmp-version="${cmp.version}"
* schema="UserRole"
*
* @ejb.env-entry
* name="SequenceName"
* value="UserRole"
*
* @ejb.ejb-ref
* ejb-name="SequenceGenerator"
*
* @ejb.transaction
* type="Required"
*
* @ejb.data-object
* extends="com.txikisoft.usermgr.ejb.interfaces.AbstractData"
* setdata="false"
*
* @ejb.finder
* signature="java.util.Collection findAll()"
*
* @ejb.finder
* signature="com.txikisoft.usermgr.ejb.interfaces.UserRoleLocal findById( java.lang.Long userId)"
* query="SELECT OBJECT(ur) FROM UserRole ur WHERE ur.id = ?1"
*
* @ejb.finder
* signature="java.util.Collection findAllByAccount( java.lang.String pAccount )"
* query="SELECT OBJECT(ur) FROM UserRole ur WHERE ur.account = ?1"
*
* @ejb.finder
* signature="com.txikisoft.usermgr.ejb.interfaces.UserRoleLocal findByAccountAndRole( java.lang.String pAccount, java.lang.String pRole)"
* query="SELECT OBJECT(ur) FROM UserRole ur WHERE ur.account = ?1 AND ur.role = ?2"
*
* @jboss.table-name
* table-name="UserRole"
*
* @jboss.create-table
* create="${jboss.create.table}"
*
* @jboss.remove-table
* remove="${jboss.remove.table}"
**/
public abstract class UserRoleBean implements EntityBean {


...SNIP...

    /*************************************
    * CMR
    *************************************

    * @ejb.interface-method
    *
    * @ejb.relation
    *       name="UserRoleName"
    *       role-name="RolesHadByUser"
    *
    * @jboss.relation
    *       related-pk-field = "account"
    *       fk-column = "account"
    */
    public
        abstract
        com.txikisoft.usermgr.ejb.interfaces.UserLocal getUser();

/**
* @ejb.interface-method
*/
public abstract void setUser( com.txikisoft.usermgr.ejb.interfaces.UserLocal user
);



########################## CMR Section of ejb-jar.xml ##########################

<ejb-relation >

<ejb-relation-name>UserRoleName</ejb-relation-name>

<ejb-relationship-role > <ejb-relationship-role-name>RolesHadByUser</ejb-relationship-role-name>
<multiplicity>Many</multiplicity>
<relationship-role-source >
<ejb-name>UserRole</ejb-name>
</relationship-role-source>
<cmr-field >
<cmr-field-name>user</cmr-field-name>
</cmr-field>
</ejb-relationship-role>


<ejb-relationship-role > <ejb-relationship-role-name>UserHasRoles</ejb-relationship-role-name>
<multiplicity>One</multiplicity>
<relationship-role-source >
<ejb-name>User</ejb-name>
</relationship-role-source>
<cmr-field >
<cmr-field-name>userRoles</cmr-field-name>
<cmr-field-type>java.util.Collection</cmr-field-type>
</cmr-field>
</ejb-relationship-role>


</ejb-relation>

######################
Part of jbosscmp-jdbc
######################

<relationships>
<ejb-relation>
<ejb-relation-name>UserRoleName</ejb-relation-name>
<foreign-key-mapping/>
<ejb-relationship-role> <ejb-relationship-role-name>RolesHadByUser</ejb-relationship-role-name>
<key-fields/>
</ejb-relationship-role>


<ejb-relationship-role> <ejb-relationship-role-name>UserHasRoles</ejb-relationship-role-name>
<key-fields>
<key-field>
<field-name>account</field-name>
<column-name>account</column-name>
</key-field>
</key-fields>
</ejb-relationship-role>
</ejb-relation>
</relationships>




-------------------------------------------------------
This SF.Net email sponsored by: ApacheCon 2003,
16-19 November in Las Vegas. Learn firsthand the latest
developments in Apache, PHP, Perl, XML, Java, MySQL,
WebDAV, and more! http://www.apachecon.com/
_______________________________________________
xdoclet-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/xdoclet-user

Reply via email to