RMI client execution leads to AccessControlException/ClassNotFoundException
843793Sep 5 2006 — edited Sep 21 2006Hello,
We have an interesting issue using RMI.
We need to perform lookup of certain object, hold in registry (registry is running on one of the machines in local network). Just like this:
String name = "//"+host+":"+Registry.REGISTRY_PORT+"///" + host + "/ScriptExecutor";
executor = (ScriptExecutor) Naming.lookup(name);
Policy file looks like this:
grant {
permission java.net.SocketPermission "*:1024-65535", "connect,accept";
permission java.io.FilePermission "/work/execute/srv_rmi/*", "execute";
};
Once we perform lookup in simple application everything is ok.
At the same time, the application running on JBoss (and Tomcat) fails on lookup, giving such an error (attention: -Djava.security.policy is specified well and policy file is the same as fopr standalone simple application):
00:57:45,421 ERROR [STDERR] java.security.AccessControlException: access denied
(java.lang.RuntimePermission setContextClassLoader)
00:57:45,421 ERROR [STDERR] at java.security.AccessControlContext.checkPermi
ssion(AccessControlContext.java:264)
00:57:45,421 ERROR [STDERR] at java.security.AccessController.checkPermissio
n(AccessController.java:427)
00:57:45,421 ERROR [STDERR] at java.lang.SecurityManager.checkPermission(Sec
urityManager.java:532)
00:57:45,421 ERROR [STDERR] at java.lang.Thread.setContextClassLoader(Thread
.java:1306)
00:57:45,421 ERROR [STDERR] at org.apache.catalina.core.ContainerBase$Contai
nerBackgroundProcessor.processChildren(ContainerBase.java:1573)
00:57:45,421 ERROR [STDERR] at org.apache.catalina.core.ContainerBase$Contai
nerBackgroundProcessor.run(ContainerBase.java:1558)
00:57:45,421 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
00:57:45,531 ERROR [STDERR] error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: access to class loader denied
00:57:45,531 ERROR [STDERR] java.rmi.UnmarshalException: error unmarshalling ret
urn; nested exception is:
java.lang.ClassNotFoundException: access to class loader denied
00:57:45,531 ERROR [STDERR] at sun.rmi.registry.RegistryImpl_Stub.lookup(Unk
nown Source)
00:57:45,531 ERROR [STDERR] at java.rmi.Naming.lookup(Naming.java:84)
00:57:45,531 ERROR [STDERR] at com.griddynamics.NetworkManagement.ScriptExec
utorReference.getReference(ScriptExecutorReference.java:21)
00:57:45,531 ERROR [STDERR] at com.griddynamics.exchange.portal.ui.pages.Ter
msAndPolicyPage.continueSubmitAction(TermsAndPolicyPage.java:115)
00:57:45,531 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke0(
Native Method)
00:57:45,531 ERROR [STDERR] at sun.reflect.NativeMethodAccessorImpl.invoke(N
ativeMethodAccessorImpl.java:39)
00:57:45,531 ERROR [STDERR] at sun.reflect.DelegatingMethodAccessorImpl.invo
ke(DelegatingMethodAccessorImpl.java:25)
00:57:45,531 ERROR [STDERR] at java.lang.reflect.Method.invoke(Method.java:5
85)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.ListenerMethodIn
vokerImpl.invokeTargetMethod(ListenerMethodInvokerImpl.java:214)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.ListenerMethodIn
vokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:155)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.ListenerMethodIn
vokerImpl.searchAndInvoke(ListenerMethodInvokerImpl.java:124)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.ListenerMethodIn
vokerImpl.invokeListenerMethod(ListenerMethodInvokerImpl.java:69)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.SyntheticListene
r.actionTriggered(SyntheticListener.java:51)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.listener.ListenerInvokerT
erminator.invokeListener(ListenerInvokerTerminator.java:51)
00:57:45,531 ERROR [STDERR] at $ListenerInvoker_10d7ffbb0b8.invokeListener($
ListenerInvoker_10d7ffbb0b8.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.form.Form.renderComponent
(Form.java:230)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.AbstractComponent.render(
AbstractComponent.java:617)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.form.Form.rewind(Form.jav
a:327)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.engine.RequestCycle.rewin
dForm(RequestCycle.java:439)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.form.Form.trigger(Form.ja
va:338)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.engine.DirectService.trig
gerComponent(DirectService.java:146)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.engine.DirectService.serv
ice(DirectService.java:132)
00:57:45,531 ERROR [STDERR] at $IEngineService_10d7ffbb110.service($IEngineS
ervice_10d7ffbb110.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.services.impl.EngineServi
ceOuterProxy.service(EngineServiceOuterProxy.java:66)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.engine.AbstractEngine.ser
vice(AbstractEngine.java:248)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.services.impl.InvokeEngin
eTerminator.service(InvokeEngineTerminator.java:60)
00:57:45,531 ERROR [STDERR] at $WebRequestServicer_10d7ffbb0ee.service($WebR
equestServicer_10d7ffbb0ee.java)
00:57:45,531 ERROR [STDERR] at $WebRequestServicer_10d7ffbb0ea.service($WebR
equestServicer_10d7ffbb0ea.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.services.impl.WebRequestS
ervicerPipelineBridge.service(WebRequestServicerPipelineBridge.java:56)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicer_10d7ffbb0ce.service($
ServletRequestServicer_10d7ffbb0ce.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.request.DecodedRequestInj
ector.service(DecodedRequestInjector.java:55)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicerFilter_10d7ffbb0ca.ser
vice($ServletRequestServicerFilter_10d7ffbb0ca.java)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicer_10d7ffbb0d0.service($
ServletRequestServicer_10d7ffbb0d0.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.multipart.MultipartDecode
rFilter.service(MultipartDecoderFilter.java:52)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicerFilter_10d7ffbb0c8.ser
vice($ServletRequestServicerFilter_10d7ffbb0c8.java)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicer_10d7ffbb0d0.service($
ServletRequestServicer_10d7ffbb0d0.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.services.impl.SetupReques
tEncoding.service(SetupRequestEncoding.java:53)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicerFilter_10d7ffbb0cc.ser
vice($ServletRequestServicerFilter_10d7ffbb0cc.java)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicer_10d7ffbb0d0.service($
ServletRequestServicer_10d7ffbb0d0.java)
00:57:45,531 ERROR [STDERR] at $ServletRequestServicer_10d7ffbb0c2.service($
ServletRequestServicer_10d7ffbb0c2.java)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.ApplicationServlet.doServ
ice(ApplicationServlet.java:123)
00:57:45,531 ERROR [STDERR] at org.apache.tapestry.ApplicationServlet.doPost
(ApplicationServlet.java:168)
00:57:45,531 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpSe
rvlet.java:717)
00:57:45,531 ERROR [STDERR] at javax.servlet.http.HttpServlet.service(HttpSe
rvlet.java:810)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterCha
in.internalDoFilter(ApplicationFilterChain.java:252)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterCha
in.doFilter(ApplicationFilterChain.java:173)
00:57:45,531 ERROR [STDERR] at org.jboss.web.tomcat.filters.ReplyHeaderFilte
r.doFilter(ReplyHeaderFilter.java:96)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterCha
in.internalDoFilter(ApplicationFilterChain.java:202)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.ApplicationFilterCha
in.doFilter(ApplicationFilterChain.java:173)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.StandardWrapperValve
.invoke(StandardWrapperValve.java:213)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.StandardContextValve
.invoke(StandardContextValve.java:178)
00:57:45,531 ERROR [STDERR] at org.jboss.web.tomcat.security.SecurityAssocia
tionValve.invoke(SecurityAssociationValve.java:175)
00:57:45,531 ERROR [STDERR] at org.jboss.web.tomcat.security.JaccContextValv
e.invoke(JaccContextValve.java:74)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.StandardHostValve.in
voke(StandardHostValve.java:126)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.valves.ErrorReportValve.i
nvoke(ErrorReportValve.java:105)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.core.StandardEngineValve.
invoke(StandardEngineValve.java:107)
00:57:45,531 ERROR [STDERR] at org.apache.catalina.connector.CoyoteAdapter.s
ervice(CoyoteAdapter.java:148)
00:57:45,531 ERROR [STDERR] at org.apache.coyote.http11.Http11Processor.proc
ess(Http11Processor.java:869)
00:57:45,531 ERROR [STDERR] at org.apache.coyote.http11.Http11BaseProtocol$H
ttp11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
00:57:45,531 ERROR [STDERR] at org.apache.tomcat.util.net.PoolTcpEndpoint.pr
ocessSocket(PoolTcpEndpoint.java:527)
00:57:45,531 ERROR [STDERR] at org.apache.tomcat.util.net.MasterSlaveWorkerT
hread.run(MasterSlaveWorkerThread.java:112)
00:57:45,546 ERROR [STDERR] at java.lang.Thread.run(Thread.java:595)
00:57:45,546 ERROR [STDERR] Caused by: java.lang.ClassNotFoundException: access
to class loader denied
00:57:45,546 ERROR [STDERR] at sun.rmi.server.LoaderHandler.loadClass(Loader
Handler.java:424)
00:57:45,546 ERROR [STDERR] at sun.rmi.server.LoaderHandler.loadClass(Loader
Handler.java:165)
00:57:45,546 ERROR [STDERR] at java.rmi.server.RMIClassLoader$2.loadClass(RM
IClassLoader.java:620)
00:57:45,546 ERROR [STDERR] at org.jboss.system.JBossRMIClassLoader.loadClas
s(JBossRMIClassLoader.java:91)
00:57:45,546 ERROR [STDERR] at java.rmi.server.RMIClassLoader.loadClass(RMIC
lassLoader.java:247)
00:57:45,546 ERROR [STDERR] at sun.rmi.server.MarshalInputStream.resolveClas
s(MarshalInputStream.java:197)
00:57:45,546 ERROR [STDERR] at java.io.ObjectInputStream.readNonProxyDesc(Ob
jectInputStream.java:1538)
00:57:45,546 ERROR [STDERR] at java.io.ObjectInputStream.readClassDesc(Objec
tInputStream.java:1460)
00:57:45,546 ERROR [STDERR] at java.io.ObjectInputStream.readOrdinaryObject(
ObjectInputStream.java:1693)
00:57:45,546 ERROR [STDERR] at java.io.ObjectInputStream.readObject0(ObjectI
nputStream.java:1299)
00:57:45,546 ERROR [STDERR] at java.io.ObjectInputStream.readObject(ObjectIn
putStream.java:339)
00:57:45,546 ERROR [STDERR] ... 62 more
00:57:45,546 ERROR [STDERR] Caused by: java.security.AccessControlException: acc
ess denied (java.io.FilePermission \work\execute\- read)
00:57:45,546 ERROR [STDERR] at java.security.AccessControlContext.checkPermi
ssion(AccessControlContext.java:264)
00:57:45,546 ERROR [STDERR] at java.security.AccessController.checkPermissio
n(AccessController.java:427)
00:57:45,546 ERROR [STDERR] at java.lang.SecurityManager.checkPermission(Sec
urityManager.java:532)
00:57:45,546 ERROR [STDERR] at sun.rmi.server.LoaderHandler$Loader.checkPerm
issions(LoaderHandler.java:1135)
00:57:45,546 ERROR [STDERR] at sun.rmi.server.LoaderHandler$Loader.access$00
0(LoaderHandler.java:1089)
00:57:45,546 ERROR [STDERR] at sun.rmi.server.LoaderHandler.loadClass(Loader
Handler.java:388)
00:57:45,546 ERROR [STDERR] ... 72 more
We think that there is a problem in locating our stub class in our client code/configuration (this assumption is made on the basis of many experiments, e.g. JBoss fails with an error of
error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: access to class loader denied
java.rmi.UnmarshalException: error unmarshalling return; nested exception is:
java.lang.ClassNotFoundException: access to class loader denied
at sun.rmi.registry.RegistryImpl_Stub.lookup(Unknown Source)
at java.rmi.Naming.lookup(Unknown Source)
at com.griddynamics.NetworkManagement.ScriptExecutorReference.getReference(ScriptExecutorReference.java:21)
at com.griddynamics.NetworkManagement.ScriptExecClient.main(ScriptExecClient.java:20)
and this is the exact error we had in standalone application when stub classes were not in classpath.
So, what could that be?
Thanks in advance.