BINGOO! Actually in the AddressBean.ejbCreate() method none of the
AddressBean fields was set. Thank you Alex, I want to pay you a dinner!

Marco
----- Original Message ----- 
From: "Alexey Loubyansky" <[EMAIL PROTECTED]>
To: "Marco Tedone" <[EMAIL PROTECTED]>
Sent: Monday, June 23, 2003 8:03 AM
Subject: Re: [JBoss-user] Jboss 3.2.1 Problems with table's relationship


> Are you sure AddressBean.ejbCreate(AddressData aData) initializes all
> fields properly?
>
> alex
>
> Monday, June 23, 2003, 12:41:38 AM, Marco Tedone wrote:
>
> MT> Hi, it's me again. I created the table's relationship as shown by
Jboss
> MT> logging messages (don't consider the Numerator Table which is not
related to
> MT> the problem).
>
> MT> 22:25:03,828 INFO  [People] Created table 'People' successfully.
> MT> 22:25:03,828 INFO  [Numerator] Table 'Numerator' already exists
> MT> 22:25:03,906 INFO  [Address] Created table 'Address' successfully.
> MT> 22:25:03,937 INFO  [Address] Added foreign key constraint to table
'People'
>
> MT> After deployment I find in my database the People and Address tables.
People
> MT> has an index (addressId) which is the pk of Address table. Here
follows the
> MT> code of my entity bean:
>
> MT> <!-- BEGIN of CODE -->
>
> MT> package org.jemos.core.framework.ejbs.entities;
> MT> import java.util.Date;
> MT> import javax.ejb.CreateException;
> MT> import javax.ejb.EJBException;
> MT> import javax.ejb.EntityBean;
> MT> import javax.naming.InitialContext;
> MT> import javax.naming.NamingException;
> MT> import org.apache.log4j.Category;
> MT> import org.jemos.core.framework.ejbs.BaseEntityBean;
> MT> import org.jemos.core.framework.ejbs.interfaces.AddressData;
> MT> import org.jemos.core.framework.ejbs.interfaces.AddressLocal;
> MT> import org.jemos.core.framework.ejbs.interfaces.AddressLocalHome;
> MT> import org.jemos.core.framework.ejbs.interfaces.PeopleData;
> MT> import org.jemos.core.framework.ejbs.interfaces.PeopleKey;
>
>
> MT> /**
> MT> *
> MT> * @ejb.bean
> MT> * type="CMP"
> MT> * name="People"
> MT> * reentrant="true"
> MT> * local-jndi-name="ejb/jemos/core/PeopleEJB"
> MT> * view-type="local"
> MT> * transaction-type="Container"
> MT> * cmp-version="2.x"
> MT> * @ejb.transaction
> MT> * type="Required"
> MT> *
> MT> * @ejb.ejb-ref
> MT> * ejb-name="Address"
> MT> * view-type="local"
> MT> * ref-name="Address"
> MT> *
> MT> *
> MT> * @jboss.persistence
> MT> * pk-constraint="true"
> MT> * table-name="people"
> MT> *
> MT> * @ejb.value-object
> MT> * name="PeopleValue"
> MT> * match="*"
> MT> *
> MT> */
> MT> public abstract class PeopleBean
> MT> extends BaseEntityBean implements EntityBean {
> MT> //The logger instance
> MT> private transient final Category log =
> MT> Category.getInstance(getClass().getName());
> MT> /**
> MT> * @ejb.create-method
> MT> * @param pData
> MT> * @return
> MT> * @throws CreateException
> MT> */
> MT> public PeopleKey ejbCreate(PeopleData pData, AddressData aData)
> MT> throws CreateException {
> MT> log.info("Now in ejbCreate: Setting People data");
> MT> setEmail(pData.getEmail());
> MT> setPassword(pData.getPassword());
> MT> setFirstName(pData.getFirstName());
> MT> setLastName(pData.getLastName());
> MT> setCreationDate(new java.util.Date());
> MT> return null;
> MT> }
> MT> public void ejbPostCreate(PeopleData pData, AddressData aData)
> MT> throws CreateException {
> MT> AddressLocal address = createAddress(aData);
> MT> setHomeAddress(address);
> MT> }
> MT> //Business methods
> MT> /**
> MT> * @ejb.interface-method
> MT> */
> MT> public AddressLocal createAddress(AddressData aData)
> MT> throws EJBException
> MT> {
> MT> AddressLocal addr = this.getHomeAddress( );
> MT> log.info("from setAddress. AddressData:" + aData);
> MT> try
> MT> {
> MT> if (addr == null)
> MT> {
> MT> log.info("Creating a new reference to AddressEJB");
> MT> // Customer doesn't have an address yet. Create a new one.
> MT> InitialContext cntx = new InitialContext( );
> MT> AddressLocalHome addrHome =
> MT> (AddressLocalHome)cntx.lookup("ejb/jemos/core/AddressEJB");
> MT> log.info("Before creating: addressId value= " + aData.getAddressId());
> MT> addr = addrHome.create(aData);
> MT> log.info("Address created.");
> MT> }
> MT> else
> MT> {
> MT> // Customer already has an address. Change its fields
> MT> log.info("Customer already has an address. Change its fields");
> MT> addr.setAddress1(aData.getAddress1());
> MT> addr.setAddress2(aData.getAddress2());
> MT> addr.setAddress3(aData.getAddress3());
> MT> addr.setZip(aData.getZip());
> MT> addr.setCity(aData.getCity());
> MT> addr.setCountry(aData.getCountry());
> MT> }
> MT> }
> MT> catch (NamingException ne)
> MT> {
> MT> throw new EJBException(ne);
> MT> } catch (CreateException e) {
> MT> e.printStackTrace();
> MT> }
> MT> finally{
> MT> return addr;
> MT> }
> MT> }
> MT> /**
> MT> * @ejb.interface-method
> MT> * @return
> MT> */
> MT> public AddressData getAddress()
> MT> {
> MT> AddressLocal addrLocal = this.getHomeAddress();
> MT> if (addrLocal == null) return null;
> MT> int addressId = addrLocal.getAddressId();
> MT> String address1 = addrLocal.getAddress1();
> MT> String address2 = addrLocal.getAddress2();
> MT> String address3 = addrLocal.getAddress3();
> MT> String zip = addrLocal.getZip();
> MT> String city = addrLocal.getCity();
> MT> String country = addrLocal.getCountry();
> MT> Date date = addrLocal.getCreationDate();
> MT> AddressData addrValue = new AddressData(addressId,
> MT> address1,
> MT> address2,
> MT> address3,
> MT> zip,
> MT> city,
> MT> country,
> MT> date);
> MT> return addrValue;
> MT> }
> MT> //persistent-relationships
> MT> /**
> MT> * @ejb.interface-method
> MT> * view-type="local"
> MT> * @ejb.relation
> MT> * name="People-Address"
> MT> * role-name="1-People-1-Address"
> MT> * multiple="no"
> MT> * target-role-name="1-Address-1-People"
> MT> * target-multiple="no"
> MT> * target-ejb="Address"
> MT> *
> MT> * @jboss.relation
> MT> * fk-constraint="true"
> MT> * related-pk-field="addressId"
> MT> * fk-column="addressId"
> MT> */
> MT> public abstract AddressLocal getHomeAddress();
> MT> /**
> MT> * @ejb.interface-method
> MT> * @param address
> MT> */
> MT> public abstract void setHomeAddress(AddressLocal address);
> MT> //abstract-accessor methods
> MT> /**
> MT> * @ejb.interface-method
> MT> * @ejb.persistent-field
> MT> * @ejb.pk-field
> MT> * @jboss.persistence
> MT> * not-null="true"
> MT> * @jboss.cmp-field
> MT> * field-name="email"
> MT> * column-name="email"
> MT> */
> MT> public abstract String getEmail();
> MT> /**
> MT> * @ejb.interface-method
> MT> * @param email
> MT> */
> MT> public abstract void setEmail(String email);
> MT> /**
> MT> * @ejb.interface-method
> MT> * @ejb.persistent-field
> MT> * @ejb.pk-field
> MT> * @jboss.persistence
> MT> * not-null="true"
> MT> * @jboss.cmp-field
> MT> * field-name="password"
> MT> * column-name="password"
> MT> */
> MT> public abstract String getPassword();
> MT> /**
> MT> * @ejb.interface-method
> MT> * @param password
> MT> */
> MT> public abstract void setPassword(String password);
> MT> /**
> MT> * @ejb.persistent-field
> MT> * @ejb.interface-method
> MT> * @jboss.cmp-field
> MT> * field-name="firstName"
> MT> * column-name="firstName"
> MT> */
> MT> public abstract String getFirstName();
> MT> /**
> MT> * @ejb.interface-method
> MT> * @param firstName
> MT> */
> MT> public abstract void setFirstName(String firstName);
> MT> /**
> MT> * @ejb.interface-method
> MT> * @ejb.persistent-field
> MT> * @jboss.cmp-field
> MT> * field-name="lastName"
> MT> * column-name="lastName"
> MT> */
> MT> public abstract String getLastName();
> MT> /**
> MT> * @ejb.interface-method
> MT> * @param lastName
> MT> */
> MT> public abstract void setLastName(String lastName);
> MT> //cmr-fields
>
>
> MT> }
>
> MT> <!-- END of CODE -->
>
> MT> My client creates a reference to the local home interface of the
People bean
> MT> and then creates a People entity: so far so good. As you can see in
the
> MT> ejbPostCreate, then the bean calls the createAddress method which
creates an
> MT> Address entity and returns a reference to the Address local interface.
In
> MT> the ejbPostCreate, then, I call the persitence-relationships accessors
> MT> (setHomeAddress) but here I obtain the wrong result. While a People
entity
> MT> is written with the data I entered, an Address entity is written with
the
> MT> following values (this has been taken by Jboss console, but the record
on
> MT> the database appears exactly as this):
>
> MT> [PeopleDbManagerSession] AddressData: {addressId=0 address1=null
> MT> address2=null address3=null zip=null city=null country=null
> MT> creationDate=null
>
> MT> These are the values immediately before the home.create(..) method of
the
> MT> Address local bean:
>
> MT> <!-- BEGIN of DATA -->
> MT> 22:27:42,234 INFO  [PeopleCMP$Proxy] from setAddress.
> MT> AddressData:{addressId=1 address1=43, Millais Road address2=Leyton
> MT> address3=Essex zip=E11 4HB ci
> MT> ty=London country=UK creationDate=Sun Jun 22 22:27:41 BST 2003}
> MT> 22:27:42,234 INFO  [PeopleCMP$Proxy] Creating a new reference to
AddressEJB
> MT> 22:27:42,234 INFO  [PeopleCMP$Proxy] Before creating: addressId value=
1
> MT> <!-- END of DATA -->
>
> MT> As you can see, the AddressData object contains the values which I
entered
> MT> on my client, but the record on the database is written to null
values.
>
> MT> I thought that maybe it could be the database (i'm using MySQL
4.0.12-nt) so
> MT> I changed to SQLServer but the results are the same!
>
> MT> Please help me, I think I've looked everywhere, and now I don't know
where
> MT> to look further.
>
> MT> Many thanks,
>
> MT> Marco
>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by: INetU
> Attention Web Developers & Consultants: Become An INetU Hosting Partner.
> Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
> INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
> _______________________________________________
> JBoss-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user





-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to