Hello,
I'm trying to add Ehcache to Java app that uses security policy. It worked ok for local cache but when I tried to add cluster support I got a problem.
I added terracotta tag to ehcache.xml and run terracotta. Then each time I started the app error log asked me to add some permision to security.policy. Finally I got following exception:
Code:
10:19:27.333 INFO TerracottaClient Thread [main] [cacheManager: no name]: Creating new ClusteredInstanceFactory
Server exception: net.sf.ehcache.CacheException: Unable to load class net.sf.ehcache.terracotta.StandaloneTerracottaClusteredInstanceFactory. Initial cause was java.security.AccessControlException: access denied ("java.security.AllPermission" "<all permissions>" "<all actions>")
net.sf.ehcache.CacheException: Unable to load class net.sf.ehcache.terracotta.StandaloneTerracottaClusteredInstanceFactory. Initial cause was java.security.AccessControlException: access denied ("java.security.AllPermission" "<all permissions>" "<all actions>")
at net.sf.ehcache.util.ClassLoaderUtil.createNewInstance(ClassLoaderUtil.java:109)
at net.sf.ehcache.terracotta.TerracottaClusteredInstanceHelper.newClusteredInstanceFactory(TerracottaClusteredInstanceHelper.java:176)
at net.sf.ehcache.terracotta.TerracottaClient.createNewClusteredInstanceFactory(TerracottaClient.java:186)
at net.sf.ehcache.terracotta.TerracottaClient.createClusteredInstanceFactory(TerracottaClient.java:138)
at net.sf.ehcache.CacheManager.doInit(CacheManager.java:424)
at net.sf.ehcache.CacheManager.init(CacheManager.java:374)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:356)
{my code}
Caused by: java.lang.RuntimeException: java.security.AccessControlException: access denied ("java.security.AllPermission" "<all permissions>" "<all actions>")
at com.terracotta.express.ClientImpl.<init>(ClientImpl.java:378)
at com.terracotta.express.ClientFactoryImpl.newClient(ClientFactoryImpl.java:286)
at com.terracotta.express.ClientFactoryImpl.createClient(ClientFactoryImpl.java:279)
at com.terracotta.express.ClientFactoryImpl.createClient(ClientFactoryImpl.java:266)
at com.terracotta.express.ClientFactoryImpl.getOrCreateClient(ClientFactoryImpl.java:203)
at org.terracotta.express.ClientFactory.getOrCreateClient(ClientFactory.java:30)
at net.sf.ehcache.terracotta.StandaloneTerracottaClusteredInstanceFactory.<init>(StandaloneTerracottaClusteredInstanceFactory.java:37)
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:525)
at net.sf.ehcache.util.ClassLoaderUtil.createNewInstance(ClassLoaderUtil.java:92)
... 12 more
Caused by: java.security.AccessControlException: access denied ("java.security.AllPermission" "<all permissions>" "<all actions>")
at java.security.AccessControlContext.checkPermission(AccessControlContext.java:366)
at java.security.AccessController.checkPermission(AccessController.java:555)
at java.lang.SecurityManager.checkPermission(SecurityManager.java:549)
at java.net.URLClassLoader$4.run(URLClassLoader.java:690)
at java.net.URLClassLoader$4.run(URLClassLoader.java:688)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.getPermissions(URLClassLoader.java:688)
at java.security.SecureClassLoader.getProtectionDomain(SecureClassLoader.java:206)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:449)
at java.net.URLClassLoader.access$100(URLClassLoader.java:71)
at java.net.URLClassLoader$1.run(URLClassLoader.java:361)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at com.terracotta.express.L1Loader.findClass(L1Loader.java:32)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
at java.lang.Class.getDeclaredConstructors0(Native Method)
at java.lang.Class.privateGetDeclaredConstructors(Class.java:2404)
at java.lang.Class.getConstructor0(Class.java:2714)
at java.lang.Class.getConstructor(Class.java:1674)
at com.terracotta.express.ClientImpl.<init>(ClientImpl.java:355)
... 23 more
Why do it need all permissions? How to avoid granting all permissions?