Caroline,
May I ask why you are performing your database updates through a separate
thread? It seems to be complicating your code. Creating lots of threads from
within your web application is not a good practice if you want your app to
scale well. Also, what happens if the update doesn't succeed? You have no
way of notifying the user.

The code:
<snip>
   ThreadBean threadBean = new ThreadBean();  

   String receiver = threadBean.getReceiver();
   String sender = threadBean.getSender();
</snip>

is your problem unless your ThreadBean constructor can populate itself
correctly with the desired values. 
If you must use threads, then you should be able to create a ThreadHandler,
call a setter method on it and set you ThreadBean instance variable, and
then call the run method on the ThreadHandler to start the thread.

Regards,

Richard

-----Original Message-----
From: Caroline Jen [mailto:[EMAIL PROTECTED] 
Sent: Thursday, January 08, 2004 8:48 AM
To: Struts Users Mailing List
Subject: RE: All The Bean Properties Are Null in the Business Tier!!! (Used
BeanUtils to Convert DynaValidatorForm)


Thank you for your comment, which is very helpful.

Instead of extends ThreadBean, I now import the
ThreadBean into my ThreadHandler class (see the code
below). I am still getting all null or zero values
from the bean.

What is the proper way to do it?  I simply want to
insert the value of all the properties into the
database.  Most of the fields in my database require
NOT NULL.  

code:
==================================================
import org.apache.artimus.message.ThreadBean;

class ThreadHandler 
{
   ThreadBean threadBean = new ThreadBean();  

   String receiver = threadBean.getReceiver();
   String sender = threadBean.getSender();
   String threadTopic = threadBean.getPostTopic();
   String threadBody = threadBean.getPostBody();
   Timestamp threadCreationDate = threadBean.getThreadCreationDate();
   int threadViewCount =
threadBean.getThreadViewCount();
   int threadReplyCount =
threadBean.getThreadReplyCount();

   MessageDAO md = new MySQLMessageDAO();
   public int insertThread( ThreadBean threadBean )
                        throws MessageDAOSysException,

                               ObjectNotFoundException

   {
      System.out.println( "The sender is " + sender +
"." );  
      System.out.println( "The subject is " +
threadTopic + "." );
      System.out.println( "The creation date is " + threadCreationDate );
      System.out.println( "The number of replies are "
+ threadReplyCount );

      md.createThread( receiver, sender, threadTopic, 
                       threadBody, threadCreationDate,

                       threadViewCount,   
                       threadReplyCount ); 

      int threadID = 0;
      ..... 
      .....
      return threadID;
   }
} 


--- Robert Taylor <[EMAIL PROTECTED]> wrote:
> Your code seems a bit confusing based upon what you
> want to
> achieve.
> 
> If indeed you want ThreadHandler to inherit from
> ThreadBean,
> you should be able to do something like this:
> 
> DynaActionForm postForm = ( DynaActionForm )form; ThreadHander = new 
> ThreadHandler(); BeanUtils.copyProperties( threadHandler, postForm );
> 
> threadHandler.insertThread();
> 
> 
> The reason you are getting null and zero values in ThreadHandler
> is that you are populating a new instance of
> ThreadBean  here:
> 
> > > > DynaActionForm postForm = ( DynaActionForm
> )form;
> > > > ThreadBean threadBean = new ThreadBean(); 
> > > > BeanUtils.copyProperties( threadBean, postForm
> );
> 
> ... and then you get a new instance of ThreadHandler
> here:
> 
> > > > ThreadHandler thandler = new ThreadHandler();
> 
> At this point, ThreadHandler knows nothing of your
> populated
> instance of ThreadBean. Instead it is getting values
> from
> its own "empty" ThreadBean parent here:
> 
> > class ThreadHandler extends ThreadBean
> > {
> >    String receiver = getReceiver();
> >    String sender = getSender();
> >    String threadTopic = getPostTopic();
> >    String threadBody = getPostBody();
> >    Timestamp threadCreationDate =
> > getThreadCreationDate();
> >    int threadViewCount = getThreadViewCount();
> >    int threadReplyCount = getThreadReplyCount();
> >
> >    .....
> >    .....
> > }
> 
> 
> ...unless you do something like the following in
> ThreadHandler.insertThread():
> 
> public int insertThread(ThreadBean bean) throws
> SomeException {
> 
>       this.receiver = bean.getReceiver();
>       this.sender = bean.getSender();
>       ....
> 
>       // insert code here
> 
> 
> 
> }
> 
> which from a design perspective, I'm not sure why
> you would want to do it
> this way.
> 
> 
> hth,
> 
> robert
> 
> 
> > -----Original Message-----
> > From: Caroline Jen [mailto:[EMAIL PROTECTED]
> > Sent: Wednesday, January 07, 2004 10:27 PM
> > To: Struts Users Mailing List
> > Subject: RE: All The Bean Properties Are Null in
> the Business Tier!!!
> > (Used BeanUtils to Convert DynaValidatorForm)
> >
> >
> > I have narrowed down the problem.  Something went
> > wrong in my business tier class
> (ThreadHandler.java).
> > All the properties in the JavaBean are populated
> > properly (I have checked).  The way I coded in the ThreadHandler 
> > class failed to retrieve the value
> of
> > all the properties in the JavaBean
> (ThreadBean.java).
> > All the values turned out to be null or 0.  Now,
> what
> > is wrong with the code?
> >
> > class ThreadHandler extends ThreadBean
> > {
> >    String receiver = getReceiver();
> >    String sender = getSender();
> >    String threadTopic = getPostTopic();
> >    String threadBody = getPostBody();
> >    Timestamp threadCreationDate =
> > getThreadCreationDate();
> >    int threadViewCount = getThreadViewCount();
> >    int threadReplyCount = getThreadReplyCount();
> >
> >    .....
> >    .....
> > }
> >
> > To answer your question:
> >
> > 1. Have you checked to make sure that the fields
> you
> > expect actually exist in the form before calling 
> > BeanUtils.copyProperties()?
> >
> > Yes, I have printed out the contents of the JSP
> text
> > fields in my action class, which is a servlet.
> For
> > example: System.out.println( "the sender is " + postForm.get( 
> > "sender" ) );
> >
> > 2. If so, have you checked to see if the data was
> > copied properly just after
> BeanUtils.copyProperties()?
> >
> > Yes, I have also printed out the value of the bean properties.  For 
> > example: System.out.println( "the sender is " + 
> > threadBean.getSender() );
> >
> > 3. BeanUtils.copyProperties() uses reflection to
> copy
> > properties.  Are you using proper JavaBeans naming convention?
> >
> > Yes, I used a pair of get and set methods for each properties in the 
> > JavaBean (ThreadBean.java).  And
> in
> > my action class, I could print out the value of
> those
> > properties.
> >
> > --- Robert Taylor <[EMAIL PROTECTED]> wrote:
> > > Have you checked to make sure that the fields
> you
> > > expect
> > > actually exist in the form before calling BeanUtils.populate()?
> > >
> > > If so, have you checked to see if the data was
> > > copied properly
> > > just after BeanUtils.populate()?
> > >
> > > BeanUtils.populate() uses reflection to copy
> > > properties.
> > > Are you usingproper JavaBeans naming convention?
> > >
> > > Try and isolate exactly where the data is
> getting
> > > "lost".
> > >
> > > I use BeanUtils.populate() all the time with DynaXXXXForms and
> > > have no problems. Usually when I do, I find that
> my
> > > data member
> > > names don't correspond.
> > >
> > > robert
> > >
> > > > -----Original Message-----
> > > > From: Caroline Jen
> [mailto:[EMAIL PROTECTED]
> > > > Sent: Wednesday, January 07, 2004 1:42 PM
> > > > To: [EMAIL PROTECTED]
> > > > Subject: All The Bean Properties Are Null in
> the
> > > Business Tier!!! (Used
> > > > BeanUtils to Convert DynaValidatorForm)
> > > >
> > > >
> > > > Hi, my program compiled OKay.  When I ran the application, 
> > > > somehow, the properties of my DynaValidatorForm are not passed 
> > > > from the
> action
> > > class
> > > > to the business tier and then to the data
> access
> > > tier.
> > > >  Please help me taking a look at what went
> wrong.
> > >
> > > >
> 
=== message truncated ===


__________________________________
Do you Yahoo!?
Yahoo! Hotjobs: Enter the "Signing Bonus" Sweepstakes
http://hotjobs.sweepstakes.yahoo.com/signingbonus

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to