📄 cmttest.java
字号:
//$Id: CMTTest.java 11303 2007-03-19 22:06:14Z steve.ebersole@jboss.com $package org.hibernate.test.tm;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import javax.transaction.Transaction;import junit.framework.Test;import org.hibernate.ConnectionReleaseMode;import org.hibernate.EntityMode;import org.hibernate.ScrollableResults;import org.hibernate.Session;import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Environment;import org.hibernate.criterion.Order;import org.hibernate.junit.functional.FunctionalTestCase;import org.hibernate.junit.functional.FunctionalTestClassTestSuite;import org.hibernate.transaction.CMTTransactionFactory;import org.hibernate.util.SerializationHelper;/** * @author Gavin King */public class CMTTest extends FunctionalTestCase { public CMTTest(String str) { super( str ); } public String[] getMappings() { return new String[] { "tm/Item.hbm.xml" }; } public void configure(Configuration cfg) { cfg.setProperty( Environment.CONNECTION_PROVIDER, ConnectionProviderImpl.class.getName() ); cfg.setProperty( Environment.TRANSACTION_MANAGER_STRATEGY, TransactionManagerLookupImpl.class.getName() ); cfg.setProperty( Environment.TRANSACTION_STRATEGY, CMTTransactionFactory.class.getName() ); cfg.setProperty( Environment.AUTO_CLOSE_SESSION, "true" ); cfg.setProperty( Environment.FLUSH_BEFORE_COMPLETION, "true" ); cfg.setProperty( Environment.RELEASE_CONNECTIONS, ConnectionReleaseMode.AFTER_STATEMENT.toString() ); cfg.setProperty( Environment.GENERATE_STATISTICS, "true" ); cfg.setProperty( Environment.USE_QUERY_CACHE, "true" ); cfg.setProperty( Environment.DEFAULT_ENTITY_MODE, EntityMode.MAP.toString() ); } public String getCacheConcurrencyStrategy() { return "transactional"; } public static Test suite() { return new FunctionalTestClassTestSuite( CMTTest.class ); } public void testConcurrent() throws Exception { getSessions().getStatistics().clear(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s = openSession(); Map foo = new HashMap(); foo.put( "name", "Foo" ); foo.put( "description", "a big foo" ); s.persist( "Item", foo ); Map bar = new HashMap(); bar.put( "name", "Bar" ); bar.put( "description", "a small bar" ); s.persist( "Item", bar ); SimpleJtaTransactionManagerImpl.getInstance().commit(); getSessions().evictEntity( "Item" ); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s1 = openSession(); foo = ( Map ) s1.get( "Item", "Foo" ); //foo.put("description", "a big red foo"); //s1.flush(); Transaction tx1 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s2 = openSession(); foo = ( Map ) s2.get( "Item", "Foo" ); SimpleJtaTransactionManagerImpl.getInstance().commit(); SimpleJtaTransactionManagerImpl.getInstance().resume( tx1 ); tx1.commit(); getSessions().evictEntity( "Item" ); SimpleJtaTransactionManagerImpl.getInstance().begin(); s1 = openSession(); s1.createCriteria( "Item" ).list(); //foo.put("description", "a big red foo"); //s1.flush(); tx1 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); s2 = openSession(); s2.createCriteria( "Item" ).list(); SimpleJtaTransactionManagerImpl.getInstance().commit(); SimpleJtaTransactionManagerImpl.getInstance().resume( tx1 ); tx1.commit(); SimpleJtaTransactionManagerImpl.getInstance().begin(); s2 = openSession(); s2.createCriteria( "Item" ).list(); SimpleJtaTransactionManagerImpl.getInstance().commit(); assertEquals( getSessions().getStatistics().getEntityLoadCount(), 7 ); assertEquals( getSessions().getStatistics().getEntityFetchCount(), 0 ); assertEquals( getSessions().getStatistics().getQueryExecutionCount(), 3 ); assertEquals( getSessions().getStatistics().getQueryCacheHitCount(), 0 ); assertEquals( getSessions().getStatistics().getQueryCacheMissCount(), 0 ); SimpleJtaTransactionManagerImpl.getInstance().begin(); s = openSession(); s.createQuery( "delete from Item" ).executeUpdate(); SimpleJtaTransactionManagerImpl.getInstance().commit(); } public void testConcurrentCachedQueries() throws Exception { SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s = openSession(); Map foo = new HashMap(); foo.put( "name", "Foo" ); foo.put( "description", "a big foo" ); s.persist( "Item", foo ); Map bar = new HashMap(); bar.put( "name", "Bar" ); bar.put( "description", "a small bar" ); s.persist( "Item", bar ); SimpleJtaTransactionManagerImpl.getInstance().commit(); synchronized ( this ) { wait( 1000 ); } getSessions().getStatistics().clear(); getSessions().evictEntity( "Item" ); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s4 = openSession(); Transaction tx4 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s1 = openSession(); List r1 = s1.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); assertEquals( r1.size(), 2 ); Transaction tx1 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s2 = openSession(); List r2 = s2.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); assertEquals( r2.size(), 2 ); SimpleJtaTransactionManagerImpl.getInstance().commit(); assertEquals( getSessions().getStatistics().getSecondLevelCacheHitCount(), 2 ); assertEquals( getSessions().getStatistics().getSecondLevelCacheMissCount(), 0 ); assertEquals( getSessions().getStatistics().getEntityLoadCount(), 2 ); assertEquals( getSessions().getStatistics().getEntityFetchCount(), 0 ); assertEquals( getSessions().getStatistics().getQueryExecutionCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCachePutCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCacheHitCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCacheMissCount(), 1 ); SimpleJtaTransactionManagerImpl.getInstance().resume( tx1 ); tx1.commit(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s3 = openSession(); s3.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); SimpleJtaTransactionManagerImpl.getInstance().commit(); assertEquals( getSessions().getStatistics().getSecondLevelCacheHitCount(), 4 ); assertEquals( getSessions().getStatistics().getSecondLevelCacheMissCount(), 0 ); assertEquals( getSessions().getStatistics().getEntityLoadCount(), 2 ); assertEquals( getSessions().getStatistics().getEntityFetchCount(), 0 ); assertEquals( getSessions().getStatistics().getQueryExecutionCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCachePutCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCacheHitCount(), 2 ); assertEquals( getSessions().getStatistics().getQueryCacheMissCount(), 1 ); SimpleJtaTransactionManagerImpl.getInstance().resume( tx4 ); List r4 = s4.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); assertEquals( r4.size(), 2 ); tx4.commit(); assertEquals( getSessions().getStatistics().getSecondLevelCacheHitCount(), 6 ); assertEquals( getSessions().getStatistics().getSecondLevelCacheMissCount(), 0 ); assertEquals( getSessions().getStatistics().getEntityLoadCount(), 2 ); assertEquals( getSessions().getStatistics().getEntityFetchCount(), 0 ); assertEquals( getSessions().getStatistics().getQueryExecutionCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCachePutCount(), 1 ); assertEquals( getSessions().getStatistics().getQueryCacheHitCount(), 3 ); assertEquals( getSessions().getStatistics().getQueryCacheMissCount(), 1 ); SimpleJtaTransactionManagerImpl.getInstance().begin(); s = openSession(); s.createQuery( "delete from Item" ).executeUpdate(); SimpleJtaTransactionManagerImpl.getInstance().commit(); } public void testConcurrentCachedDirtyQueries() throws Exception { if ( getDialect().doesReadCommittedCauseWritersToBlockReaders() ) { reportSkip( "write locks block readers", "concurrent queries" ); return; } SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s = openSession(); Map foo = new HashMap(); foo.put( "name", "Foo" ); foo.put( "description", "a big foo" ); s.persist( "Item", foo ); Map bar = new HashMap(); bar.put( "name", "Bar" ); bar.put( "description", "a small bar" ); s.persist( "Item", bar ); SimpleJtaTransactionManagerImpl.getInstance().commit(); synchronized ( this ) { wait( 1000 ); } getSessions().getStatistics().clear(); getSessions().evictEntity( "Item" ); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s4 = openSession(); Transaction tx4 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s1 = openSession(); List r1 = s1.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); assertEquals( r1.size(), 2 ); foo = ( Map ) r1.get( 0 ); foo.put( "description", "a big red foo" ); s1.flush(); Transaction tx1 = SimpleJtaTransactionManagerImpl.getInstance().suspend(); SimpleJtaTransactionManagerImpl.getInstance().begin(); Session s2 = openSession(); List r2 = s2.createCriteria( "Item" ).addOrder( Order.asc( "description" ) ) .setCacheable( true ).list(); assertEquals( r2.size(), 2 ); SimpleJtaTransactionManagerImpl.getInstance().commit();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -