⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aggressivereleasetest.java

📁 hibernate 开源框架的代码 jar包希望大家能喜欢
💻 JAVA
字号:
// $Id: AggressiveReleaseTest.java 10977 2006-12-12 23:28:04Z steve.ebersole@jboss.com $package org.hibernate.test.connections;import java.sql.Connection;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import junit.framework.Test;import org.hibernate.ConnectionReleaseMode;import org.hibernate.Hibernate;import org.hibernate.ScrollableResults;import org.hibernate.Session;import org.hibernate.cfg.Configuration;import org.hibernate.cfg.Environment;import org.hibernate.impl.SessionImpl;import org.hibernate.junit.functional.FunctionalTestClassTestSuite;import org.hibernate.test.tm.ConnectionProviderImpl;import org.hibernate.test.tm.SimpleJtaTransactionManagerImpl;import org.hibernate.test.tm.TransactionManagerLookupImpl;import org.hibernate.transaction.CMTTransactionFactory;import org.hibernate.util.SerializationHelper;/** * Implementation of AggressiveReleaseTest. * * @author Steve Ebersole */public class AggressiveReleaseTest extends ConnectionManagementTestCase {	public AggressiveReleaseTest(String name) {		super( name );	}	public static Test suite() {		return new FunctionalTestClassTestSuite( AggressiveReleaseTest.class );	}	public void configure(Configuration cfg) {		super.configure( 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.RELEASE_CONNECTIONS, ConnectionReleaseMode.AFTER_STATEMENT.toString() );		cfg.setProperty( Environment.GENERATE_STATISTICS, "true" );		cfg.setProperty( Environment.STATEMENT_BATCH_SIZE, "0" );	}	protected Session getSessionUnderTest() throws Throwable {		return openSession();	}	protected void reconnect(Session session) {		session.reconnect();	}	protected void prepare() throws Throwable {		SimpleJtaTransactionManagerImpl.getInstance().begin();	}	protected void done() throws Throwable {		SimpleJtaTransactionManagerImpl.getInstance().commit();	}	// Some additional tests specifically for the aggressive-release functionality...	public void testSerializationOnAfterStatementAggressiveRelease() throws Throwable {		prepare();		Session s = getSessionUnderTest();		Silly silly = new Silly( "silly" );		s.save( silly );		// this should cause the CM to obtain a connection, and then release it		s.flush();		// We should be able to serialize the session at this point...		SerializationHelper.serialize( s );		s.delete( silly );		s.flush();		release( s );		done();	}	public void testSerializationFailsOnAfterStatementAggressiveReleaseWithOpenResources() throws Throwable {		prepare();		Session s = getSessionUnderTest();		Silly silly = new Silly( "silly" );		s.save( silly );		// this should cause the CM to obtain a connection, and then release it		s.flush();		// both scroll() and iterate() cause the batcher to hold on		// to resources, which should make aggresive-release not release		// the connection (and thus cause serialization to fail)		ScrollableResults sr = s.createQuery( "from Silly" ).scroll();		try {			SerializationHelper.serialize( s );			fail( "Serialization allowed on connected session; or aggressive release released connection with open resources" );		}		catch( IllegalStateException e ) {			// expected behavior		}		// Closing the ScrollableResults does currently force the batcher to		// aggressively release the connection		sr.close();		SerializationHelper.serialize( s );		s.delete( silly );		s.flush();		release( s );		done();	}	public void testQueryIteration() throws Throwable {		prepare();		Session s = getSessionUnderTest();		Silly silly = new Silly( "silly" );		s.save( silly );		s.flush();		Iterator itr = s.createQuery( "from Silly" ).iterate();		assertTrue( itr.hasNext() );		Silly silly2 = ( Silly ) itr.next();		assertEquals( silly, silly2 );		Hibernate.close( itr );		itr = s.createQuery( "from Silly" ).iterate();		Iterator itr2 = s.createQuery( "from Silly where name = 'silly'" ).iterate();		assertTrue( itr.hasNext() );		assertEquals( silly, itr.next() );		assertTrue( itr2.hasNext() );		assertEquals( silly, itr2.next() );		Hibernate.close( itr );		Hibernate.close( itr2 );		s.delete( silly );		s.flush();		release( s );		done();	}	public void testQueryScrolling() throws Throwable {		prepare();		Session s = getSessionUnderTest();		Silly silly = new Silly( "silly" );		s.save( silly );		s.flush();		ScrollableResults sr = s.createQuery( "from Silly" ).scroll();		assertTrue( sr.next() );		Silly silly2 = ( Silly ) sr.get( 0 );		assertEquals( silly, silly2 );		sr.close();		sr = s.createQuery( "from Silly" ).scroll();		ScrollableResults sr2 = s.createQuery( "from Silly where name = 'silly'" ).scroll();		assertTrue( sr.next() );		assertEquals( silly, sr.get( 0 ) );		assertTrue( sr2.next() );		assertEquals( silly, sr2.get( 0 ) );		sr.close();		sr2.close();		s.delete( silly );		s.flush();		release( s );		done();	}	public void testSuppliedConnection() throws Throwable {		prepare();		Connection originalConnection = ConnectionProviderImpl.getActualConnectionProvider().getConnection();		Session session = getSessions().openSession( originalConnection );		Silly silly = new Silly( "silly" );		session.save( silly );		// this will cause the connection manager to cycle through the aggressive release logic;		// it should not release the connection since we explicitly suplied it ourselves.		session.flush();		assertTrue( "Different connections", originalConnection == session.connection() );		session.delete( silly );		session.flush();		release( session );		done();		ConnectionProviderImpl.getActualConnectionProvider().closeConnection( originalConnection );	}	public void testBorrowedConnections() throws Throwable {		prepare();		Session s = getSessionUnderTest();		Connection conn = s.connection();		assertTrue( ( ( SessionImpl ) s ).getJDBCContext().getConnectionManager().hasBorrowedConnection() );		conn.close();		assertFalse( ( ( SessionImpl ) s ).getJDBCContext().getConnectionManager().hasBorrowedConnection() );		release( s );		done();	}	public void testConnectionMaintanenceDuringFlush() throws Throwable {		prepare();		Session s = getSessionUnderTest();		s.beginTransaction();		List entities = new ArrayList();		for ( int i = 0; i < 10; i++ ) {			Other other = new Other( "other-" + i );			Silly silly = new Silly( "silly-" + i, other );			entities.add( silly );			s.save( silly );		}		s.flush();		Iterator itr = entities.iterator();		while ( itr.hasNext() ) {			Silly silly = ( Silly ) itr.next();			silly.setName( "new-" + silly.getName() );			silly.getOther().setName( "new-" + silly.getOther().getName() );		}		long initialCount = getSessions().getStatistics().getConnectCount();		s.flush();		assertEquals( "connection not maintained through flush", initialCount + 1, getSessions().getStatistics().getConnectCount() );		s.createQuery( "delete from Silly" ).executeUpdate();		s.createQuery( "delete from Other" ).executeUpdate();		s.getTransaction().commit();		release( s );		done();	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -