[jboss-dev-forums] [JBoss AS Development] - org.jboss.util.collection.ConcurrentSkipListMap fails when r

kabir.khan@jboss.com do-not-reply at jboss.com
Wed Dec 9 10:01:39 EST 2009


Adding this test to common-core

  | package org.jboss.test.util.test.collection;
  | 
  | import java.util.Map;
  | 
  | import org.jboss.util.collection.ConcurrentSkipListMap;
  | 
  | /**
  |  * 
  |  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
  |  * @version $Revision: 1.1 $
  |  */
  | public class ConcurrentSkipListMapSecureTestCase extends AbstractMapUnitTest
  | {
  |    @Override
  |    protected void setUp() throws Exception
  |    {
  |       super.setUp();
  |       System.setSecurityManager(new SecurityManager());
  |    }
  | 
  |    @Override
  |    @SuppressWarnings("unchecked")
  |    protected Map createEmptyMap()
  |    {
  |       return new ConcurrentSkipListMap();
  |    }
  | }
  | 

fails with the message:

  | java.lang.ExceptionInInitializerError
  | 	at org.jboss.test.util.test.collection.ConcurrentSkipListMapSecureTestCase.createEmptyMap(ConcurrentSkipListMapSecureTestCase.java:46)
  | 	at org.jboss.test.util.test.collection.AbstractMapUnitTest.testBasicOperations(AbstractMapUnitTest.java:21)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 	at java.lang.reflect.Method.invoke(Method.java:597)
  | 	at junit.framework.TestCase.runTest(TestCase.java:168)
  | 	at junit.framework.TestCase.runBare(TestCase.java:134)
  | 	at junit.framework.TestResult$1.protect(TestResult.java:110)
  | 	at junit.framework.TestResult.runProtected(TestResult.java:128)
  | 	at junit.framework.TestResult.run(TestResult.java:113)
  | 	at junit.framework.TestCase.run(TestCase.java:124)
  | 	at junit.framework.TestSuite.runTest(TestSuite.java:232)
  | 	at junit.framework.TestSuite.run(TestSuite.java:227)
  | 	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
  | 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
  | 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
  | Caused by: java.lang.RuntimeException: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:189)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:65)
  | 	at org.jboss.util.collection.ConcurrentSkipListMap.<clinit>(ConcurrentSkipListMap.java:356)
  | 	... 21 more
  | Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
  | 	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
  | 	at java.security.AccessController.checkPermission(AccessController.java:546)
  | 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
  | 	at java.lang.SecurityManager.checkMemberAccess(SecurityManager.java:1662)
  | 	at java.lang.Class.checkMemberAccess(Class.java:2157)
  | 	at java.lang.Class.getDeclaredField(Class.java:1879)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:181)
  | 	... 23 more
  | 

I have tried changing the class

  | $svn diff
  | Index: src/main/java/org/jboss/util/collection/ConcurrentSkipListMap.java
  | ===================================================================
  | --- src/main/java/org/jboss/util/collection/ConcurrentSkipListMap.java	(revision 3838)
  | +++ src/main/java/org/jboss/util/collection/ConcurrentSkipListMap.java	(working copy)
  | @@ -%ld,%ld +%ld,%ld @@
  |  
  |  package org.jboss.util.collection;
  |  
  | +import java.security.AccessController;
  | +import java.security.PrivilegedAction;
  |  import java.util.AbstractCollection;
  |  import java.util.AbstractMap;
  |  import java.util.AbstractSet;
  | @@ -%ld,%ld +%ld,%ld @@
  |      /** Updater for casHead */
  |      private static final
  |          AtomicReferenceFieldUpdater<ConcurrentSkipListMap, HeadIndex>
  | -        headUpdater = AtomicReferenceFieldUpdater.newUpdater
  | -        (ConcurrentSkipListMap.class, HeadIndex.class, "head");
  | -
  | +        headUpdater;
  | +    
  | +    static
  | +    {
  | +      headUpdater = AccessController.doPrivileged(new PrivilegedAction<AtomicReferenceFieldUpdater<ConcurrentSkipListMap, HeadIndex>>()
  | +      {
  | +      
  | +         public AtomicReferenceFieldUpdater<ConcurrentSkipListMap, HeadIndex> run()
  | +         {
  | +            return AtomicReferenceFieldUpdater.newUpdater
  | +            (ConcurrentSkipListMap.class, HeadIndex.class, "head");
  | +         }
  | +      });
  | +    }
  |      /**
  |       * compareAndSet head node
  |       */
  | 
but that still fails with the message

  | java.lang.ExceptionInInitializerError
  | 	at org.jboss.test.util.test.collection.ConcurrentSkipListMapSecureTestCase.createEmptyMap(ConcurrentSkipListMapSecureTestCase.java:46)
  | 	at org.jboss.test.util.test.collection.AbstractMapUnitTest.testBasicOperations(AbstractMapUnitTest.java:21)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
  | 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
  | 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
  | 	at java.lang.reflect.Method.invoke(Method.java:597)
  | 	at junit.framework.TestCase.runTest(TestCase.java:168)
  | 	at junit.framework.TestCase.runBare(TestCase.java:134)
  | 	at junit.framework.TestResult$1.protect(TestResult.java:110)
  | 	at junit.framework.TestResult.runProtected(TestResult.java:128)
  | 	at junit.framework.TestResult.run(TestResult.java:113)
  | 	at junit.framework.TestCase.run(TestCase.java:124)
  | 	at junit.framework.TestSuite.runTest(TestSuite.java:232)
  | 	at junit.framework.TestSuite.run(TestSuite.java:227)
  | 	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:81)
  | 	at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:45)
  | 	at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
  | 	at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
  | Caused by: java.lang.RuntimeException: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:189)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater.newUpdater(AtomicReferenceFieldUpdater.java:65)
  | 	at org.jboss.util.collection.ConcurrentSkipListMap$1.run(ConcurrentSkipListMap.java:367)
  | 	at org.jboss.util.collection.ConcurrentSkipListMap$1.run(ConcurrentSkipListMap.java:1)
  | 	at java.security.AccessController.doPrivileged(Native Method)
  | 	at org.jboss.util.collection.ConcurrentSkipListMap.<clinit>(ConcurrentSkipListMap.java:362)
  | 	... 21 more
  | Caused by: java.security.AccessControlException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
  | 	at java.security.AccessControlContext.checkPermission(AccessControlContext.java:323)
  | 	at java.security.AccessController.checkPermission(AccessController.java:546)
  | 	at java.lang.SecurityManager.checkPermission(SecurityManager.java:532)
  | 	at java.lang.SecurityManager.checkMemberAccess(SecurityManager.java:1662)
  | 	at java.lang.Class.checkMemberAccess(Class.java:2157)
  | 	at java.lang.Class.getDeclaredField(Class.java:1879)
  | 	at java.util.concurrent.atomic.AtomicReferenceFieldUpdater$AtomicReferenceFieldUpdaterImpl.<init>(AtomicReferenceFieldUpdater.java:181)
  | 	... 26 more
  | 
Probably because the privileged block is not is the same jar as the AtomicReferenceFieldUpdater?



View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4269809#4269809

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4269809



More information about the jboss-dev-forums mailing list