Initially I replaced all the instances of Permissions with ConcurrentPermissions to maximise testing, but it's purpose is a utility class for DynamicPolicyProvider which lives in jsk-policy.jar However having said that, the class doesn't really need AllPermission, it uses reflection on class constructors to resolve UnresolvedPermission but that's about all it needs.

ConcurrentPermissions totally destabilised GrantPermission, which uses lazy construction and has fields that aren't synchronized, its current stability is reliant on Permissions heavy synchronization and single threadedness.

Ideally, all PermissionCollection instances returned by Permission.getPermissionCollection shouldn't use any internal synchronization, unless implies() is a mutator method, since ConcurrentPermissions manages this for us using a wrapper called MultiReadPermissionCollection. Last time I looked at Permissions, it synchronized on all calls, it's unnecessary and hampers performance for the average PermissionCollection to try and manage their own synchronization. A better solution would be similar to what was done with Vector, ArrayList and Collections.

After examining the code, I've decided to reimplement DynamicPolicyProvider and GrantPermission.

I'm writing a service utilising java.util.ServiceLoader called DynamicPolicyProviderSpi so that my implementation is a pluggable component, it requires Java5, for more limited environments that don't need concurrency, the earlier implementation is smaller and may be more suitable, I intend to make it pluggable also.

In addition, the new implementation will be able to revoke permissions too, rather than just accumulating Permission's over time.

So we'll end up with the choice of two implementations, jsk-policy.jar and jsk-policy-concurrent.jar

Cheers,

Peter.

Gregg Wonderly wrote:
I am curious why you put that into jsk-policy.jar? That class doesn't have the same requirements for class loading that the contents of jsk-policy.jar once had does it?

Gregg Wonderly

Peter Firmstone wrote:
I'm running into problems with the following test, it doesn't have jsk-policy.jar on it's classpath

Anyone know where to set the classpath for this test?

The missing class file org.apache.river.security.concurrent.ConcurrentPermissions is in jsk-policy.jar

I haven't got jsk-policy installed in jre/lib/etc/

testClass=DelayDiscoveryAfterDiscard
testCategories=locatordiscovery,locatordiscovery_impl,impllocatordiscovery
include0=locatordiscovery.properties
include1=com/sun/jini/test/share/reggie1_0.properties
com.sun.jini.test.impl.locatordiscovery.discardDelayFirstWait=5000
com.sun.jini.test.impl.locatordiscovery.discardDelay=30000

This is where I'm running into difficulty:

Running com/sun/jini/test/impl/locatordiscovery/DelayDiscoveryAfterDiscard.td
Time is Fri Nov 13 04:46:43 EST 2009
Starting test in separate process with command:
/usr/jdk/instances/jdk1.6.0/jre/bin/java -Djava.security.policy=file:/opt/src/ApacheRiver/trunk/qa/harness/policy/defaulttest.policy -cp /opt/src/ApacheRiver/trunk/qa/lib/jiniharness.jar:/opt/src/ApacheRiver/trunk/qa/lib/jinitests.jar:/opt/src/ApacheRiver/trunk/lib/jsk-platform.jar:/opt/src/ApacheRiver/trunk/lib/jsk-lib.jar -client -Dcom.sun.jini.jsk.port=8080 -Dcom.sun.jini.qa.port=8081 -Dcom.sun.jini.jsk.home=/opt/src/ApacheRiver/trunk -Dcom.sun.jini.qa.home=/opt/src/ApacheRiver/trunk/qa -Dcom.sun.jini.qa.harness.harnessJar=/opt/src/ApacheRiver/trunk/qa/lib/jiniharness.jar -Dcom.sun.jini.qa.harness.testJar=/opt/src/ApacheRiver/trunk/qa/lib/jinitests.jar -Dcom.sun.jini.qa.harness.runjiniserver=true -Dcom.sun.jini.qa.harness.runkitserver=true -Djava.security.properties=file:/opt/src/ApacheRiver/trunk/qa/harness/trust/dynamic-policy.properties -Djava.util.logging.config.file=/opt/src/ApacheRiver/trunk/qa/src/com/sun/jini/test/resources/qa1.logging -Dcom.sun.jini.test.home=/opt/src/ApacheRiver/trunk/qa -Dcom.sun.jini.test.port=8082 -Dcom.sun.jini.qa.harness.policies=jar:file:/opt/src/ApacheRiver/trunk/qa/lib/jinitests.jar!/com/sun/jini/test/resources/jinitest.policy -Djava.ext.dirs=/usr/jdk/instances/jdk1.6.0/jre/lib/ext:/usr/jdk/packages/lib/ext:/opt/src/ApacheRiver/trunk/qa/lib-ext:/opt/src/ApacheRiver/trunk/lib-ext -Djava.security.debug=access com.sun.jini.qa.harness.MasterTest com/sun/jini/test/impl/locatordiscovery/DelayDiscoveryAfterDiscard.td

TIME: 04:46:45

MasterTest.doTest INFO:
============================== CALLING SETUP() ==============================

13/11/2009 04:46:46 com.sun.jini.tool.ClassServer run
INFO: ClassServer started [[/opt/src/ApacheRiver/trunk/qa/lib/], port 8081]

13/11/2009 04:46:46 com.sun.jini.tool.ClassServer run
INFO: ClassServer started [[/opt/src/ApacheRiver/trunk/lib-dl/], port 8080]

13/11/2009 04:46:46 com.sun.jini.tool.ClassServer run
INFO: ClassServer started [[/opt/src/ApacheRiver/trunk/qa/lib/], port 8082]

NonActGrp-out: Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/river/security/concurrent/ConcurrentPermissions
NonActGrp-out:     at java.lang.Class.forName0(Native Method)
NonActGrp-out:     at java.lang.Class.forName(Class.java:247)
NonActGrp-out: at sun.misc.Service$LazyIterator.next(Service.java:271) NonActGrp-out: at java.rmi.server.RMIClassLoader.initializeProvider(RMIClassLoader.java:688) NonActGrp-out: at java.rmi.server.RMIClassLoader.access$000(RMIClassLoader.java:93) NonActGrp-out: at java.rmi.server.RMIClassLoader$1.run(RMIClassLoader.java:103) NonActGrp-out: at java.security.AccessController.doPrivileged(Native Method) NonActGrp-out: at java.rmi.server.RMIClassLoader.<clinit>(RMIClassLoader.java:100) NonActGrp-out: at sun.rmi.server.MarshalOutputStream.annotateClass(MarshalOutputStream.java:75) NonActGrp-out: at java.io.ObjectOutputStream.writeNonProxyDesc(ObjectOutputStream.java:1250) NonActGrp-out: at java.io.ObjectOutputStream.writeClassDesc(ObjectOutputStream.java:1203) NonActGrp-out: at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1387) NonActGrp-out: at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1150) NonActGrp-out: at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:326) NonActGrp-out: at java.rmi.MarshalledObject.<init>(MarshalledObject.java:101) NonActGrp-out: at com.sun.jini.qa.harness.NonActivatableGroupImpl.main(Unknown Source) NonActGrp-out: Caused by: java.lang.ClassNotFoundException: org.apache.river.security.concurrent.ConcurrentPermissions NonActGrp-out: at java.net.URLClassLoader$1.run(URLClassLoader.java:200) NonActGrp-out: at java.security.AccessController.doPrivileged(Native Method) NonActGrp-out: at java.net.URLClassLoader.findClass(URLClassLoader.java:188) NonActGrp-out: at java.lang.ClassLoader.loadClass(ClassLoader.java:306) NonActGrp-out: at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276) NonActGrp-out: at java.lang.ClassLoader.loadClass(ClassLoader.java:251) NonActGrp-out: at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
NonActGrp-out:     ... 16 more





Reply via email to