logging-log4j-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "James Stauffer" <stauffer.ja...@gmail.com>
Subject Re: what is the best way to validate unique properties before persistence (e.g. user email)
Date Wed, 15 Nov 2006 17:01:17 GMT
It appears you sent this to the wrong list.

On 11/15/06, Man-Chi Leung <manchi.leung+news@gmail.com> wrote:
> hi,
>
> in appfuse's User schema: email  column is declared as unique in
> xdoclet-hibernate tag. therefore, no repeated email is allowed, or else
> hibernate will throw ConstraintViolationException, then Spring will
> rewrap it as DataIntegrityViolationException.
>
> I wrote a test case as the following and it is passed successfully by
> catching Spring's DataIntegrityViolationException.
>
> My question: what is the best pracitice to handle this?
>
> 1) AJAX Level: very likely, I am going to do a validation manager via
> DWR, when user keys in the email text field, there is a response on
> "repeated email error" instantly.
>
> 2) Action Level:  to be safe, i will validate again  at action level
> before passing to service layer.
>
> 3) DAO Level: one more validation for repeated email before finally
> calling dao.saveUser(user2);
>
> yes, it is  too much. how can I make my life easier? any shortcut that
> I missed out ?
>
> .... I am puzzled on how others are doing for this. PLS help! (sorry
> for my ignorance)
>
> thanks to appfuse community
> ~thinkboy
>
> ===UserDaoTest.java===
>         public void testUpdateUserWithRepeatedEmail() throws Exception {
>                 User user1 = dao.getUser(new Long(1));
>                 User user2 = dao.getUser(new Long(2));
>                 try {
>                         user2.setEmail(user1.getEmail());
>                         dao.saveUser(user2);
>                         fail("saveUser didn't throw DataIntegrityViolationException when
> same email is inserted");
>                 } catch (DataIntegrityViolationException e) {
>                         assertNotNull(e);
>                         log.debug("expected exception: " + e.getMessage());
>                 }
>         }
>
> ===UserHibernateDao.java===
>         public void saveUser(final User user) {
>                 if (log.isDebugEnabled()) {
>                         log.debug("user's id: " + user.getId());
>                 }
>                 getHibernateTemplate().saveOrUpdate(user);
>                 getHibernateTemplate().flush();
>         }
>
>
> ===Exception Log:===
>   [junit] [platform] ERROR [main]
> JDBCExceptionReporter.logExceptions(72) | Duplicate entry
> 'matt_raible@yahoo.com' for key 3
>     [junit] [platform] ERROR [main]
> AbstractFlushingEventListener.performExecutions(301) | Could not
> synchronize database state with session
>     [junit] org.hibernate.exception.ConstraintViolationException: could
> not update: [com.rosonix.platform.model.User#2]
> ....
>
>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
> For additional commands, e-mail: log4j-user-help@logging.apache.org
>
>


-- 
James Stauffer        http://www.geocities.com/stauffer_james/
Are you good? Take the test at http://www.livingwaters.com/good/

---------------------------------------------------------------------
To unsubscribe, e-mail: log4j-user-unsubscribe@logging.apache.org
For additional commands, e-mail: log4j-user-help@logging.apache.org


Mime
View raw message