Newsgroup: it.comp.java
Titolo: [LUNGO]   CMP-CMR con JBOSS

Salve a tutti,
sto sviluppando per la prima volta un'applicazione distribuita J2EE 
utilizzando JBoss come application server e XDoclet per la creazione di 
tutti i file di configurazione.
Mi sono creato i bean CMP necessari per rappresentare gli oggetti 
business di cui ho bisogno, lasciando quindi a JBoss tutto l'onere di 
gestione delle transazioni con il database.
Ora però ho la necessità di mettere in relazione un bean con un altro 
(relazione 1:N).
Cercando sul web diversi tutorial e articoli ho scoperto che le 
relazioni devono essere settate nel metodo ejbPostCreate del mio Bean 
però quando eseguo l'applicazione, alla chiamata del metodo che mi setta 
il campo CMP relativo alla relazione ottengo il seguente errore:
---------------------------------------------------
javax.ejb.EJBException: Method is not a known CMP field accessor, CMR 
field accessor, or ejbSelect method: methodName=setGroupID
---------------------------------------------------
Dove il metodo setGroupID dovrebbe settare il campo GroupID del mio Bean 
con la chiave primaria del Bean destinazione della relazione.
Riporto la dichiarazione XDoclet relativa
/**
* Getter for CMR Relationship
*
* @ejb.interface-method view-type="local"
* @ejb.relation name = "gid"
* role-name = "appartiene"
* target-ejb = "Gruppo"
* target-role-name = "gruppo_formato_da"
* target-multiple = "yes"
*
* @jboss.target-relation fk-column = "gid" fk-constraint = "groupID"
*
*/
public abstract String getGroupID();
/**
* Setter for CMR Relationship
*
* @ejb.interface-method view-type="local"
*/
public abstract void setGroupID(String gid);
-------------------------------------------------
Qualcuno che ha avuto a che fare con CMR, XDoclet e JBoss saprebbe darmi 
una mano?
Grazie!
Jacopo

Jack wrote:

Il tipo ritornato da getGroupID() e passato a setGroupID() non deve essere
String ma, suppungo, Gruppo. In poche parole, non devi pensare al valore
fisico (String) del campo ma alla sua rappresentazione java, ovvero
all'oggetto EJB (Gruppo)
Ciao

Ciao,
grazie della dritta, ma non mi è chiaro come metterla in pratica..
Dunque io ho 2 bean: PersonaBean, e GruppoBean (con rispettive
interfacce locali PersonaLocal e GruppoLocal).
GruppoBean è un oggetto con i seguenti campi:
-gid (String)
-password (String)
PersonaBean ha invece i seguenti:
-nome (String)
-cognome (String)
-email (String)
-gid (String)  [è la chiave esterna della relazione Persona--Gruppo]
Da come mi hai suggerito dovrei quindi fare in modo che il metodo
setGroupID(String gid) di PersonaBean prenda come parametro un oggetto
di tipo GruppoBean giusto? Ma in questo caso il parametro non dovrebbe
essere un oggetto di tipo GruppoLocal?
Scusa se ho detto delle eresie.. ma non sono ancora molto pratico di
sviluppo di applicazioni J2EE.
Grazie ancora,
Jacopo
Claudio Vesco ha scritto:


 sviluppo di applicazioni J2EE.
Non ci sono problemi :-)
Ciao

Ciao,
ho modificato il codice come mi hai consigliato, facendo quindi in modo 
che i metodi setGroup e getGroup di PersonaBean utilizzino l'interfaccia 
locale di GruppoBean.
Di conseguenza ho modificato anche i metodi ejbCreate ed ejbPostCreate 
di PersonaBean (correggimi se sbaglio :)).
In particolare nel secondo vado a richiamare il metodo 
setGroup(GruppoLocal gruppo).
Effettuo il package del tutto... vado a "deployare".. ma quando tento di 
creare (tramite un form html per l'immissione dei dati) una nuova 
Persona, alla chiamata del metodo setGroup, JBoss mi spara fuori 
(ancora) quest'errore:
------------------------------------------------------------------------
javax.ejb.EJBException: Method is not a known CMP field accessor, CMR 
field accessor, or ejbSelect method: methodName=setGroup
------------------------------------------------------------------------
A questo punto propenderei per una "mancata" dichiarazione di questa 
cosa in uno dei file di configurazione, ma nel file ejb-jar.xml la 
relazione Persona-Gruppo è specificata in questo modo:
------------------------------------------------------------------------
<ejb-relation >
     <ejb-relation-name>gid</ejb-relation-name>
     <ejb-relationship-role >
      <ejb-relationship-role-name>appartiene</ejb-relationship-role-name>
      <multiplicity>Many</multiplicity>
      <relationship-role-source >
          <ejb-name>Persona</ejb-name>
      </relationship-role-source>
      <cmr-field >
         <cmr-field-name>gid</cmr-field-name>
      </cmr-field>
     </ejb-relationship-role>
     <ejb-relationship-role >
<ejb-relationship-role-name>gruppo_formato_da</ejb-relationship-role-name>
     <multiplicity>One</multiplicity>
        <relationship-role-source >
           <ejb-name>Gruppo</ejb-name>
        </relationship-role-source>
</ejb-relationship-role>
</ejb-relation>
------------------------------------------------------------------------
Dove sto sbagliando? :(
Jacopo