[hibernate-users] Issue with dead threads
Robert Klemme
shortcutter at googlemail.com
Wed Mar 14 04:08:00 EDT 2007
Hi Raymond,
since you show just one piece of code and your issue is a deadlock one
cannot really give much advice. It's even unclear whether the code
you showed participated in the deadlock.
I suggest to either trace or debug to find deadlocked threads. Since
there is a DB involved your deadlock might actually consist of Java
and DB locks. If it were a DB only deadlock, chances are that your DB
detects it and kills one of the two transactions (MS SQL Server does
for example).
Kind regards
robert
2007/3/14, Raymond Auge <rauge at liferay.com>:
>
> Hello All,
>
> I'm in need of some insight on a hibernate problem.
>
> A little about the environment
>
> - hibernate 3.2 CR2
> - Spring 1.2.8
>
> some background...
>
> We have some logic which performs several operations on the db in a fairly
> random sequence... one of the operations is an SQL insert via hibernate
>
> try {
> session = openSession();
>
> if (draftAction.isNew()) {
> session.save(draftAction);
> }
>
> session.flush();
> draftAction.setNew(false);
>
> return draftAction;
> } catch (HibernateException he) {
> throw new SystemException(he);
> } finally {
> }
>
>
> Now, since the sequence is random, we are expecting an exception to be
> thrown, because due to the behaviour of our business logic, the object we're
> trying ti insert may already exist in the db. So we are
> anticipating it.
>
> Here is the info log in the catch block wrapping the dao insert call:
> 22:19:41,634 INFO [DraftUtil:581] com.sc.ScApplicationException:
> com.liferay.portal.SystemException:
> org.hibernate.exception.ConstraintViolationException: Could not execute JDBC
> batch update
> com.liferay.portal.SystemException: com.sc.ScApplicationException:
> com.liferay.portal.SystemException:
> org.hibernate.exception.ConstraintViolationException: Could not execute JDBC
> batch update
> at
> com.sc.portlet.draft.service.spring.DraftActionLocalServiceUtil.addDraftAction(DraftActionLocalServiceUtil.java:14)
> at com.sc.portlet.draft.util.DraftUtil.doAutoDraft(DraftUtil.java:570)
> at com.sc.portlet.draft.util.DraftUtil.autoDraftRound(DraftUtil.java:495)
> at
> com.sc.portlet.fantasyteam.mlb.draft.action.JSONDraftedDataAction.getJSON
>
>
> So, at a high level, imagine that there are 1000 choices to pick from, only
> one choice can be made, choices are made randomly, everyone's choice must be
> unique among the 1000, and there are 12 people making a choice in a random
> order, one after another. in a loop...
>
> So the insert is both the selection action and the determination of whether
> the choice is already used up (when the exception is thrown, try again)...
>
>
> The problem: randomly during execution (but very frequently) we are getting
> threads which become deadlocked while performing this operation and never
> return, and eventually all thread in the system are used up and the server
> become unresponsive.
>
>
> Here is the hbm for one object:
>
>
> <class name="com.sc.portlet.draft.model.DraftAction" table="DraftAction">
> <cache usage="read-write" />
> <composite-id name="primaryKey"
> class="com.sc.portlet.draft.service.persistence.DraftActionPK">
> <key-property name="draftId" />
> <key-property name="fantasyTeamId" />
> <key-property name="round" />
> </composite-id>
> <property name="action" type="com.liferay.util.dao.hibernate.StringType" />
> <property name="range" type="com.liferay.util.dao.hibernate.StringType" />
> <property name="playerId" type="com.liferay.util.dao.hibernate.StringType"
> />
> <property name="createDate" />
> </class>
>
>
> Here is the Spring config for the dao:
>
> <bean
> id="com.sc.portlet.draft.service.spring.DraftActionLocalService.professional"
> class="com.sc.portlet.draft.service.impl.DraftActionLocalServiceImpl"
> lazy-init="true" />
> <bean
> id="com.sc.portlet.draft.service.spring.DraftActionLocalService.transaction"
> class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"
> lazy-init="true">
> <property name="transactionManager">
> <ref bean="liferayTransactionManager" />
> </property>
> <property name="target">
> <ref
> bean="com.sc.portlet.draft.service.spring.DraftActionLocalService.professional"
> />
> </property>
> <property name="transactionAttributes">
> <props>
> <prop key="*">PROPAGATION_REQUIRED</prop>
> </props>
> </property>
> </bean>
> <bean
> id="com.sc.portlet.draft.service.spring.DraftActionLocalServiceFactory"
> class="com.sc.portlet.draft.service.spring.DraftActionLocalServiceFactory"
> lazy-init="true">
> <property name="service">
> <ref
> bean="com.sc.portlet.draft.service.spring.DraftActionLocalService.transaction"
> />
> </property>
> </bean>
>
>
> If anyone has any insight on why this might occur I would be very greatful.
>
> Thank you,
>
>
> Raymond Auge
>
> _______________________________________________
> hibernate-users mailing list
> hibernate-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-users
>
>
--
Have a look: http://www.flickr.com/photos/fussel-foto/
More information about the hibernate-users
mailing list