You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tapestry.apache.org by Angelo Chen <an...@yahoo.com.hk> on 2008/03/14 10:17:25 UTC

t5: handling of hibernate exceptions

Hi,

Following code is trying to save a new record with an email which already
exists, after running, then try to update the same record in another progam,
I got:

Lock wait timeout exceeded; try restarting transaction

un comment out //sessionManager.Abort, above problem fixed. but I still get
this error in the log, looks like after abort, hibernate still trying to
save:

[ERROR] JDBCExceptionReporter Duplicate entry 'wang123@catalina.ph' for key
2
[INFO] TimingFilter Request time: 42 ms
[ERROR] AssertionFailure an assertion failure occured (this may indicate a
bug in Hibernate, but is more likely due to unsafe use of the session)
org.hibernate.AssertionFailure: null id in org.bfe.istudio.t5.entities.Usr
entry (don't flush the Session after an exception occurs)
	at
org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
	at
org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)
	...


@Inject private Session session;

@Inject
private HibernateSessionManager sessionManager;

public void onActivate() {

Usr usr = new Usr();
usr.setName("123");
usr.setEmail("abc@abc.com");

try {
 	session.save(usr);
} catch (HibernateException e) {
	//sessionManager.abort();        
}

<property name="hibernate.connection.autocommit">false</property>


-- 
View this message in context: http://www.nabble.com/t5%3A-handling-of-hibernate-exceptions-tp16047005p16047005.html
Sent from the Tapestry - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: t5: handling of hibernate exceptions

Posted by Josh Canfield <jo...@thedailytube.com>.
Yeah, that wouldn't fly in any of the apps that I work on. If you have
known constraints that the user is going to run into then you deal
with them in a friendly and helpful manner. Your end users aren't
going to find the generic tapestry error page friendly or helpful.

Josh

On Fri, Mar 14, 2008 at 10:27 AM, nicholas Krul <ni...@gmail.com> wrote:
> doesn't T5 autoflush the hibernate session at the end of the page render,
> though?
>
> so either the user will see a valid page (and the transaction committed in
> the database), or an error page (and no commits).
>
> I hope so, as I'm trusting to this.
>
> --nK
>
> On Fri, Mar 14, 2008 at 5:07 PM, Josh Canfield <jo...@thedailytube.com>
> wrote:
>
> > When you call session.save() your object is not necessarily getting
> > sent to the database, and thus database constraint violations may not
> > be thrown. If you want to ensure the object is sent to the database at
> > that point call session.flush() which "...is the process of
> > synchronizing the underlying persistent store with persistable state
> > held in memory."
> >
> > http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#flush()<http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#flush%28%29>
>
> >
> > Josh
> >
> > On Fri, Mar 14, 2008 at 2:17 AM, Angelo Chen <an...@yahoo.com.hk>
> > wrote:
> > >
> > > Hi,
> > >
> > > Following code is trying to save a new record with an email which
> > already
> > > exists, after running, then try to update the same record in another
> > progam,
> > > I got:
> > >
> > > Lock wait timeout exceeded; try restarting transaction
> > >
> > > un comment out //sessionManager.Abort, above problem fixed. but I still
> > get
> > > this error in the log, looks like after abort, hibernate still trying to
> > > save:
> > >
> > > [ERROR] JDBCExceptionReporter Duplicate entry 'wang123@catalina.ph' for
> > key
> > > 2
> > > [INFO] TimingFilter Request time: 42 ms
> > > [ERROR] AssertionFailure an assertion failure occured (this may indicate
> > a
> > > bug in Hibernate, but is more likely due to unsafe use of the session)
> > > org.hibernate.AssertionFailure: null id in
> > org.bfe.istudio.t5.entities.Usr
> > > entry (don't flush the Session after an exception occurs)
> > >        at
> > > org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(
> > DefaultFlushEntityEventListener.java:55)
> > >        at
> > > org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(
> > DefaultFlushEntityEventListener.java:157)
> > >        ...
> > >
> > >
> > > @Inject private Session session;
> > >
> > > @Inject
> > > private HibernateSessionManager sessionManager;
> > >
> > > public void onActivate() {
> > >
> > > Usr usr = new Usr();
> > > usr.setName("123");
> > > usr.setEmail("abc@abc.com");
> > >
> > > try {
> > >        session.save(usr);
> > > } catch (HibernateException e) {
> > >        //sessionManager.abort();
> > > }
> > >
> > > <property name="hibernate.connection.autocommit">false</property>
> > >
> > >
> > > --
> > > View this message in context:
> > http://www.nabble.com/t5%3A-handling-of-hibernate-exceptions-tp16047005p16047005.html
> > > Sent from the Tapestry - User mailing list archive at Nabble.com.
> > >
> > >
> > > ---------------------------------------------------------------------
> > > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > > For additional commands, e-mail: users-help@tapestry.apache.org
> > >
> > >
> >
> >
> >
> > --
> > --
> > TheDailyTube.com. Sign up and get the best new videos on the internet
> > delivered fresh to your inbox.
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
>



-- 
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org


Re: t5: handling of hibernate exceptions

Posted by nicholas Krul <ni...@gmail.com>.
doesn't T5 autoflush the hibernate session at the end of the page render,
though?

so either the user will see a valid page (and the transaction committed in
the database), or an error page (and no commits).

I hope so, as I'm trusting to this.

--nK

On Fri, Mar 14, 2008 at 5:07 PM, Josh Canfield <jo...@thedailytube.com>
wrote:

> When you call session.save() your object is not necessarily getting
> sent to the database, and thus database constraint violations may not
> be thrown. If you want to ensure the object is sent to the database at
> that point call session.flush() which "...is the process of
> synchronizing the underlying persistent store with persistable state
> held in memory."
>
> http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#flush()<http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#flush%28%29>
>
> Josh
>
> On Fri, Mar 14, 2008 at 2:17 AM, Angelo Chen <an...@yahoo.com.hk>
> wrote:
> >
> > Hi,
> >
> > Following code is trying to save a new record with an email which
> already
> > exists, after running, then try to update the same record in another
> progam,
> > I got:
> >
> > Lock wait timeout exceeded; try restarting transaction
> >
> > un comment out //sessionManager.Abort, above problem fixed. but I still
> get
> > this error in the log, looks like after abort, hibernate still trying to
> > save:
> >
> > [ERROR] JDBCExceptionReporter Duplicate entry 'wang123@catalina.ph' for
> key
> > 2
> > [INFO] TimingFilter Request time: 42 ms
> > [ERROR] AssertionFailure an assertion failure occured (this may indicate
> a
> > bug in Hibernate, but is more likely due to unsafe use of the session)
> > org.hibernate.AssertionFailure: null id in
> org.bfe.istudio.t5.entities.Usr
> > entry (don't flush the Session after an exception occurs)
> >        at
> > org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(
> DefaultFlushEntityEventListener.java:55)
> >        at
> > org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(
> DefaultFlushEntityEventListener.java:157)
> >        ...
> >
> >
> > @Inject private Session session;
> >
> > @Inject
> > private HibernateSessionManager sessionManager;
> >
> > public void onActivate() {
> >
> > Usr usr = new Usr();
> > usr.setName("123");
> > usr.setEmail("abc@abc.com");
> >
> > try {
> >        session.save(usr);
> > } catch (HibernateException e) {
> >        //sessionManager.abort();
> > }
> >
> > <property name="hibernate.connection.autocommit">false</property>
> >
> >
> > --
> > View this message in context:
> http://www.nabble.com/t5%3A-handling-of-hibernate-exceptions-tp16047005p16047005.html
> > Sent from the Tapestry - User mailing list archive at Nabble.com.
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> > For additional commands, e-mail: users-help@tapestry.apache.org
> >
> >
>
>
>
> --
> --
> TheDailyTube.com. Sign up and get the best new videos on the internet
> delivered fresh to your inbox.
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>

Re: t5: handling of hibernate exceptions

Posted by Josh Canfield <jo...@thedailytube.com>.
When you call session.save() your object is not necessarily getting
sent to the database, and thus database constraint violations may not
be thrown. If you want to ensure the object is sent to the database at
that point call session.flush() which "...is the process of
synchronizing the underlying persistent store with persistable state
held in memory."
http://www.hibernate.org/hib_docs/v3/api/org/hibernate/Session.html#flush()

Josh

On Fri, Mar 14, 2008 at 2:17 AM, Angelo Chen <an...@yahoo.com.hk> wrote:
>
> Hi,
>
> Following code is trying to save a new record with an email which already
> exists, after running, then try to update the same record in another progam,
> I got:
>
> Lock wait timeout exceeded; try restarting transaction
>
> un comment out //sessionManager.Abort, above problem fixed. but I still get
> this error in the log, looks like after abort, hibernate still trying to
> save:
>
> [ERROR] JDBCExceptionReporter Duplicate entry 'wang123@catalina.ph' for key
> 2
> [INFO] TimingFilter Request time: 42 ms
> [ERROR] AssertionFailure an assertion failure occured (this may indicate a
> bug in Hibernate, but is more likely due to unsafe use of the session)
> org.hibernate.AssertionFailure: null id in org.bfe.istudio.t5.entities.Usr
> entry (don't flush the Session after an exception occurs)
>        at
> org.hibernate.event.def.DefaultFlushEntityEventListener.checkId(DefaultFlushEntityEventListener.java:55)
>        at
> org.hibernate.event.def.DefaultFlushEntityEventListener.getValues(DefaultFlushEntityEventListener.java:157)
>        ...
>
>
> @Inject private Session session;
>
> @Inject
> private HibernateSessionManager sessionManager;
>
> public void onActivate() {
>
> Usr usr = new Usr();
> usr.setName("123");
> usr.setEmail("abc@abc.com");
>
> try {
>        session.save(usr);
> } catch (HibernateException e) {
>        //sessionManager.abort();
> }
>
> <property name="hibernate.connection.autocommit">false</property>
>
>
> --
> View this message in context: http://www.nabble.com/t5%3A-handling-of-hibernate-exceptions-tp16047005p16047005.html
> Sent from the Tapestry - User mailing list archive at Nabble.com.
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
> For additional commands, e-mail: users-help@tapestry.apache.org
>
>



-- 
--
TheDailyTube.com. Sign up and get the best new videos on the internet
delivered fresh to your inbox.

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscribe@tapestry.apache.org
For additional commands, e-mail: users-help@tapestry.apache.org