You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2012/01/20 01:26:36 UTC

svn commit: r1233702 [1/2] - in /river/jtsk/skunk/peterConcurrentPolicy: ./ high-scale-lib/ qa/ qa/src/com/sun/jini/qa/resources/ qa/src/com/sun/jini/test/impl/start/ qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/ qa/src/com/sun/jini/test...

Author: peter_firmstone
Date: Fri Jan 20 00:26:34 2012
New Revision: 1233702

URL: http://svn.apache.org/viewvc?rev=1233702&view=rev
Log:
Added Cliff Clicks high-scale-lib and NonBlockingHashMap

Fixed hashCode behaviour in Equality based References.

Clean up class path dependencies in some tests, defined an altClasspath in qaDefaults.properties, so test classpath can be set in one place.

Added:
    river/jtsk/skunk/peterConcurrentPolicy/high-scale-lib/
    river/jtsk/skunk/peterConcurrentPolicy/high-scale-lib/high-scale-lib.jar   (with props)
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/CachingSecurityManager.java
      - copied, changed from r1232847, river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateSecurityManager.java
Removed:
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateSecurityManager.java
Modified:
    river/jtsk/skunk/peterConcurrentPolicy/build.xml
    river/jtsk/skunk/peterConcurrentPolicy/common.xml
    river/jtsk/skunk/peterConcurrentPolicy/qa/build.xml
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClassLoaderTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClasspathTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/CodebaseTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTestNonActivatable.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/GetContextTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/SubPoliciesTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/loadersplitpolicyprovider/LoaderSplitPolicyProviderTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContextElement_NoContext.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_NoContext.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_ProvidersParsing.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_Providers_NonNull.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/ConstructorAccessorTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_ExceptionTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_NullArgsTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_VerifyCodebaseIntegrityTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassExceptionTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_NullArgsTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_ReadAnnotationExceptionTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_VerifyCodebaseIntegrityTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConstructorTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConvertToMarshalledObjectTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_ExceptionTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_NormalTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ObjectMethodsTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/locatordiscovery/DiscardDNE.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedExceptionTest.td
    river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedTest.td
    river/jtsk/skunk/peterConcurrentPolicy/src/net/jini/security/policy/DynamicPolicyProvider.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/DelegatePermission.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/FileOutputStream.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/ConcurrentPermissions.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateCombinerSecurityManager.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/RevocablePolicy.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/Referrer.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/SoftReferenceKey.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/StrongReferenceKey.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/TempEqualReferrer.java
    river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/WeakReferenceKey.java

