[J2EE][EJB2] Relation entre EJB avec Eclipse et XDoclet

Je suis en formation EJB2 (j’aurai bien sur préféré EJB3 mais je me suis fait avoir par mon service formation) et j’essaye de faire un truc tout simple sous Eclipse avec le plugin WST.
Pour faire simple, j’ai une classe Cuve et une classe Vigneron et un Vigneron peut être associé à une Cuve. Le cours propose des exemples mal foutu qui ne respectent pas les normes et pire que tout, où il faut tout codé à la mimine, j’essaye donc d’utiliser XDoclet :

Ma cuve:
[codebox]
/**
*
*/
package com.bull.ejb;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;

/**

  • @ejb.bean name=« Cuve »
  • jndi-name=« Cuve »
  • type=« CMP »
  • primkey-field=« reference »
  • schema=« CuveSCHEMA »
  • cmp-version=« 2.x »
  • @ejb.persistence
  • table-name=« CUVE »
  • @ejb.finder
  • query=« SELECT OBJECT(a) FROM CuveSCHEMA as a »
  • signature=« java.util.Collection findAll() »
  • @ejb.pk class=« java.lang.String »
  • @jonas.jdbc-mapping jndi-name=« java:/DefaultDS » automatic-pk=« false » jdbc-table-name=« CUVE »
  • @generated
    **/

public abstract class CuveBean implements javax.ejb.EntityBean {

/**
 *
 * <!-- begin-user-doc -->
 * The  ejbCreate method.
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 * @ejb.create-method 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public java.lang.String ejbCreate() throws javax.ejb.CreateException {
	// EJB 2.0 spec says return null for CMP ejbCreate methods.
	// TODO: YOU MUST INITIALIZE THE FIELDS FOR THE BEAN HERE. 
	// setMyField("Something"); 
	// begin-user-code
	return null;
	// end-user-code
}

/**
 * <!-- begin-user-doc -->
 * The container invokes this method immediately after it calls ejbCreate.
 * <!-- end-user-doc -->
 * 
 * @generated
 */
public void ejbPostCreate() throws javax.ejb.CreateException {
	// begin-user-code
	// end-user-code
}

/**
 *
 *
 * <!-- begin-user-doc -->
 * CMP Field reference
 *
 * Returns the reference
 * @return the reference
 * 
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 *
 * @ejb.persistent-field 
 * @ejb.persistence
 *    column-name="REFERENCE"
 *     jdbc-type="VARCHAR"
 *     sql-type="VARCHAR(0)"
 *     read-only="false"
 * @ejb.pk-field 
 *
 * @ejb.interface-method
 * 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public abstract java.lang.String getReference();

/**
 * <!-- begin-user-doc -->
 * Sets the reference
 * 
 * @param java.lang.String the new reference value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setReference(java.lang.String reference);

/**
 *
 *
 * <!-- begin-user-doc -->
 * CMP Field volume
 *
 * Returns the volume
 * @return the volume
 * 
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 *
 * @ejb.persistent-field 
 * @ejb.persistence
 *    column-name="VOLUME"
 *     jdbc-type="INTEGER"
 *     sql-type="INTEGER"
 *     read-only="false"
 *  
 *
 * @ejb.interface-method
 * 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public abstract int getVolume();

/**
 * <!-- begin-user-doc -->
 * Sets the volume
 * 
 * @param int the new volume value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setVolume(int volume);

/**
 *
 *
 * <!-- begin-user-doc -->
 * CMP Field alcool
 *
 * Returns the alcool
 * @return the alcool
 * 
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 *
 * @ejb.persistent-field 
 * @ejb.persistence
 *    column-name="ALCOOL"
 *     jdbc-type="INTEGER"
 *     sql-type="INTEGER"
 *     read-only="false"
 *  
 *
 * @ejb.interface-method
 * 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public abstract int getAlcool();

/**
 * <!-- begin-user-doc -->
 * Sets the alcool
 * 
 * @param int the new alcool value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setAlcool(int alcool);

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbActivate()
 */
public void ejbActivate() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbLoad()
 */
public void ejbLoad() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbPassivate()
 */
public void ejbPassivate() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbRemove()
 */
public void ejbRemove() throws RemoveException, EJBException,
		RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbStore()
 */
public void ejbStore() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#setEntityContext(javax.ejb.EntityContext)
 */
public void setEntityContext(EntityContext arg0) throws EJBException,
		RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#unsetEntityContext()
 */
public void unsetEntityContext() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/**
 * 
 */
public CuveBean() {
	// TODO Auto-generated constructor stub
}

}
[/codebox]

Mon vigneron:
[codebox]
/**
*
*/
package com.bull.ejb;

import java.rmi.RemoteException;

import javax.ejb.EJBException;
import javax.ejb.EntityContext;
import javax.ejb.RemoveException;

