[hibernate-commits] Hibernate SVN: r19729 - in core/branches/Branch_3_5: core/src/main/java/org/hibernate/impl and 1 other directories.

hibernate-commits at lists.jboss.org hibernate-commits at lists.jboss.org
Mon Jun 14 22:22:32 EDT 2010


Author: gbadner
Date: 2010-06-14 22:22:31 -0400 (Mon, 14 Jun 2010)
New Revision: 19729

Modified:
   core/branches/Branch_3_5/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java
   core/branches/Branch_3_5/core/src/main/java/org/hibernate/impl/SessionImpl.java
   core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/ConnectionManagementTestCase.java
   core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/Silly.hbm.xml
Log:
HHH-5195 : FilterImpl.validate() throws NullPointerException on deserialization

Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java	2010-06-15 02:15:54 UTC (rev 19728)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/engine/LoadQueryInfluencers.java	2010-06-15 02:22:31 UTC (rev 19729)
@@ -111,6 +111,14 @@
 		return enabledFilters;
 	}
 
+	/**
+	 * Returns an unmodifiable Set of enabled filter names.
+	 * @return an unmodifiable Set of enabled filter names.
+	 */
+	public Set getEnabledFilterNames() {
+		return java.util.Collections.unmodifiableSet( enabledFilters.keySet() );
+	}
+
 	public Filter getEnabledFilter(String filterName) {
 		return ( Filter ) enabledFilters.get( filterName );
 	}

Modified: core/branches/Branch_3_5/core/src/main/java/org/hibernate/impl/SessionImpl.java
===================================================================
--- core/branches/Branch_3_5/core/src/main/java/org/hibernate/impl/SessionImpl.java	2010-06-15 02:15:54 UTC (rev 19728)
+++ core/branches/Branch_3_5/core/src/main/java/org/hibernate/impl/SessionImpl.java	2010-06-15 02:22:31 UTC (rev 19729)
@@ -2141,9 +2141,16 @@
 
 		childSessionsByEntityMode = ( Map ) ois.readObject();
 
-		Iterator iter = loadQueryInfluencers.getEnabledFilters().values().iterator();
+		// LoadQueryInfluencers.getEnabledFilters() tries to validate each enabled
+		// filter, which will fail when called before FilterImpl.afterDeserialize( factory );
+		// Instead lookup the filter by name, call FilterImpl.afterDeserialize( factory ),
+		// and then validate.
+		Iterator iter = loadQueryInfluencers.getEnabledFilterNames().iterator();
 		while ( iter.hasNext() ) {
-			( ( FilterImpl ) iter.next() ).afterDeserialize( factory );
+			String filterName = ( String ) iter.next();
+			FilterImpl filter = ( FilterImpl ) loadQueryInfluencers.getEnabledFilter( filterName );
+			filter.afterDeserialize( factory );
+			filter.validate();
 		}
 
 		if ( isRootSession && childSessionsByEntityMode != null ) {

Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/ConnectionManagementTestCase.java
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/ConnectionManagementTestCase.java	2010-06-15 02:15:54 UTC (rev 19728)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/ConnectionManagementTestCase.java	2010-06-15 02:22:31 UTC (rev 19729)
@@ -130,6 +130,43 @@
 	}
 
 	/**
+	 * Tests to validate that a session holding JDBC resources will not
+	 * be allowed to serialize.
+	 */
+	public final void testEnabledFilterSerialization() throws Throwable {
+		prepare();
+		Session sessionUnderTest = getSessionUnderTest();
+
+		sessionUnderTest.enableFilter( "nameIsNull" );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+		sessionUnderTest.disconnect();
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+
+		byte[] bytes = SerializationHelper.serialize( sessionUnderTest );
+		checkSerializedState( sessionUnderTest );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+		reconnect( sessionUnderTest );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+		sessionUnderTest.disconnect();
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+
+		Session s2 = ( Session ) SerializationHelper.deserialize( bytes );
+		checkDeserializedState( s2 );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+		reconnect( s2 );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+
+		s2.disconnect();
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+		reconnect( s2 );
+		assertNotNull( sessionUnderTest.getEnabledFilter( "nameIsNull" ) );
+
+		release( sessionUnderTest );
+		release( s2 );
+		done();
+	}
+
+	/**
 	 * Test that a session which has been manually disconnected will be allowed
 	 * to serialize.
 	 */

Modified: core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/Silly.hbm.xml
===================================================================
--- core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/Silly.hbm.xml	2010-06-15 02:15:54 UTC (rev 19728)
+++ core/branches/Branch_3_5/testsuite/src/test/java/org/hibernate/test/connections/Silly.hbm.xml	2010-06-15 02:22:31 UTC (rev 19729)
@@ -20,4 +20,6 @@
 		<property name="name"/>
 	</class>
 
+    <filter-def name="nameIsNull" condition="name is null" />
+
 </hibernate-mapping>
\ No newline at end of file



More information about the hibernate-commits mailing list