Modified: river/jtsk/skunk/peterConcurrentPolicy/build.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/build.xml?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/build.xml (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/build.xml Fri Jan 20 00:26:34 2012
@@ -524,9 +524,11 @@
     <target name="copy-extlibs" >
         <copy todir="lib">
             <fileset refid="asm.jars"/>
+            <fileset refid="high-scale-lib.jars"/>
         </copy>
     </target>
 
+    <!-- The following two targets should no longer be necessary.
     <target name="install-policy"
 		description="Installs jsk-policy.jar into the JRE extensions directory.">
         <copy file="${lib-ext.dir}/jsk-policy.jar" todir="${jre.ext.dir}"/>
@@ -535,7 +537,7 @@
     <target name="uninstall-policy"
 		description="Removes jsk-policy.jar from the JRE extensions directory.">
         <delete file="${jre.ext.dir}/jsk-policy.jar"/>
-    </target>
+    </target>-->
 
     <target name="stubs" description="Generate stubs"
 		depends="compile, phoenix.stubs, start.stubs">
@@ -699,41 +701,6 @@
             </fileset>
         </jar>
     </target>
-    
-    <!--
-        Deprecated since 2.1 - Scheduled for removal (RIVER-365)
-    -->
-    <!--<target name="jini-core.jar" depends="stubs">
-        <jar destfile="${lib.dir}/jini-core.jar" index="false">
-            <fileset dir="${build.classes.dir}"
-			 includes="net/jini/core/**"/>
-        </jar>
-    </target>-->
-
-    <!--
-        Deprecated since 2.1 - Scheduled for removal (RIVER-365)
-    -->
-    <!--<target name="jini-ext.jar" depends="stubs">
-        <property name="jini-ext.deps" location="${build.deps.dir}/jini-ext.deps"/>
-        <classdep output="${jini-ext.deps}"
-                classpathref="classdep.classes.classpath">
-            <arg value="-cp"/>
-            <arg path="${build.classes.dir}"/>
-            <arg value="-files"/>
-            <arg line="-in com.sun.jini"/>
-            <arg line="-in net.jini"/>
-            <arg line="-out net.jini.core"/>
-            <arg line="-prune net.jini.core"/>
-            <arg path="${build.classes.dir}/net/jini"/>
-            <arg path="${build.classes.dir}/com/sun/jini/discovery"/>
-        </classdep>
-        <jar destfile="${lib.dir}/jini-ext.jar"
-		     index="false"
-		     manifest="${src.manifest.dir}/jini-ext.mf">
-            <fileset dir="${build.classes.dir}"  includesfile="${jini-ext.deps}"/>
-        </jar>
-    </target>-->
-    
 
     <target name="jsk-debug-policy.jar" depends="stubs">
         <property name="jsk-debug-policy.deps" location="${build.deps.dir}/jsk-debug-policy.deps"/>
@@ -950,85 +917,6 @@
         </jar>
     </target>
 
-    <!--
-        Deprecated since 2.1 - Scheduled for removal
-        Note: the QA suite depends on some of the classes in sun-util.jar
-    -->
-   <!--<target name="sun-util.jar"	depends="stubs">
-        <property name="sun-util.deps" location="${build.deps.dir}/sun-util.deps"/>
-        <classdep output="${sun-util.deps}"
-                classpathref="classdep.classes.classpath">
-            <arg value="-cp"/>
-            <arg path="${build.classes.dir}"/>
-            <arg value="-files"/>
-            <arg value="com.sun.jini.discovery.ClientSubjectChecker"/>
-            <arg value="com.sun.jini.fiddler.FiddlerAdmin"/>
-            <arg value="com.sun.jini.outrigger.ConstrainableJavaSpaceAdmin"/>
-            <arg value="com.sun.jini.phoenix.ActivationAdmin"/>
-            <arg value="com.sun.jini.start.LifeCycle"/>
-            <arg value="com.sun.jini.start.ServiceProxyAccessor"/>
-            <arg line="-in com.sun.jini"/>
-        </classdep>
-        <jar destfile="${lib.dir}/sun-util.jar"
-		     duplicate="preserve"
-		     index="false">
-            <fileset  dir="${build.classes.dir}"  includesfile="${sun-util.deps}"/>
-            <fileset  dir="${build.classes.dir}"
-			    includes="com/sun/jini/action/**
-				      com/sun/jini/admin/**
-				      com/sun/jini/collection/**
-				      com/sun/jini/config/**
-				      com/sun/jini/constants/**
-				      com/sun/jini/landlord/**
-				      com/sun/jini/lease/**
-				      com/sun/jini/logging/**
-				      com/sun/jini/lookup/entry/**
-				      com/sun/jini/proxy/**
-				      com/sun/jini/reliableLog/**
-				      com/sun/jini/resource/**
-				      com/sun/jini/system/**
-				      com/sun/jini/thread/**"/>
-        </jar>
-    </target>-->
-
-    <!--
-        Deprecated since 2.1 - Scheduled for removal
-    -->
-    <!--<target name="sdm-dl.jar" depends="stubs">
-        <property name="sdm-dl.deps" location="${build.deps.dir}/sdm-dl.deps"/>
-        <classdep output="${sdm-dl.deps}">
-            <arg value="-cp"/>
-            <arg path="${build.classes.dir}"/>
-            <arg value="-files"/>
-            <arg line="${jskplatform.exclude}"/>
-            <arg line="-in com.sun.jini"/>
-            <arg line="-in net.jini"/>
-            <arg value="com.sun.jini.proxy.BasicProxyTrustVerifier"/>
-            <arg value="net.jini.lookup.ServiceDiscoveryManager$$LookupCacheImpl$$LookupListener_Stub"/>
-        </classdep>
-        <jar destfile="${lib-dl.dir}/sdm-dl.jar"
-		     index="false">
-            <fileset dir="${build.classes.dir}"  includesfile="${sdm-dl.deps}"/>
-        </jar>
-        <preferredlistgen>
-            <arg line="-cp"/>
-            <arg path="${lib.dir}/jsk-platform.jar"/>
-            <arg line="-jar"/>
-            <arg path="${lib-dl.dir}/sdm-dl.jar"/>
-            <arg line="-jar"/>
-            <arg path="${lib-dl.dir}/jsk-dl.jar"/>
-            <arg line="-proxy net.jini.lookup.ServiceDiscoveryManager$$LookupCacheImpl$$LookupListener_Stub"/>
-            <classpath refid="river.jars"/>
-        </preferredlistgen>
-    </target>-->
-
-    <!--<target name="sdm.stubs" depends="compile">
-        <rmic base="${build.classes.dir}" stubversion="1.2">
-            <classpath refid="river.jars"/>
-            <include name="net/jini/lookup/ServiceDiscoveryManager$$LookupCacheImpl$$LookupListener.class"/>
-        </rmic>
-    </target>-->
-
     <patternset id="svc-common-entries-set">
         <include name="JoinManager"/>
         <patternset id="dis-common-entries-set">

Modified: river/jtsk/skunk/peterConcurrentPolicy/common.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/common.xml?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/common.xml (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/common.xml Fri Jan 20 00:26:34 2012
@@ -96,7 +96,7 @@
         ## can be removed -->
     <property name="jskprivate.include" value="-in com.sun.jini.action -in com.sun.jini.collection -in com.sun.jini.constants -in com.sun.jini.system -in com.sun.jini.logging -skip com.sun.jini.logging.LogManager -skip com.sun.jini.logging.Levels -in com.sun.jini.outrigger"/>
     <!-- Common packages to exclude within ClassDep -->
-    <property name="jskplatform.exclude" value="-out com.sun.jini.discovery -out net.jini.activation -out net.jini.config -out net.jini.constraint -out net.jini.core -out net.jini.export -out net.jini.id -out net.jini.iiop -out net.jini.io -out net.jini.jeri -out net.jini.jrmp -out net.jini.loader -out net.jini.security -out net.jini.url -out org.apache.river -skip net.jini.discovery.ConstrainableLookupLocator -skip net.jini.discovery.ConstrainableLookupLocatorTrustVerifier -skip com.sun.jini.config.ConfigUtil -skip com.sun.jini.config.KeyStores -skip com.sun.jini.logging.LogManager"/>
+    <property name="jskplatform.exclude" value="-out com.sun.jini.discovery -out net.jini.activation -out net.jini.config -out net.jini.constraint -out net.jini.core -out net.jini.export -out net.jini.id -out net.jini.iiop -out net.jini.io -out net.jini.jeri -out net.jini.jrmp -out net.jini.loader -out net.jini.security -out net.jini.url -out org.apache.river.api -skip net.jini.discovery.ConstrainableLookupLocator -skip net.jini.discovery.ConstrainableLookupLocatorTrustVerifier -skip com.sun.jini.config.ConfigUtil -skip com.sun.jini.config.KeyStores -skip com.sun.jini.logging.LogManager"/>
 
     <property name="river.home" location="${root}"/>
     <property name="river.lib.dir" location="${river.home}/${lib}"/>
@@ -133,10 +133,16 @@
     <fileset id="velocity.jars" dir="${root}/velocity">
         <include name="velocity-1.7.jar" />
     </fileset>
+    
+    <fileset id="high-scale-lib.jars" dir="${root}/high-scale-lib">
+        <include name="high-scale-lib.jar" />
+    </fileset>
+    
 
     <path id="compile.classpath" >
         <fileset refid="asm.jars" />
         <fileset refid="velocity.jars" />
+        <fileset refid="high-scale-lib.jars" />
     </path>
 
 
@@ -148,7 +154,7 @@
         <path refid="river.classes"/>
         <path refid="asm.classpath"/>
     </path>
-
+   
     <path id="classdep.jar.classpath">
         <pathelement location="${river.lib.dir}/classdep.jar"/>
         <!--<path refid="asm.classpath" />-->

Added: river/jtsk/skunk/peterConcurrentPolicy/high-scale-lib/high-scale-lib.jar
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/high-scale-lib/high-scale-lib.jar?rev=1233702&view=auto
==============================================================================
Binary file - no diff available.

Propchange: river/jtsk/skunk/peterConcurrentPolicy/high-scale-lib/high-scale-lib.jar
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/build.xml
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/build.xml?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/build.xml (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/build.xml Fri Jan 20 00:26:34 2012
@@ -310,6 +310,7 @@
                     <fileset dir="${river.lib.dir}">
                         <include name="jsk-platform.jar"/>
                         <include name="jsk-lib.jar"/>
+                        <include name="high-scale-lib.jar"/>
                     </fileset>
                 </classpath>
                 <env key="SOUL" value="${soul}"/>

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/qa/resources/qaDefaults.properties
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/qa/resources/qaDefaults.properties?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/qa/resources/qaDefaults.properties (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/qa/resources/qaDefaults.properties Fri Jan 20 00:26:34 2012
@@ -252,7 +252,11 @@ testPolicyfile=<url:harness/policy/defau
 # The default classpath. This property must be defined, and must include
 # all Jini dependencies as components
 
-testClasspath=<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar$:${com.sun.jini.jsk.home}$/lib$/high-scale-lib.jar
+
+# Alternate test classpath, for tests that don't use <testJar>
+#
+altClasspath=<harnessJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar$:${com.sun.jini.jsk.home}$/lib$/high-scale-lib.jar
 
 #
 # Services run with server vm; test runs with client vm

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClassLoaderTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClassLoaderTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClassLoaderTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClassLoaderTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=ClassLoaderTest
 testCategories=start,start_impl
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 
 
 /*******************************************************************************

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClasspathTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClasspathTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClasspathTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/ClasspathTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=ClasspathTest
 testCategories=start,start_impl
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 
 
 /*******************************************************************************

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/CodebaseTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/CodebaseTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/CodebaseTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/CodebaseTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=CodebaseTest
 testCategories=start,start_impl
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 
 
 /*******************************************************************************

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=SecurityTest
 testCategories=start,start_impl
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 #testjvmargs=\
 #-Xdebug,\
 #-Xrunjdwp:transport=dt_socket+,address=8000+,server=y+,suspend=y,\

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTestNonActivatable.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTestNonActivatable.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTestNonActivatable.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/SecurityTestNonActivatable.td Fri Jan 20 00:26:34 2012
@@ -3,7 +3,7 @@ testCategories=start,start_impl
 
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 
 
 /*******************************************************************************

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/GetContextTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/GetContextTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/GetContextTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/GetContextTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=GetContextTest
 testCategories=start,start_impl
 #testClasspath=<harnessJar>$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 testPolicyfile=GetContextTest.policy
 getContextJarFile=<file:lib/qa1-start-cb1.jar>
 restoreContextJarFile=<file:lib/qa1-start-cb2.jar>

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/SubPoliciesTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/SubPoliciesTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/SubPoliciesTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/aggregatepolicyprovider/SubPoliciesTest.td Fri Jan 20 00:26:34 2012
@@ -2,7 +2,7 @@ testClass=SubPoliciesTest
 testCategories=start,start_impl
 #testClasspath=${com.sun.jini.qa.home}$/lib$/harness.jar$:${com.sun.jini.qa.home}$/lib$/qa1-start-tests.jar$:${com.sun.jini.qa.home}$/lib$/$qajinidep$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar
 
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 testPolicyfile=SubPoliciesTest.0.policy
 
 #!!!! the next two lines are wrong

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/loadersplitpolicyprovider/LoaderSplitPolicyProviderTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/loadersplitpolicyprovider/LoaderSplitPolicyProviderTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/loadersplitpolicyprovider/LoaderSplitPolicyProviderTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/impl/start/loadersplitpolicyprovider/LoaderSplitPolicyProviderTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=LoaderSplitPolicyProviderTest
 testCategories=start,start_impl
-testClasspath=<harnessJar>$:<file:lib/qa1-start-tests.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-start-tests.jar>
 testPolicyfile=<url:harness/policy/defaulttest.policy>
 ldrPolicyfile=<url:LoaderSplitPolicyProviderTest.loader.policy>
 defPolicyfile=<url:/LoaderSplitPolicyProviderTest.default.policy>

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContextElement_NoContext.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContextElement_NoContext.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContextElement_NoContext.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContextElement_NoContext.td Fri Jan 20 00:26:34 2012
@@ -1,5 +1,5 @@
 testClass=GetServerContextElement_NoContext
 testCategories=export_spec,spec
-testClasspath=<file:lib/qa1-export-servercontext-tests-null.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-export-servercontext-tests-null.jar>$:${testClasspath}
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_NoContext.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_NoContext.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_NoContext.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_NoContext.td Fri Jan 20 00:26:34 2012
@@ -1,5 +1,5 @@
 testClass=GetServerContext_NoContext
 testCategories=export_spec,spec
-testClasspath=<file:lib/qa1-export-servercontext-tests-null.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-export-servercontext-tests-null.jar>$:${testClasspath}
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_ProvidersParsing.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_ProvidersParsing.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_ProvidersParsing.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_ProvidersParsing.td Fri Jan 20 00:26:34 2012
@@ -1,5 +1,5 @@
 testClass=GetServerContext_ProvidersParsing
 testCategories=export_spec,spec
-testClasspath=<file:lib/qa1-export-servercontext-tests-providers-parsing.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-export-servercontext-tests-providers-parsing.jar>$:${testClasspath}
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_Providers_NonNull.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_Providers_NonNull.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_Providers_NonNull.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/export/servercontext/GetServerContext_Providers_NonNull.td Fri Jan 20 00:26:34 2012
@@ -1,5 +1,5 @@
 testClass=GetServerContext_Providers_NonNull
 testCategories=export_spec,spec
-testClasspath=<file:lib/qa1-export-servercontext-tests-non-null.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-export-servercontext-tests-non-null.jar>$:${testClasspath}
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/ConstructorAccessorTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/ConstructorAccessorTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/ConstructorAccessorTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/ConstructorAccessorTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=ConstructorAccessorTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false
 include0=../io.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_ExceptionTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_ExceptionTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_ExceptionTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_ExceptionTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=LoadClass_ExceptionTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 testjvmargs=-Djava.rmi.server.RMIClassLoaderSpi=com.sun.jini.test.spec.io.util.FakeRMIClassLoaderSpi
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_NullArgsTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_NullArgsTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_NullArgsTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_NullArgsTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=LoadClass_NullArgsTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false
 include0=../io.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_VerifyCodebaseIntegrityTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_VerifyCodebaseIntegrityTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_VerifyCodebaseIntegrityTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/LoadClass_VerifyCodebaseIntegrityTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=LoadClass_VerifyCodebaseIntegrityTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar
 com.sun.jini.qa.harness.runkitserver=false 

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassExceptionTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassExceptionTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassExceptionTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassExceptionTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Resolve_LoadClassExceptionTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 testjvmargs=-Djava.rmi.server.RMIClassLoaderSpi=com.sun.jini.test.spec.io.util.FakeRMIClassLoaderSpi
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_LoadClassTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Resolve_LoadClassTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 testjvmargs=-Djava.rmi.server.RMIClassLoaderSpi=com.sun.jini.test.spec.io.util.FakeRMIClassLoaderSpi
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_NullArgsTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_NullArgsTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_NullArgsTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_NullArgsTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Resolve_NullArgsTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false
 include0=../io.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_ReadAnnotationExceptionTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_ReadAnnotationExceptionTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_ReadAnnotationExceptionTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_ReadAnnotationExceptionTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Resolve_ReadAnnotationExceptionTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_VerifyCodebaseIntegrityTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_VerifyCodebaseIntegrityTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_VerifyCodebaseIntegrityTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalinputstream/Resolve_VerifyCodebaseIntegrityTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Resolve_VerifyCodebaseIntegrityTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalinputstream-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalinputstream-test.jar>
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar
 com.sun.jini.qa.harness.runkitserver=false 

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConstructorTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConstructorTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConstructorTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConstructorTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=ConstructorTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalledinstance-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalledinstance-test.jar>
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false
 include0=../io.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConvertToMarshalledObjectTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConvertToMarshalledObjectTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConvertToMarshalledObjectTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ConvertToMarshalledObjectTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=ConvertToMarshalledObjectTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalledinstance-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalledinstance-test.jar>
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false
 include0=../io.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_ExceptionTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_ExceptionTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_ExceptionTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_ExceptionTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Get_ExceptionTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalledinstance-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalledinstance-test.jar>
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar
 com.sun.jini.qa.harness.runkitserver=false 

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_NormalTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_NormalTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_NormalTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/Get_NormalTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=Get_NormalTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalledinstance-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalledinstance-test.jar>
 
 com.sun.jini.test.spec.io.util.fakeArgumentJar=http://${HOST}:${com.sun.jini.test.port}/qa1-io-util-dl.jar
 com.sun.jini.qa.harness.runkitserver=false 

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ObjectMethodsTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ObjectMethodsTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ObjectMethodsTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/io/marshalledinstance/ObjectMethodsTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=ObjectMethodsTest
 testCategories=io,io_spec
-testClasspath=<harnessJar>$:<file:lib/qa1-io-marshalledinstance-test.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${altClasspath}$:<file:lib/qa1-io-marshalledinstance-test.jar>
 testjvmargs=-Djava.rmi.server.RMIClassLoaderSpi=com.sun.jini.test.spec.io.util.FakeRMIClassLoaderSpi
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/locatordiscovery/DiscardDNE.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/locatordiscovery/DiscardDNE.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/locatordiscovery/DiscardDNE.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/locatordiscovery/DiscardDNE.td Fri Jan 20 00:26:34 2012
@@ -1,5 +1,5 @@
 testClass=DiscardDNE
 testCategories=locatordiscovery,locatordiscovery_spec,speclocatordiscovery
-testClasspath=<harnessJar>$:<testJar>$:<file:lib/qa1-lookup-simulator.jar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=${testClasspath}$:<file:lib/qa1-lookup-simulator.jar>
 include0=locatordiscovery.properties
 include1=com/sun/jini/test/share/reggie1_0.properties

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedExceptionTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedExceptionTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedExceptionTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedExceptionTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=DoPrivilegedExceptionTest
 testCategories=security,security_spec
-testClasspath=<file:lib/qa1-securityDoPrivileged.jar>$:<file:lib/qa1-securityUtil.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-securityDoPrivileged.jar>$:<file:lib/qa1-securityUtil.jar>$:${testClasspath}
 testPolicyfile=security.policy
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedTest.td
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedTest.td?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedTest.td (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/qa/src/com/sun/jini/test/spec/security/security/DoPrivilegedTest.td Fri Jan 20 00:26:34 2012
@@ -1,6 +1,6 @@
 testClass=DoPrivilegedTest
 testCategories=security,security_spec
-testClasspath=<file:lib/qa1-securityDoPrivileged.jar>$:<file:lib/qa1-securityUtil.jar>$:<harnessJar>$:<testJar>$:${com.sun.jini.jsk.home}$/lib$/jsk-platform.jar$:${com.sun.jini.jsk.home}$/lib$/jsk-lib.jar
+testClasspath=<file:lib/qa1-securityDoPrivileged.jar>$:<file:lib/qa1-securityUtil.jar>$:${testClasspath}
 testPolicyfile=security.policy
 com.sun.jini.qa.harness.runkitserver=false 
 com.sun.jini.qa.harness.runjiniserver=false

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/net/jini/security/policy/DynamicPolicyProvider.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/net/jini/security/policy/DynamicPolicyProvider.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/net/jini/security/policy/DynamicPolicyProvider.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/net/jini/security/policy/DynamicPolicyProvider.java Fri Jan 20 00:26:34 2012
@@ -21,7 +21,7 @@ package net.jini.security.policy;
 import org.apache.river.api.security.ConcurrentPolicy;
 import java.io.IOException;
 import java.rmi.RemoteException;
-import org.apache.river.api.security.DelegateSecurityManager;
+import org.apache.river.api.security.CachingSecurityManager;
 import java.security.AccessController;
 import java.security.AllPermission;
 import java.security.CodeSource;
@@ -46,6 +46,7 @@ import java.util.List;
 import java.util.NavigableSet;
 import java.util.Set;
 import java.util.TreeSet;
+import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import org.apache.river.api.security.ConcurrentPermissions;
@@ -152,7 +153,7 @@ import org.apache.river.impl.util.Collec
  * @see ConcurrentPolicyFile
  * @see net.jini.security.policy.PolicyFileProvider
  * @see ConcurrentPermissionCollection
- * @see DelegateSecurityManager
+ * @see CachingSecurityManager
  * @see RemotePolicy
  */
 
@@ -256,8 +257,7 @@ public class DynamicPolicyProvider exten
 	    throw new PolicyInitializationException(
 		"unable to construct base policy", e);
 	}
-        dynamicPolicyGrants = CollectionsConcurrent.multiReadCollection(
-                new ArrayList<PermissionGrant>(120));
+        dynamicPolicyGrants = new CopyOnWriteArrayList<PermissionGrant>();
         
 	remotePolicyGrants = new PermissionGrant[0];
         loggable = logger.isLoggable(Level.FINEST);
@@ -297,8 +297,7 @@ public class DynamicPolicyProvider exten
      */
     public DynamicPolicyProvider(Policy basePolicy){
         this.basePolicy = basePolicy;
-        dynamicPolicyGrants = CollectionsConcurrent.multiReadCollection(
-                new ArrayList<PermissionGrant>(120));
+        dynamicPolicyGrants = new CopyOnWriteArrayList<PermissionGrant>();
 	remotePolicyGrants = new PermissionGrant[0];
         loggable = logger.isLoggable(Level.FINEST);
 	grantLock = new Object();
@@ -340,7 +339,7 @@ or around our security policy providers.
 synchronization on subPolicies in AggregatePolicyProvider.getCurrentSubPolicy.
 
 Thread 1:
-    calls ClassLoader.loadClass on thw system class loader
+    calls ClassLoader.loadClass on the system class loader
     which locks the system class loader
     and then calls SecurityManager.checkPackageAccess
     <Thread 2 runs here>
@@ -385,8 +384,10 @@ Put the policy providers and all referen
         return revokeable;
     }
     
-    private PermissionCollection convert(NavigableSet<Permission> permissions){
-        PermissionCollection pc = new ConcurrentPermissions();
+    private PermissionCollection convert(NavigableSet<Permission> permissions, int initialCapacity, float loadFactor, int concurrencyLevel, int unresolvedCapacity){
+        PermissionCollection pc = 
+                new ConcurrentPermissions(initialCapacity, loadFactor, 
+                                        concurrencyLevel, unresolvedCapacity);
         // The descending iterator is for SocketPermission.
         Iterator<Permission> it = permissions.descendingIterator();
         while (it.hasNext()) {
@@ -470,7 +471,7 @@ Put the policy providers and all referen
 //                }
 //	    }
 //        }
-	return convert(permissions);
+	return convert(permissions, 16, 0.75F, 16, 16);
     }
 
     @Override
@@ -515,7 +516,7 @@ Put the policy providers and all referen
                 }
 	    }
         }
-	return convert(permissions);	
+	return convert(permissions, 16, 0.75F, 16, 16);	
     }
     
     /* River-26 Mark Brouwer suggested making UmbrellaPermission's expandable
@@ -619,8 +620,15 @@ Put the policy providers and all referen
             }
         }
 //        if (thread.isInterrupted()) return false;
-        PermissionCollection pc = convert(permissions);
-        if (permission instanceof GrantPermission) expandUmbrella(pc);
+        
+        PermissionCollection pc = null;
+        if (permClass != null){
+            pc =convert(permissions, 1, 0.75F, 1, 16);
+        } else {
+            // GrantPermission
+            pc = convert(permissions, 24, 0.75F, 1, 16);
+            expandUmbrella(pc);
+        }
         return pc.implies(permission);
     }
     
@@ -629,7 +637,7 @@ Put the policy providers and all referen
      * the cache and refreshes the underlying Policy, it also removes any
      * grants for ProtectionDomains that no longer exist.
      * 
-     * If a DelegateSecurityManager has been set, this method will clear it's 
+     * If a CachingSecurityManager has been set, this method will clear it's 
      * checked cache.
      * 
      */
@@ -652,8 +660,8 @@ Put the policy providers and all referen
         // to ProtectionDomain or ClassLoader.
         final SecurityManager sm = System.getSecurityManager();
         if (sm != null){
-            if (sm instanceof DelegateSecurityManager){
-                ((DelegateSecurityManager) sm).clearFromCache(null);
+            if (sm instanceof CachingSecurityManager){
+                ((CachingSecurityManager) sm).clearCache();
             }
         }
         
@@ -749,8 +757,8 @@ Put the policy providers and all referen
 	}
         
         SecurityManager sm = System.getSecurityManager();
-        if (sm instanceof DelegateSecurityManager) {
-            ((DelegateSecurityManager) sm).clearFromCache(removed);
+        if (sm instanceof CachingSecurityManager) {
+            ((CachingSecurityManager) sm).clearCache();
         }
        return removed.toArray(new Permission[removed.size()]);
     }
@@ -873,7 +881,7 @@ Put the policy providers and all referen
         Collection<PermissionGrant> oldGrants = new HashSet<PermissionGrant>(old.length);
         oldGrants.addAll(Arrays.asList(old));
         oldGrants.removeAll(holder);
-        // Collect removed Permission's to notify DelegateSecurityManager.
+        // Collect removed Permission's to notify CachingSecurityManager.
         Set<Permission> removed = new HashSet<Permission>(120);
         Iterator<PermissionGrant> rgi = oldGrants.iterator();
         while (rgi.hasNext()){
@@ -882,8 +890,8 @@ Put the policy providers and all referen
         }
         
         SecurityManager sm = System.getSecurityManager();
-        if (sm instanceof DelegateSecurityManager) {
-            ((DelegateSecurityManager) sm).clearFromCache(removed);
+        if (sm instanceof CachingSecurityManager) {
+            ((CachingSecurityManager) sm).clearCache();
         }
         // oldGrants now only has the grants which have been removed.
     }

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/DelegatePermission.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/DelegatePermission.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/DelegatePermission.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/DelegatePermission.java Fri Jan 20 00:26:34 2012
@@ -34,7 +34,7 @@ import java.util.Set;
 import java.util.concurrent.ConcurrentMap;
 import java.util.concurrent.ConcurrentSkipListMap;
 import org.apache.river.api.security.PermissionComparator;
-import org.apache.river.api.security.DelegateSecurityManager;
+import org.apache.river.api.security.CachingSecurityManager;
 import org.apache.river.impl.util.RC;
 import org.apache.river.impl.util.Ref;
 import org.apache.river.impl.util.Referrer;
@@ -58,10 +58,10 @@ import org.apache.river.impl.util.Referr
  * 
  * A DelegatePermission never implies it's candidate, however if a 
  * ProtectionDomain has the Permission the delegate represents, then the 
- * DelegateSecurityManager, which a Security Delegate must utilise,
+ * CachingSecurityManager, which a Security Delegate must utilise,
  * must ensure that it is also checked.
  * 
- * If the SecurityManager installed doesn't implement DelegateSecurityManager,
+ * If the SecurityManager installed doesn't implement CachingSecurityManager,
  * the DelegatePermission Guard's will be disabled.  This allows delegate's
  * to be included in code, the decision to utilise delegate functionality may
  * delayed until runtime or deployment.
@@ -130,7 +130,7 @@ public final class DelegatePermission ex
     
     public void checkGuard(Object object) throws SecurityException {
 	SecurityManager sm = System.getSecurityManager();
-	if (sm instanceof DelegateSecurityManager) sm.checkPermission(this);
+	if (sm instanceof CachingSecurityManager) sm.checkPermission(this);
     }
 
     @Override

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/FileOutputStream.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/FileOutputStream.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/FileOutputStream.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/delegates/FileOutputStream.java Fri Jan 20 00:26:34 2012
@@ -32,7 +32,7 @@ import java.security.PrivilegedActionExc
 import java.security.PrivilegedExceptionAction;
 import java.util.logging.Level;
 import java.util.logging.Logger;
-import org.apache.river.api.security.DelegateSecurityManager;
+import org.apache.river.api.security.CachingSecurityManager;
 
 /**
  * <p>This is a simple FileOutputStream delegate to replace a java.io.FileOutputStream
@@ -60,7 +60,7 @@ public class FileOutputStream extends Ou
 	g = DelegatePermission.get(p);
 	java.io.FileOutputStream output = null;
         SecurityManager sm = System.getSecurityManager();
-        if (sm instanceof DelegateSecurityManager){
+        if (sm instanceof CachingSecurityManager){
             try {
                 output = AccessController.doPrivileged(
                     new PrivilegedExceptionAction<java.io.FileOutputStream>() {
@@ -74,7 +74,7 @@ public class FileOutputStream extends Ou
                 constrEx(e,p);
             }
         }else{
-            /* No DelegateSecurityManager installed, since guard doesn't
+            /* No CachingSecurityManager installed, since guard doesn't
              * do anything, don't create FileOutputStream using
              * doPrivileged or it will create a security vulnerability.
              */
@@ -92,7 +92,7 @@ public class FileOutputStream extends Ou
 	g = DelegatePermission.get(p);
 	java.io.FileOutputStream output = null;
         SecurityManager sm = System.getSecurityManager();
-        if (sm instanceof DelegateSecurityManager){
+        if (sm instanceof CachingSecurityManager){
             try {
                 output = AccessController.doPrivileged(
                         new PrivilegedExceptionAction<java.io.FileOutputStream>() {
@@ -105,7 +105,7 @@ public class FileOutputStream extends Ou
                 constrEx(e,p);
             }
         } else {
-            /* No DelegateSecurityManager installed, since guard doesn't
+            /* No CachingSecurityManager installed, since guard doesn't
              * do anything, don't create FileOutputStream using
              * doPrivileged or it will create a security vulnerability.
              */
@@ -122,7 +122,7 @@ public class FileOutputStream extends Ou
 	g = DelegatePermission.get(new RuntimePermission("readFileDescriptor"));
         java.io.FileOutputStream output = null;
         SecurityManager sm = System.getSecurityManager();
-        if (sm instanceof DelegateSecurityManager){
+        if (sm instanceof CachingSecurityManager){
             output = AccessController.doPrivileged(new PrivilegedAction<java.io.FileOutputStream>() {
                 public java.io.FileOutputStream run() {
                     return new java.io.FileOutputStream(fdObj);

Copied: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/CachingSecurityManager.java (from r1232847, river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateSecurityManager.java)
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/CachingSecurityManager.java?p2=river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/CachingSecurityManager.java&p1=river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateSecurityManager.java&r1=1232847&r2=1233702&rev=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateSecurityManager.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/CachingSecurityManager.java Fri Jan 20 00:26:34 2012
@@ -22,7 +22,7 @@ import java.security.Permission;
 import java.util.Set;
 
 /**
- * The DelegateSecurityManager is designed to enable the use of DelegatePermission
+ * The CachingSecurityManager is designed to enable the use of DelegatePermission
  * for Delegate Objects to encapsulate security sensitive objects using
  * Li Gong's method guard pattern.
  * 
@@ -33,15 +33,7 @@ import java.util.Set;
  * 
  * @author Peter Firmstone.
  */
-public interface DelegateSecurityManager {
-
-    /**
-     * 
-     * @param perm
-     * @param context
-     * @throws SecurityException
-     */
-    void checkPermission(Permission perm, Object context) throws SecurityException;
+public interface CachingSecurityManager {
 
     /**
      * This method clears permissions from the checked cache, it should be
@@ -52,10 +44,9 @@ public interface DelegateSecurityManager
      * 
      * If the Set is null, the checked cache is cleared completely.
      *
-     * @param perms
      * @throws java.lang.InterruptedException
      * @throws java.util.concurrent.ExecutionException
      */
-    void clearFromCache(Set<Permission> perms) throws SecurityException;
+    void clearCache() throws SecurityException;
     
 }

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/ConcurrentPermissions.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/ConcurrentPermissions.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/ConcurrentPermissions.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/ConcurrentPermissions.java Fri Jan 20 00:26:34 2012
@@ -108,6 +108,14 @@ implements Serializable {
         allPermission = false;      
     }
     
+    public ConcurrentPermissions(int initialCapacity, float loadFactor, int concurrencyLevel, int unresolvedClassCount){
+        permsMap = new ConcurrentHashMap<Class<?>, PermissionCollection>
+                (initialCapacity, loadFactor, concurrencyLevel);
+        // Bite the bullet, get the pain out of the way in the beginning!
+        unresolved = new PermissionPendingResolutionCollection(unresolvedClassCount, loadFactor, concurrencyLevel);
+        allPermission = false;
+    }
+    
     /**
      * Threadsafe
      * @param permission
@@ -393,6 +401,12 @@ implements Serializable {
             klasses = new ConcurrentHashMap<String,Collection<PermissionPendingResolution>>(2);
             pending = new AtomicInteger(0);
         }
+        
+        PermissionPendingResolutionCollection(int initialCapacity, float loadFactor, int concurrencyLevel){
+            klasses = new ConcurrentHashMap<String,Collection<PermissionPendingResolution>>
+                    (initialCapacity, loadFactor, concurrencyLevel);
+            pending = new AtomicInteger(0);
+        }
 
         public int awaitingResolution(){
             return pending.get();

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateCombinerSecurityManager.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateCombinerSecurityManager.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateCombinerSecurityManager.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/DelegateCombinerSecurityManager.java Fri Jan 20 00:26:34 2012
@@ -56,6 +56,7 @@ import org.apache.river.api.delegates.De
 import org.apache.river.impl.util.RC;
 import org.apache.river.impl.util.Ref;
 import org.apache.river.impl.util.Referrer;
+import org.cliffc.high_scale_lib.NonBlockingHashMap;
 
 /**
  * DelegateCombinerSecurityManager, is intended to be a highly scalable
@@ -69,6 +70,10 @@ import org.apache.river.impl.util.Referr
  * It is recommended that this SecurityManager be installed from the command
  * line in order to load as early as possible.
  * 
+ * Apart from Permission objects and java.security.Policy.getPolicy() class
+ * lock (Bug ID: 7093090 fixed in jdk8(b15), this SecurityManager is non
+ * blocking, including the cache it keeps to prevent repeat security checks.
+ * 
  * @see Security
  * @see SecurityContext
  * @see AccessControlContext
@@ -76,7 +81,7 @@ import org.apache.river.impl.util.Referr
  * @author Peter Firmstone
  */
 public class DelegateCombinerSecurityManager 
-extends SecurityManager implements DelegateSecurityManager {
+extends SecurityManager implements CachingSecurityManager {
     private static final Logger logger = Logger.getLogger(DelegateCombinerSecurityManager.class.getName());
     private final DomainCombiner dc;
     // Cache of optimised Delegate AccessControlContext's
@@ -91,13 +96,9 @@ extends SecurityManager implements Deleg
     private final ProtectionDomain privilegedDomain;
     private final ThreadLocal<SecurityContext> threadContext;
     private final ThreadLocal<Boolean> inTrustedCodeRecursiveCall;
-    private final Object lock;
-    private volatile int revocation_id;
     
     public DelegateCombinerSecurityManager(){
         super();
-        lock = new Object();
-        revocation_id = 0;
         // Get context before this becomes a SecurityManager.
         // super() checked the permission to create a SecurityManager.
         SMConstructorContext = AccessController.getContext();
@@ -108,12 +109,12 @@ extends SecurityManager implements Deleg
         dc = new DelegateDomainCombiner();
         ConcurrentMap<Referrer<AccessControlContext>, 
                 Referrer<AccessControlContext>> internal = 
-                new ConcurrentHashMap<Referrer<AccessControlContext>, 
-                Referrer<AccessControlContext>>(100);
+                new NonBlockingHashMap<Referrer<AccessControlContext>, 
+                Referrer<AccessControlContext>>();
         contextCache = RC.concurrentMap(internal, Ref.SOFT, Ref.STRONG);
         ConcurrentMap<Referrer<Object>, Referrer<NavigableSet<Permission>>> refmap 
-                = new ConcurrentHashMap<Referrer<Object>, 
-                Referrer<NavigableSet<Permission>>>(100);
+                = new NonBlockingHashMap<Referrer<Object>, 
+                Referrer<NavigableSet<Permission>>>();
         checked = RC.concurrentMap(refmap, Ref.SOFT, Ref.STRONG);
         g = new SecurityPermission("getPolicy");
         Permission createAccPerm = new SecurityPermission("createAccessControlContext");
@@ -226,27 +227,29 @@ extends SecurityManager implements Deleg
              * continue to perform well.
              * 
              * Although I considered a multi read, single write Set, I wanted
-             * to avoid blocking under stress, caused as a result
+             * to avoid blocking under stress, that would be caused as a result
              * of garbage collection.
              * 
-             * The Reference Collection that encapsulates the ConcurrentSkipListSet
-             * uses a ReentrantLock.tryLock() guard the ReferenceQueue used
-             * to remove objects from the Set.  This allows other threads to
-             * proceed during object removal.  Only one thread is given access
-             * to the ReferenceQueue, the unlucky caller thread performs garbage
-             * removal from the Set before accessing the Set for its original
-             * purpose.
+             * IMPORTANT:
+             * The Set "checkedPerms" must be obtained prior to executing a permission
+             * check and the result written to the same Set, interleaved
+             * clear operations may remove the Set from the ConcurrentMap "checked",
+             * this prevents revoked permissions from entering the "checked"
+             * cache after clear is called and allows tasks to run to completion 
+             * without needing to be concerned about revocation.
              */
             NavigableSet<Referrer<Permission>> internal = 
                     new ConcurrentSkipListSet<Referrer<Permission>>(permCompare);
             checkedPerms = RC.navigableSet(internal, Ref.SOFT);
-            NavigableSet<Permission> existed = checked.putIfAbsent(context, checkedPerms);
-            if (existed != null) checkedPerms = existed;
+            inTrustedCodeRecursiveCall.set(Boolean.TRUE);
+            try {
+                NavigableSet<Permission> existed = checked.putIfAbsent(context, checkedPerms);
+                if (existed != null) checkedPerms = existed;
+            }finally {
+                inTrustedCodeRecursiveCall.set(Boolean.FALSE); // Must always happen, no matter what.
+            }
         }
         if (checkedPerms.contains(perm)) return; // don't need to check again.
-        // Record the current transaction_id to avoid populating cache with
-        // old successful checks.
-        int rev_id = revocation_id;
         // Cache the created AccessControlContext.
         AccessControlContext delegateContext = contextCache.get(executionContext);
         if (delegateContext == null ) {
@@ -271,20 +274,21 @@ extends SecurityManager implements Deleg
             // mutated, but just in case that changes in future we
             // return it.
             delegateContext = AccessController.doPrivileged(action, delegateContext);
-            contextCache.putIfAbsent(executionContext, delegateContext);
-            // Above putIfAbsent: It doesn't matter if it already existed,
-            // the context we have is valid to perform a permissionCheck.
+            inTrustedCodeRecursiveCall.set(Boolean.TRUE);
+            try {
+                contextCache.putIfAbsent(executionContext, delegateContext);
+                // Above putIfAbsent: It doesn't matter if it already existed,
+                // the context we have is valid to perform a permissionCheck.
+            }finally {
+                inTrustedCodeRecursiveCall.set(Boolean.FALSE); // Must always happen, no matter what.
+            }
+            
         }
         // Normal execution, same as SecurityManager.
         delegateContext.checkPermission(perm); // Throws SecurityException.
         /* It's ok to cache SocketPermission if we use a comparator */
         // If we get to here, no exceptions were thrown, caller has permission.
-        if ( rev_id == revocation_id) {
-            checkedPerms.add(perm);
-            // Because the revocation_id is not an atomic check, it might change
-            // after we've just added the permission, if so remove it.
-            if ( rev_id != revocation_id) checkedPerms.remove(perm);
-        }
+        checkedPerms.add(perm);
     }
     
     /**
@@ -293,53 +297,14 @@ extends SecurityManager implements Deleg
      * To clear the cache of checked Permissions requires the following Permission:
      * java.security.SecurityPermission("getPolicy");
      * 
-     * @param perms
      * @throws SecurityException 
      */
-    public void clearFromCache(Set<Permission> perms) throws SecurityException {
-        // This is a slow operation, with the benefit
-        // of faster security checks, which occur far more often.
-        // The cache will change while we make removals, however
-        // the policy will prevent any being re-added, since these have already 
-        // been removed from the policy.
+    public void clearCache() throws SecurityException {
+        /* Clear the cache, out of date permission check tasks are still
+         * writing to old Set's, while new checks will write to new Sets.
+         */
         g.checkGuard(this);
-        synchronized (lock){
-            // Order of operation, permission check records revocation id
-            // before consulting policy, if an interleaved policy operation
-            // then revokes permission, it notifies the SecurityManager after
-            // the policy state has changed.  It is not safe to cache any
-            // permission check that commenced before the policy
-            // revocation completes.
-            // After this is incremented, it is safe to clear the cache or
-            // remove stale entries, the SecurityManager may continue to
-            // allow revoked permissions to be cached until this method
-            // completes, after which it must comply with any revocation.
-            // All threads with method local references to the new revocation 
-            // id will have consulted the policy only after its state was altered.
-            revocation_id++;
-        }
-        if (perms == null){
-            checked.clear();
-            return;
-        }
-        Set<Class> classes = new HashSet<Class>(30);
-        Iterator<Permission> i = perms.iterator();
-        while (i.hasNext()){
-            classes.add(i.next().getClass());
-        }
-        Collection<NavigableSet<Permission>> cache = checked.values();
-        Collection<Permission> remove = new ArrayList<Permission>(60);
-        Iterator<NavigableSet<Permission>> j = cache.iterator();
-        while (j.hasNext()){
-            Set<Permission> s = j.next();
-            Iterator<Permission> k = s.iterator();
-            while(k.hasNext()){
-                Permission p = k.next();
-                if (classes.contains(p.getClass())) remove.add(p);
-            }
-            s.removeAll(remove);
-            remove.clear();
-        }
+        checked.clear();
     }
     
     // Action retrieves the optimised AccessControlContext.
@@ -378,8 +343,8 @@ extends SecurityManager implements Deleg
              * If using sun.security.provider.PolicyFile, the policy will
              * cache it's own domain prior to it being instantiated and it
              * may perform a PrivilegedAction when it's 
-             * getPermissions(ProtectionDomain pd) is called and the
-             * ProtectionDomain isn't in the policy cache.
+             * getPermissions(ProtectionDomain pd) is later called for
+             * ProtectionDomain's not in policy cache.
              * However, DelegateCombinerSecurityManager and
              * net.jini.security.Security cannot cache their shared 
              * ProtectionDomain, relying on the underlying policy instead.
@@ -398,7 +363,8 @@ extends SecurityManager implements Deleg
              * the SecurityManager if it has a FilePermission.
              * 
              * The policy provider org.apache.river.security.ConcurrentPolicyFile
-             * has no such issue, unless using CodeSource based PermissionGrant's.
+             * has no such issue, unless using CodeSource based PermissionGrant's,
+             * which have been deprecated.
              */
             int l = assignedDomains.length;
             List<ProtectionDomain> list = new ArrayList<ProtectionDomain>(l);
@@ -445,13 +411,22 @@ extends SecurityManager implements Deleg
             Thread currentThread = Thread.currentThread();
             boolean interrupt = Thread.interrupted(); // Clears the interrupt and stores it.
             int l = context.length;
+            /* This is both a performance optimisation and a safety precaution.
+             * When there are only a few domains on the stack, they are 
+             * normally privileged and will return very quickly.
+             * 
+             * Also, permission checks performed inside PrivilegedAction
+             * calls by the Policy may come from setting or getting context security
+             * sensitive variables when wrappingPrivilegedAction
+             * permission checks.
+             * 
+             * The policy may accept Objects from other ProtectionDomain's
+             * as part of a PermissionGrant, this domain must be included
+             * in the context so it can be checked, but since that would
+             * create a recursive call, we avoid recursion
+             * by not splitting that permission check among multiple threads.
+             */
             if ( l < 4 ){ 
-                // We've got at least one priviledged domain that will execute
-                // quickly so process it in this thread.
-                // This also reduces contention on the Executor, which should be saved
-                // for situations where there are a large number of domains.
-                // This also avoids unnecessary overhead when calling AccessController.doPrivileged()
-                // and recursion that might occur
                 for ( int i = 0; i < l; i++ ){
                     if (! checkPermission(context[i], perm)) {
                         if (interrupt) currentThread.interrupt();

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/RevocablePolicy.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/RevocablePolicy.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/RevocablePolicy.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/api/security/RevocablePolicy.java Fri Jan 20 00:26:34 2012
@@ -78,6 +78,10 @@ public interface RevocablePolicy extends
      * has escaped any further Permission checks, meaning that the Permission
      * cannot be revoked for the caller holding a reference.
      * 
+     * Note that after revocation, the caller should call Policy.getPermissions
+     * to determine if the proxy has no or minimal permissions.  If the
+     * proxy still retains permission, the caller should throw a SecurityException.
+     * 
      * @param cl
      * @return Array of Permission's that have been revoked, the caller should
      * check to see if any of these allow references to escape, in which case

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/Referrer.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/Referrer.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/Referrer.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/Referrer.java Fri Jan 20 00:26:34 2012
@@ -88,16 +88,22 @@ public interface Referrer<T> {
     
     /**
      * Standard hashCode calculation for IDENTITY based references, where k
-     * is the referent.
+     * is the referent.  This may be stored in a final field.
      * 
      * int hash = 7;
      * hash = 29 * hash + System.identityHashCode(k);
      * hash = 29 * hash + k.getClass().hashCode();
      * 
-     * For non IDENTITY references, the hashCode returned is the referent's 
-     * hashCode, after the reference has been cleared, it reverts to the
-     * IDENTITY based value.  The IDENTITY hashCode should be calculated
-     * at construction time.
+     * Standard hashCode calculation for EQUALITY based references, where k
+     * is the referent.
+     * 
+     * int hash = 7;
+     * hash = 29 * hash + k.hashCode();
+     * hash = 29 * hash + k.getClass().hashCode();
+     * 
+     * The hash must be calculated during construction and if the reference is
+     * cleared, the recorded hashCode returned.  While the referent remains
+     * reachable the hashCode must be calculated each time.
      * 
      * @return 
      */

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/SoftReferenceKey.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/SoftReferenceKey.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/SoftReferenceKey.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/SoftReferenceKey.java Fri Jan 20 00:26:34 2012
@@ -38,7 +38,7 @@ class SoftReferenceKey<T> extends SoftRe
     SoftReferenceKey(T k, ReferenceQueue<? super T> q) {
         super(k,q);
         int hash = 7;
-        hash = 29 * hash + System.identityHashCode(k);
+        hash = 29 * hash + k.hashCode();
         hash = 29 * hash + k.getClass().hashCode();
         this.hash = hash;
     }
@@ -55,9 +55,14 @@ class SoftReferenceKey<T> extends SoftRe
 
     @Override
     public int hashCode() {
-        T referent = get();
-        int hash = this.hash;
-        if (referent != null) hash = referent.hashCode();
+        Object k = get();
+        int hash = 7;
+        if (k != null) {
+            hash = 29 * hash + k.hashCode();
+            hash = 29 * hash + k.getClass().hashCode();
+        } else {
+            hash = this.hash;
+        }
         return hash;
     }
     

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/StrongReferenceKey.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/StrongReferenceKey.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/StrongReferenceKey.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/StrongReferenceKey.java Fri Jan 20 00:26:34 2012
@@ -44,7 +44,7 @@ class StrongReferenceKey<T> implements R
     StrongReferenceKey(T referent){
         this.referent = referent ;
         int hash = 7;
-        hash = 29 * hash + System.identityHashCode(referent);
+        hash = 29 * hash + referent.hashCode();
         hash = 29 * hash + referent.getClass().hashCode();
         this.hash = hash;
     }
@@ -62,7 +62,14 @@ class StrongReferenceKey<T> implements R
 
     @Override
     public int hashCode() {
-        if ( referent != null ) return referent.hashCode();
+        Object k = get();
+        int hash = 7;
+        if (k != null) {
+            hash = 29 * hash + k.hashCode();
+            hash = 29 * hash + k.getClass().hashCode();
+        } else {
+            hash = this.hash;
+        }
         return hash;
     }
     

Modified: river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/TempEqualReferrer.java
URL: http://svn.apache.org/viewvc/river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/TempEqualReferrer.java?rev=1233702&r1=1233701&r2=1233702&view=diff
==============================================================================
--- river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/TempEqualReferrer.java (original)
+++ river/jtsk/skunk/peterConcurrentPolicy/src/org/apache/river/impl/util/TempEqualReferrer.java Fri Jan 20 00:26:34 2012
@@ -24,9 +24,14 @@ package org.apache.river.impl.util;
  * @author peter
  */
 class TempEqualReferrer<T> extends TempIdentityReferrer<T> {
+    private final int hash;
     
     TempEqualReferrer(T t){
         super(t);
+        int hash = 7;
+        hash = 29 * hash + t.hashCode();
+        hash = 29 * hash + t.getClass().hashCode();
+        this.hash = hash;
     }
     
     @Override
@@ -41,6 +46,14 @@ class TempEqualReferrer<T> extends TempI
     }
     
     public int hashCode(){
-        return get().hashCode();
+        Object k = get();
+        int hash = 7;
+        if (k != null) {
+            hash = 29 * hash + k.hashCode();
+            hash = 29 * hash + k.getClass().hashCode();
+        } else {
+            hash = this.hash;
+        }
+        return hash;
     }
 }