Hi,

Say we had the following rudimentary Data Object / Model class:

@Entity
public class User extends BaseModelShardIntegerID {
   private Long created;
   public Long getCreated() {  return created;  }
   public void setCreated(Long created) {  this.created = created;  }
}

Created corresponds to the time the instance was created and therefore although it can be externally pumped into the class in reality the model should be capable of initializing this on its own. There are other examples of this such as holding an internal score and wanting it to start at 0 for example.

Now there are a couple of scenarios were this model can be utilized:


1) From a JSP Form and therefore as an attribute of an ActionBean. Although we could populate the form with a hidden field for this attribute and have the setter set it on the bean I prefer not to as once again this is a rudimentary example and in the real case we have say 6-12 fields that require initialization. What to do - well 1 option - code the constructor as follows:

public User() {
   this.initialize();
}
private void initialize() {
   this.created = System.currentTimeMillis();
}

All is great for JSP Form --> Action Bean population


2) Say we have a piece of code that needs to "create" a User object. Quite simply:
User user = new User();
this.userDao.save(user);


3) Say we have a piece of code that needs to "load" a User object. Quite simply:
Integer id = <some value>
User user = this.userDao.findById(id);

Except what is "really" happening in 3)???? JPA / Hibernate is taking the object and automatically calling its constructor which a) invokes the initialization and populates created with the current time and then once the object is loaded from the database created is overwritten.

Small problem right. Well not exactly. Imagine you have embedded objects that need to implicitly initialize and you have thousands of these users in your system say logging in... there is A LOT of unnecessary object creation and garbage collection right off the bat.


Potential Solution:

   public User(boolean initialize) {
       if (initialize)   this.initialize();
   }

However for JPA Load we want:

   public User() {  this.(*false*);  }

Though for Action Bean populate we want:

   public User() {  this.(*true*);  }

Unfortunately we can't have the same zero argument constructor coded 2 different ways...

All would be well if I used the 1st constructor and could hook into the ActionBean creation point and invoke User(true) or is that a bad idea?

What have others done in this case?  Thoughts / recommendations?

Much Appreciated!

--Nikolaos



------------------------------------------------------------------------------
This SF.net email is sponsored by Sprint
What will you do first with EVO, the first 4G phone?
Visit sprint.com/first -- http://p.sf.net/sfu/sprint-com-first
_______________________________________________
Stripes-users mailing list
Stripes-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/stripes-users

Reply via email to