<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
        <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" /> <base href="https://hibernate.atlassian.net" /> 
        <title>Message Title</title> 
    </head> 
    <body class="jira" style="color: #333; font-family: Arial, sans-serif; font-size: 14px; line-height: 1.429"> 
        <table id="background-table" cellpadding="0" cellspacing="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; background-color: #f5f5f5; border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
            <!-- header here --> 
            <tr> 
                <td id="header-pattern-container" style="padding: 0px; border-collapse: collapse; padding: 10px 20px"> 
                    <table id="header-pattern" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="header-avatar-image-container" valign="top" style="padding: 0px; border-collapse: collapse; vertical-align: top; width: 32px; padding-right: 8px"> <img id="header-avatar-image" class="image_fix" src="https://secure.gravatar.com/avatar/fc24ff369f892ea9c155e48c5b2ee633?d=mm&amp;s=48" height="32" width="32" border="0" style="border-radius: 3px; vertical-align: top" /> 
                            </td> 
                            <td id="header-text-container" valign="middle" style="padding: 0px; border-collapse: collapse; vertical-align: middle; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> <a class="user-hover" rel="Vyacheslav Nikulin" id="email_Vyacheslav Nikulin" href="https://hibernate.atlassian.net/secure/ViewProfile.jspa?name=Vyacheslav+Nikulin" style="color:#6c797f;; color: #3b73af; text-decoration: none">Vyacheslav Nikulin</a> <strong>edited a comment</strong> on <a href="https://hibernate.atlassian.net/browse/HHH-9070" style="color: #3b73af; text-decoration: none"><img src="cid:jira-generated-image-static-bug-23a565f1-7391-42cf-acdc-a9e63b475166" height="16" width="16" border="0" align="absmiddle" alt="Bug" /> HHH-9070</a> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="email-content-container" style="padding: 0px; border-collapse: collapse; padding: 0 20px"> 
                    <table id="email-content-table" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; border-spacing: 0; border-collapse: separate"> 
                        <tr> 
                            <!-- there needs to be content in the cell for it to render in some clients --> 
                            <td class="email-content-rounded-top mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 15px; background-color: #fff; border-left: 1px solid #ccc; border-top: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom: 0; border-top-right-radius: 5px; border-top-left-radius: 5px; height: 10px; line-height: 10px; padding: 0 15px 0 16px; mso-line-height-rule: exactly">
                                &nbsp;
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table class="page-title-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td style="vertical-align: top;; padding: 0px; border-collapse: collapse; padding-right: 5px; font-size: 20px; line-height: 30px; mso-line-height-rule: exactly" class="page-title-pattern-header-container"> <span class="page-title-pattern-header" style="font-family: Arial, sans-serif; padding: 0; font-size: 20px; line-height: 30px; mso-text-raise: 2px; mso-line-height-rule: exactly; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-9070" style="color: #3b73af; text-decoration: none">Re: Deadlock using ehcache 2.7.5 and CacheConcurrencyStrategy.READ_WRITE </a> </span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td id="text-paragraph-pattern-top" class="email-content-main mobile-expand  comment-top-special-margin comment-top-pattern" style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff; border-bottom: none; padding-bottom: 0"> 
                                <table class="text-paragraph-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 2px"> 
                                    <tr> 
                                        <td class="text-paragraph-pattern-container mobile-resize-text " style="padding: 0px; border-collapse: collapse; padding: 0 0 10px 0; padding-top: 10px"> <span class="diffcontext">After&nbsp;several&nbsp;hours&nbsp;we&nbsp;were&nbsp;able&nbsp;to&nbsp;create&nbsp;a&nbsp;test&nbsp;case.<br />Here</span> <span class="diffaddedchars" style="background-color:#ddfade;">&nbsp;is</span> <span class="diffcontext">&nbsp;all&nbsp;data&nbsp;that&nbsp;you&nbsp;need.&nbsp;<br /><br />{code:title=ehcache.xml}<br />&lt;ehcache&nbsp;updateCheck=&quot;false&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;monitoring=&quot;on&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dynamicConfig=&quot;false&quot;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;name=&quot;TestCache&quot;&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&nbsp;&nbsp;&nbsp;&nbsp;&lt;defaultCache&nbsp;maxEntriesLocalHeap=&quot;2&quot;/&gt;&nbsp;&nbsp;&nbsp;&nbsp;<br />&lt;/ehcache&gt;<br />{code}<br /><br />{code:title=hibernate.xml}<br />&lt;property&nbsp;name=&quot;hibernate.cache.use_second_level_cache&quot;&gt;true&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;net.sf.ehcache.configurationResourceName&quot;&gt;ehcache.xml&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.default_batch_fetch_size&quot;&gt;0&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.cache.provider_class&quot;&gt;org.hibernate.cache.ehcache.EhCacheProvider&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.cache.use_structured_entries&quot;&gt;true&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.cache.use_query_cache&quot;&gt;true&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.cache.use_minimal_puts&quot;&gt;true&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.max_fetch_depth&quot;&gt;1&lt;/property&gt;<br />&lt;property&nbsp;name=&quot;hibernate.cache.region.factory_class&quot;&gt;org.hibernate.cache.ehcache.EhCacheRegionFactory&lt;/property&gt;<br />{code}<br /><br />{code:title=create.sql}<br />drop&nbsp;table&nbsp;if&nbsp;exists&nbsp;EhCacheDeadLockTest;<br />create&nbsp;table&nbsp;EhCacheDeadLockTest&nbsp;(`id`&nbsp;int&nbsp;not&nbsp;null,`value`&nbsp;varchar(255)&nbsp;not&nbsp;null,&nbsp;primary&nbsp;key&nbsp;(`id`)&nbsp;)&nbsp;engine=InnoDB;<br />insert&nbsp;into&nbsp;EhCacheDeadLockTest&nbsp;values&nbsp;(1,'1');<br />insert&nbsp;into&nbsp;EhCacheDeadLockTest&nbsp;values&nbsp;(2,'2');<br />insert&nbsp;into&nbsp;EhCacheDeadLockTest&nbsp;values&nbsp;(10010003,'3');<br />insert&nbsp;into&nbsp;EhCacheDeadLockTest&nbsp;values&nbsp;(10010004,'4');<br />{code}<br /><br />{code:title=EhCacheDeadLockEntity.java|borderStyle=solid}<br />import&nbsp;org.hibernate.annotations.Cache;<br />import&nbsp;org.hibernate.annotations.CacheConcurrencyStrategy;<br /><br />import&nbsp;javax.persistence.Column;<br />import&nbsp;javax.persistence.Entity;<br />import&nbsp;javax.persistence.Id;<br />import&nbsp;javax.persistence.Table;<br /><br />@Entity<br />@Table(&nbsp;name&nbsp;=&nbsp;&quot;EhCacheDeadLockTest&quot;&nbsp;)<br />@Cache(&nbsp;usage&nbsp;=&nbsp;CacheConcurrencyStrategy.READ_WRITE&nbsp;)<br />public&nbsp;class&nbsp;EhCacheDeadLockEntity<br />{<br /> @Id<br /> @Column(&nbsp;name&nbsp;=&nbsp;&quot;id&quot;&nbsp;)<br /> private&nbsp;int&nbsp;id;<br /><br /> @Column(&nbsp;name&nbsp;=&nbsp;&quot;value&quot;&nbsp;)<br /> private&nbsp;String&nbsp;value;<br /><br /> public&nbsp;int&nbsp;getId()<br /> {<br /> return&nbsp;id;<br /> }<br /><br /> public&nbsp;void&nbsp;setId(&nbsp;int&nbsp;id&nbsp;)<br /> {<br /> this.id&nbsp;=&nbsp;id;<br /> }<br /><br /> public&nbsp;String&nbsp;getValue()<br /> {<br /> return&nbsp;value;<br /> }<br /><br /> public&nbsp;void&nbsp;setValue(&nbsp;String&nbsp;value&nbsp;)<br /> {<br /> this.value&nbsp;=&nbsp;value;<br /> }<br /><br /> @Override<br /> public&nbsp;String&nbsp;toString()<br /> {<br /> return&nbsp;&quot;EhCacheDeadLockEntity{&quot;&nbsp;+<br /> &quot;id=&quot;&nbsp;+&nbsp;id&nbsp;+<br /> &quot;,&nbsp;value='&quot;&nbsp;+&nbsp;value&nbsp;+&nbsp;'\''&nbsp;+<br /> '}';<br /> }<br /><br /> @Override<br /> public&nbsp;boolean&nbsp;equals(&nbsp;Object&nbsp;o&nbsp;)<br /> {<br /> if&nbsp;(&nbsp;this&nbsp;==&nbsp;o&nbsp;)&nbsp;return&nbsp;true;<br /> if&nbsp;(&nbsp;!(&nbsp;o&nbsp;instanceof&nbsp;EhCacheDeadLockEntity&nbsp;)&nbsp;)&nbsp;return&nbsp;false;<br /><br /> EhCacheDeadLockEntity&nbsp;that&nbsp;=&nbsp;(EhCacheDeadLockEntity)&nbsp;o;<br /><br /> if&nbsp;(&nbsp;id&nbsp;!=&nbsp;that.id&nbsp;)&nbsp;return&nbsp;false;<br /><br /> return&nbsp;true;<br /> }<br /><br /> @Override<br /> public&nbsp;int&nbsp;hashCode()<br /> {<br /> return&nbsp;id;<br /> }<br />}<br /><br />{code}<br /><br />{code:title=EhCacheDeadLockTest.java|borderStyle=solid}<br /><br />private&nbsp;static&nbsp;final&nbsp;int[]&nbsp;ID_LIST&nbsp;=&nbsp;new&nbsp;int[]{&nbsp;1,&nbsp;2,&nbsp;10010003,&nbsp;10010004&nbsp;};<br />static&nbsp;volatile&nbsp;boolean&nbsp;finish&nbsp;=&nbsp;false;<br />static&nbsp;AtomicInteger&nbsp;counter&nbsp;=&nbsp;new&nbsp;AtomicInteger();<br /><br />class&nbsp;Worker&nbsp;implements&nbsp;Runnable<br /> {<br /> Random&nbsp;rnd&nbsp;=&nbsp;new&nbsp;Random();<br /><br /> @Override<br /> public&nbsp;void&nbsp;run()<br /> {<br /> while&nbsp;(&nbsp;!finish&nbsp;)<br /> {<br /> try<br /> {<br /> final&nbsp;Session&nbsp;session&nbsp;=&nbsp;HibernateFactory.getCurrentSession();<br /> Transaction&nbsp;tx&nbsp;=&nbsp;session.beginTransaction();<br /> try<br /> {<br /> session.clear();<br /> int&nbsp;id&nbsp;=&nbsp;ID_LIST[rnd.nextInt(&nbsp;ID_LIST.length&nbsp;)];<br /> EhCacheDeadLockEntity&nbsp;entity&nbsp;=&nbsp;(EhCacheDeadLockEntity)&nbsp;session.get(&nbsp;EhCacheDeadLockEntity.class,&nbsp;id&nbsp;);<br /> entity.setValue(&nbsp;String.valueOf(&nbsp;rnd.nextInt()&nbsp;)&nbsp;);<br /> session.save(&nbsp;entity&nbsp;);<br /> }<br /> finally<br /> {<br /> tx.commit();<br /> counter.incrementAndGet();<br /> }<br /> }<br /> catch&nbsp;(&nbsp;Throwable&nbsp;e&nbsp;)<br /> {<br /> System.out.println(&nbsp;e&nbsp;);<br /> }<br /> }<br /> }<br /> }<br /><br /> @Test<br /> public&nbsp;void&nbsp;testDeadLock()&nbsp;throws&nbsp;Exception<br /> {<br /> final&nbsp;int&nbsp;THREAD_COUNT&nbsp;=&nbsp;32;<br /> Worker[]&nbsp;workers&nbsp;=&nbsp;new&nbsp;Worker[THREAD_COUNT];<br /> Thread[]&nbsp;threads&nbsp;=&nbsp;new&nbsp;Thread[THREAD_COUNT];<br /><br /> for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;workers.length;&nbsp;i++&nbsp;)&nbsp;workers[i]&nbsp;=&nbsp;new&nbsp;Worker();<br /><br /> for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;workers.length;&nbsp;i++&nbsp;)&nbsp;threads[i]&nbsp;=&nbsp;new&nbsp;Thread(&nbsp;workers[i]&nbsp;);<br /><br /> for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;workers.length;&nbsp;i++&nbsp;)&nbsp;threads[i].start();<br /><br /> Thread.sleep(&nbsp;5000&nbsp;);<br /> System.out.println(&nbsp;&quot;counter=&quot;&nbsp;+&nbsp;counter.get()&nbsp;);<br /> finish&nbsp;=&nbsp;true;<br /><br /> for&nbsp;(&nbsp;int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;&lt;&nbsp;workers.length;&nbsp;i++&nbsp;)&nbsp;threads[i].join();<br />}<br />{code}<br /></span> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <tr> 
                            <td class="email-content-main mobile-expand " style="padding: 0px; border-collapse: collapse; border-left: 1px solid #ccc; border-right: 1px solid #ccc; border-top: 0; border-bottom: 0; padding: 0 15px 0 16px; background-color: #fff"> 
                                <table id="actions-pattern" cellspacing="0" cellpadding="0" border="0" width="100%" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 1px"> 
                                    <tr> 
                                        <td id="actions-pattern-container" valign="middle" style="padding: 0px; border-collapse: collapse; padding: 10px 0 10px 24px; vertical-align: middle; padding-left: 0"> 
                                            <table align="left" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                                <tr> 
                                                    <td class="actions-pattern-action-icon-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 0px; vertical-align: middle"> <a href="https://hibernate.atlassian.net/browse/HHH-9070#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none"> <img class="actions-pattern-action-icon-image" src="cid:jira-generated-image-static-comment-icon-a5834320-dca5-4a51-951b-e87a292cbc67" alt="Add Comment" title="Add Comment" height="16" width="16" border="0" style="vertical-align: middle" /> </a> 
                                                    </td> 
                                                    <td class="actions-pattern-action-text-container" style="padding: 0px; border-collapse: collapse; font-family: Arial, sans-serif; font-size: 14px; line-height: 20px; mso-line-height-rule: exactly; mso-text-raise: 4px; padding-left: 5px"> <a href="https://hibernate.atlassian.net/browse/HHH-9070#add-comment" target="_blank" title="Add Comment" style="color: #3b73af; text-decoration: none">Add Comment</a> 
                                                    </td> 
                                                </tr> 
                                            </table> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                        <!-- there needs to be content in the cell for it to render in some clients --> 
                        <tr> 
                            <td class="email-content-rounded-bottom mobile-expand" style="padding: 0px; border-collapse: collapse; color: #fff; padding: 0 15px 0 16px; height: 5px; line-height: 5px; background-color: #fff; border-top: 0; border-left: 1px solid #ccc; border-bottom: 1px solid #ccc; border-right: 1px solid #ccc; border-bottom-right-radius: 5px; border-bottom-left-radius: 5px; mso-line-height-rule: exactly">
                                &nbsp;
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
            <tr> 
                <td id="footer-pattern" style="padding: 0px; border-collapse: collapse; padding: 12px 20px"> 
                    <table id="footer-pattern-container" cellspacing="0" cellpadding="0" border="0" style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                        <tr> 
                            <td id="footer-pattern-text" class="mobile-resize-text" width="100%" style="padding: 0px; border-collapse: collapse; color: #999; font-size: 12px; line-height: 18px; font-family: Arial, sans-serif; mso-line-height-rule: exactly; mso-text-raise: 2px">
                                 This message was sent by Atlassian JIRA <span id="footer-build-information">(v6.2-OD-10-004-WN#6253-<span title="0f638781a9eb90c00e546dda3da3aa1c24cb2738" data-commit-id="0f638781a9eb90c00e546dda3da3aa1c24cb2738}">sha1:0f63878</span>)</span> 
                            </td> 
                            <td id="footer-pattern-logo-desktop-container" valign="top" style="padding: 0px; border-collapse: collapse; padding-left: 20px; vertical-align: top"> 
                                <table style="border-collapse: collapse; mso-table-lspace: 0pt; mso-table-rspace: 0pt"> 
                                    <tr> 
                                        <td id="footer-pattern-logo-desktop-padding" style="padding: 0px; border-collapse: collapse; padding-top: 3px"> <img id="footer-pattern-logo-desktop" src="cid:jira-generated-image-static-footer-desktop-logo-724e5c7e-1216-4320-87b5-c010ce8e4bcb" alt="Atlassian logo" title="Atlassian logo" width="169" height="36" class="image_fix" /> 
                                        </td> 
                                    </tr> 
                                </table> 
                            </td> 
                        </tr> 
                    </table> 
                </td> 
            </tr> 
        </table>   
    </body>
</html>