Hi all,

I use a stateless session-bean to implement the business-logic to save 
entity-beans. The stateless session-bean uses injection of the entitymanager as 
follows: 


  | @Stateless(mappedName = "PersonDAO")
  | public class PersonDAO extends DAOBasicOperationsAbstractClass<Person> 
implements PersonDAOInterfaceLocal, PersonDAOInterfaceRemote{
  |     @PersistenceContext(unitName = "texaco", type = 
PersistenceContextType.TRANSACTION)
  |     EntityManager em;
  | 

Before saving the "Person"-entitybean, I'd like to do some checks by executing 
a native read-query in a separate method on the same table (join with other 
ones) where I'd like to save the Person:


  |             Query query=em.createNativeQuery(
  |                             querystring
  |             ); 
  |             
  |             query.setParameter("TELEPHONENUMBER_1", 
person.getPhonenumber1()==null?"K":person.getPhonenumber1().getPhoneNumber());
  |             query.setParameter("TELEPHONENUMBER_2", 
person.getPhonenumber2()==null?"K":person.getPhonenumber2().getPhoneNumber()); 
  |             query.setParameter("GSMNUMBER_1", 
person.getGsmnumber1()==null?"K":person.getGsmnumber1().getPhoneNumber()); 
  |             query.setParameter("GSMNUMBER_2", 
person.getGsmnumber2()==null?"K":person.getGsmnumber2().getPhoneNumber()); 
  |             if (update) query.setParameter("ID", person.getId()); 
  |             Collection<Person> pers_coll=executeMultipleResultQuery(query); 
  |             if (pers_coll.size()>0) return false;  
  |             else return true;  
  | 

If this method returns true, the new person will not be saved, otherwise he 
will be saved as follows:


  |                     if (!checkPhoneNumberValidity(person, true)) throw new 
PersonValidationException(); 
  |                     Person person_orig=findById(person.getId()); 
  |                     if (!person_orig.equals(person)){
  |                             
person_orig.getLatestValidPersonProperty().getValidityinterval().invalidate();
  |                             
person.getLatestValidPersonProperty().setValidityinterval(new 
ValidityInterval(new GregorianCalendar(), new GregorianCalendar(2099, 12, 
12))); 
  |                             
person.getLatestValidPersonProperty().setId(null); 
  |                             
person_orig.getPersonproperties().add(person.getLatestValidPersonProperty());
  |                             person_orig.setName(person.getName()); 
  |                             
person_orig.setFirstname(person.getFirstname()); 
  |                             
person_orig.setNationalregisternumber(person.getNationalregisternumber()); 
  |                             
person_orig.setIdentitycardnumber(person.getIdentitycardnumber()); 
  |                             
person_orig.setBirthdate(person.getBirthdate()); 
  |                             person_orig.setSex(person.getSex());
  |                             person_orig.deepValidate(); 
  |                             executeMerge(em, person_orig);
  |                     }
  | 

Please note, I also make some comparisons with the original object as I work 
with properties. In this scenario, I get a ConcurrentModificationException. 
Seems logic to me, but how to solve this in a proper way, because the checks 
must happen within the same transaction. 

Any help or advice is very appreciated! 

Best regards,
Davy. 

View the original post : 
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4138436#4138436

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4138436
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to