[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