/**

  • @ejb.bean name=« Vigneron »
  • jndi-name=« Vigneron »
  • type=« CMP »
  • primkey-field=« nom »
  • schema=« VigneronSCHEMA »
  • cmp-version=« 2.x »
  • @ejb.persistence
  • table-name=« VIGNERON »
  • @ejb.finder
  • query=« SELECT OBJECT(a) FROM VigneronSCHEMA as a »
  • signature=« java.util.Collection findAll() »
  • @ejb.pk class=« java.lang.String »
  • @jonas.jdbc-mapping jndi-name=« java:/DefaultDS » automatic-pk=« false » jdbc-table-name=« VIGNERON »
  • @generated
    **/

public abstract class VigneronBean implements javax.ejb.EntityBean {

/**
 *
 * <!-- begin-user-doc -->
 * The  ejbCreate method.
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 * @ejb.create-method 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public java.lang.String ejbCreate() throws javax.ejb.CreateException {
	// EJB 2.0 spec says return null for CMP ejbCreate methods.
	// TODO: YOU MUST INITIALIZE THE FIELDS FOR THE BEAN HERE. 
	// setMyField("Something"); 
	// begin-user-code
	return null;
	// end-user-code
}

/**
 * <!-- begin-user-doc -->
 * The container invokes this method immediately after it calls ejbCreate.
 * <!-- end-user-doc -->
 * 
 * @generated
 */
public void ejbPostCreate() throws javax.ejb.CreateException {
	// begin-user-code
	// end-user-code
}

/**
 *
 *
 * <!-- begin-user-doc -->
 * CMP Field nom
 *
 * Returns the nom
 * @return the nom
 * 
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 *
 * @ejb.persistent-field 
 * @ejb.persistence
 *    column-name="NOM"
 *     jdbc-type="VARCHAR"
 *     sql-type="VARCHAR(0)"
 *     read-only="false"
 * @ejb.pk-field 
 *
 * @ejb.interface-method
 * 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public abstract java.lang.String getNom();

/**
 * <!-- begin-user-doc -->
 * Sets the nom
 * 
 * @param java.lang.String the new nom value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setNom(java.lang.String nom);

/**
 *
 *
 * <!-- begin-user-doc -->
 * CMP Field reference
 *
 * Returns the reference
 * @return the reference
 * 
 * <!-- end-user-doc -->
 *
 * <!-- begin-xdoclet-definition --> 
 *
 * @ejb.persistent-field 
 * @ejb.persistence
 *    column-name="REFERENCE"
 *     jdbc-type="VARCHAR"
 *     sql-type="VARCHAR(0)"
 *     read-only="false"
 *  
 *
 * @ejb.interface-method
 * @ejb.relation name="Cuve"
 *               role-name="Vigneron-has_one-Cuve"
 *               target-ejb="Cuve"
 * 
 * <!-- end-xdoclet-definition --> 
 * @generated
 */
public abstract String getCuve();

/**
 * <!-- begin-user-doc -->
 * Sets the reference
 * 
 * @param java.lang.String the new reference value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setCuve(String cuve);

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbActivate()
 */
public void ejbActivate() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbLoad()
 */
public void ejbLoad() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbPassivate()
 */
public void ejbPassivate() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbRemove()
 */
public void ejbRemove() throws RemoveException, EJBException,
		RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#ejbStore()
 */
public void ejbStore() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#setEntityContext(javax.ejb.EntityContext)
 */
public void setEntityContext(EntityContext arg0) throws EJBException,
		RemoteException {
	// TODO Auto-generated method stub

}

/* (non-Javadoc)
 * @see javax.ejb.EntityBean#unsetEntityContext()
 */
public void unsetEntityContext() throws EJBException, RemoteException {
	// TODO Auto-generated method stub

}

/**
 * 
 */
public VigneronBean() {
	// TODO Auto-generated constructor stub
}

}
[/codebox]

Et voici la partie qui pose problème :
[codebox]
/**
*
*
*
* CMP Field reference
*
* Returns the reference
* @return the reference
*
*
*
*
*
* @ejb.persistent-field
* @ejb.persistence
* column-name=« REFERENCE »
* jdbc-type=« VARCHAR »
* sql-type=« VARCHAR(0) »
* read-only=« false »
*
*
* @ejb.interface-method
* @ejb.relation name=« Cuve »
* role-name=« Vigneron-has_one-Cuve »
* target-ejb=« Cuve »
*
*
* @generated
*/
public abstract String getCuve();

/**
 * <!-- begin-user-doc -->
 * Sets the reference
 * 
 * @param java.lang.String the new reference value
 * <!-- end-user-doc -->
 * 
 * <!-- begin-xdoclet-definition --> 
 * @ejb.interface-method
 * <!-- end-xdoclet-definition -->
 * @generated 
 */
public abstract void setCuve(String cuve);

[/codebox]

Ca fait une heure que je parcours le net, mais je n’arrive pas à trouver des exemples tout fait XDoclet pour bien comprendre le principe : faut-il retourner la clé de ma cuve, un objet Cuve, un objet CuveBean ??? Bref pleins de questions sans réponse.

BodySplash, si tu passe par là ? :slight_smile: