HHH-7298 regression, org.hibernate.ejb.test.lock.LockTest

This commit is contained in:
Strong Liu 2012-05-31 17:08:46 +08:00
parent 99cd8455a1
commit bf69f8a382
2 changed files with 20 additions and 27 deletions

View File

@ -633,12 +633,7 @@ public class QueryImpl<X> extends org.hibernate.ejb.AbstractQueryImpl<X> impleme
LockModeTypeHelper.getLockMode( lockModeType ) LockModeTypeHelper.getLockMode( lockModeType )
); );
if ( getHints()!=null && getHints().containsKey( AvailableSettings.LOCK_TIMEOUT ) ) { if ( getHints()!=null && getHints().containsKey( AvailableSettings.LOCK_TIMEOUT ) ) {
// convert milliseconds to seconds applyLockTimeout( ConfigurationHelper.getInteger( getHints().get( AvailableSettings.LOCK_TIMEOUT )) );
int timeout = (int) Math.round(
ConfigurationHelper.getInteger( getHints().get( AvailableSettings.LOCK_TIMEOUT ) )
.doubleValue() / 1000.0
);
applyTimeout( timeout );
} }
return this; return this;
} }

View File

@ -28,10 +28,8 @@ import org.hibernate.dialect.Oracle10gDialect;
import org.hibernate.dialect.PostgreSQL81Dialect; import org.hibernate.dialect.PostgreSQL81Dialect;
import org.hibernate.dialect.SybaseASE15Dialect; import org.hibernate.dialect.SybaseASE15Dialect;
import org.hibernate.ejb.AvailableSettings; import org.hibernate.ejb.AvailableSettings;
import org.hibernate.ejb.QueryHints;
import org.hibernate.ejb.test.BaseEntityManagerFunctionalTestCase; import org.hibernate.ejb.test.BaseEntityManagerFunctionalTestCase;
import org.hibernate.ejb.util.ConfigurationHelper;
import org.hibernate.internal.AbstractSessionImpl;
import org.hibernate.internal.QueryImpl;
import org.hibernate.testing.*; import org.hibernate.testing.*;
import org.jboss.logging.Logger; import org.jboss.logging.Logger;
import org.junit.Test; import org.junit.Test;
@ -447,8 +445,8 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = Oracle10gDialect.class ) @RequiresDialect( Oracle10gDialect.class )
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testContendedPessimisticReadLockTimeout() throws Exception { public void testContendedPessimisticReadLockTimeout() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
final EntityManager em2 = createIsolatedEntityManager(); final EntityManager em2 = createIsolatedEntityManager();
@ -486,7 +484,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
log.info( "testContendedPessimisticReadLockTimeout: (BG) read write-locked entity" ); log.info( "testContendedPessimisticReadLockTimeout: (BG) read write-locked entity" );
Map<String, Object> props = new HashMap<String, Object>(); Map<String, Object> props = new HashMap<String, Object>();
// timeout is in milliseconds // timeout is in milliseconds
props.put( "AvailableSettings.LOCK_TIMEOUT", 1000 ); props.put( AvailableSettings.LOCK_TIMEOUT, 1000 );
try { try {
em2.lock( lock2, LockModeType.PESSIMISTIC_READ, props ); em2.lock( lock2, LockModeType.PESSIMISTIC_READ, props );
} }
@ -540,8 +538,8 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = Oracle10gDialect.class ) @RequiresDialect( Oracle10gDialect.class )
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testContendedPessimisticWriteLockTimeout() throws Exception { public void testContendedPessimisticWriteLockTimeout() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
@ -580,7 +578,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
log.info( "testContendedPessimisticWriteLockTimeout: (BG) read write-locked entity" ); log.info( "testContendedPessimisticWriteLockTimeout: (BG) read write-locked entity" );
Map<String, Object> props = new HashMap<String, Object>(); Map<String, Object> props = new HashMap<String, Object>();
// timeout is in milliseconds // timeout is in milliseconds
props.put( "AvailableSettings.LOCK_TIMEOUT", 1000 ); props.put( AvailableSettings.LOCK_TIMEOUT, 1000 );
try { try {
em2.lock( lock2, LockModeType.PESSIMISTIC_WRITE, props ); em2.lock( lock2, LockModeType.PESSIMISTIC_WRITE, props );
} }
@ -629,8 +627,8 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = { Oracle10gDialect.class, PostgreSQL81Dialect.class }) @RequiresDialect( { Oracle10gDialect.class, PostgreSQL81Dialect.class })
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testContendedPessimisticWriteLockNoWait() throws Exception { public void testContendedPessimisticWriteLockNoWait() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
@ -669,7 +667,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
log.info( "testContendedPessimisticWriteLockNoWait: (BG) read write-locked entity" ); log.info( "testContendedPessimisticWriteLockNoWait: (BG) read write-locked entity" );
Map<String, Object> props = new HashMap<String, Object>(); Map<String, Object> props = new HashMap<String, Object>();
// timeout of zero means no wait (for lock) // timeout of zero means no wait (for lock)
props.put( "AvailableSettings.LOCK_TIMEOUT", 0 ); props.put( AvailableSettings.LOCK_TIMEOUT, 0 );
try { try {
em2.lock( lock2, LockModeType.PESSIMISTIC_WRITE, props ); em2.lock( lock2, LockModeType.PESSIMISTIC_WRITE, props );
} }
@ -718,8 +716,8 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = Oracle10gDialect.class ) @RequiresDialect( Oracle10gDialect.class )
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testQueryTimeout() throws Exception { public void testQueryTimeout() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
@ -760,7 +758,7 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
"select L from Lock_ L where L.id < 10000 " "select L from Lock_ L where L.id < 10000 "
); );
query.setLockMode( LockModeType.PESSIMISTIC_READ ); query.setLockMode( LockModeType.PESSIMISTIC_READ );
query.setHint( "javax.persistence.query.timeout", 500 ); // 1 sec timeout query.setHint( QueryHints.SPEC_HINT_TIMEOUT, 500 ); // 1 sec timeout
List<Lock> resultList = query.getResultList(); List<Lock> resultList = query.getResultList();
String name = resultList.get( 0 ).getName(); // force entity to be read String name = resultList.get( 0 ).getName(); // force entity to be read
log.info( "testQueryTimeout: name read =" + name ); log.info( "testQueryTimeout: name read =" + name );
@ -811,12 +809,12 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = Oracle10gDialect.class ) @RequiresDialect( Oracle10gDialect.class )
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testQueryTimeoutEMProps() throws Exception { public void testQueryTimeoutEMProps() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
Map<String, Object> queryTimeoutProps = new HashMap<String, Object>(); Map<String, Object> queryTimeoutProps = new HashMap<String, Object>();
queryTimeoutProps.put( "javax.persistence.query.timeout", 500 ); // 1 sec timeout (should round up) queryTimeoutProps.put( QueryHints.SPEC_HINT_TIMEOUT, 500 ); // 1 sec timeout (should round up)
final EntityManager em2 = createIsolatedEntityManager( queryTimeoutProps ); final EntityManager em2 = createIsolatedEntityManager( queryTimeoutProps );
Lock lock = new Lock(); Lock lock = new Lock();
Thread t = null; Thread t = null;
@ -904,13 +902,13 @@ public class LockTest extends BaseEntityManagerFunctionalTestCase {
} }
@Test @Test
@RequiresDialect( value = Oracle10gDialect.class ) @RequiresDialect( Oracle10gDialect.class )
@RequiresDialectFeature( value = DialectChecks.SupportsLockTimeouts.class ) @RequiresDialectFeature( DialectChecks.SupportsLockTimeouts.class )
public void testLockTimeoutEMProps() throws Exception { public void testLockTimeoutEMProps() throws Exception {
EntityManager em = getOrCreateEntityManager(); EntityManager em = getOrCreateEntityManager();
Map<String, Object> TimeoutProps = new HashMap<String, Object>(); Map<String, Object> TimeoutProps = new HashMap<String, Object>();
TimeoutProps.put( "AvailableSettings.LOCK_TIMEOUT", 1000 ); // 1 second timeout TimeoutProps.put( AvailableSettings.LOCK_TIMEOUT, 1000 ); // 1 second timeout
final EntityManager em2 = createIsolatedEntityManager( TimeoutProps ); final EntityManager em2 = createIsolatedEntityManager( TimeoutProps );
Lock lock = new Lock(); Lock lock = new Lock();
Thread t = null; Thread t = null;