NoAccessRuntimeException will be thrown if current JNDI user has not sufficient privileges to some operations on JMX server.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
weblogic.management.NoAccessRuntimeException: Access not allowed for subject: principals=[SystemKKZ], on ResourceType: ApplicationConfig Action: execute, Target: notifyDeployment at weblogic.management.internal.SecurityHelper$IsAccessAllowedPrivilegeAction.wlsRun()Ljava.lang.Object;(SecurityHelper.java:640) at weblogic.management.internal.SecurityHelper$IsAccessAllowedPrivilegeAction.run()Ljava.lang.Object;(SecurityHelper.java:510) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(Lweblogic.security.subject.AbstractSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(Lweblogic.security.acl.internal.AuthenticatedSubject;Lweblogic.security.acl.internal.AuthenticatedSubject;Ljava.security.PrivilegedAction;)Ljava.lang.Object;(SecurityManager.java:121) at weblogic.management.internal.SecurityHelper.isAccessAllowed(Ljavax.management.ObjectName;Lweblogic.security.service.MBeanResource$ActionType;Ljava.lang.String;Ljava.lang.String;)V(SecurityHelper.java:398) at weblogic.management.internal.RemoteMBeanServerImpl.private_invoke(Ljavax.management.ObjectName;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(RemoteMBeanServerImpl.java:987) at weblogic.management.internal.RemoteMBeanServerImpl.invoke(Ljavax.management.ObjectName;Ljava.lang.String;[Ljava.lang.Object;[Ljava.lang.String;)Ljava.lang.Object;(RemoteMBeanServerImpl.java:946) at weblogic.management.internal.MBeanProxy.invoke(Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.Object;(MBeanProxy.java:954) at weblogic.management.internal.MBeanProxy.invokeForCachingStub(Ljava.lang.String;[Ljava.lang.Object;)Ljava.lang.Object;(MBeanProxy.java:481) at weblogic.management.configuration.ApplicationMBean_Stub.notifyDeployment(Ljava.lang.String;Ljava.lang.String;Ljava.lang.String;I)V(ApplicationMBean_Stub.java:1831) at weblogic.management.deploy.slave.SlaveDeployer$Task.notifyDeployment(Ljava.lang.String;)V(SlaveDeployer.java:2168) at weblogic.management.deploy.slave.SlaveDeployer$ActivateTask.prepare()V(SlaveDeployer.java:2392) at weblogic.management.deploy.slave.SlaveDeployer.processPrepareTask(Lweblogic.management.deploy.OamVersion;Lweblogic.management.runtime.DeploymentTaskRuntimeMBean;Z)V(SlaveDeployer.java:866) at weblogic.management.deploy.slave.SlaveDeployer.prepareDelta(Lweblogic.management.deploy.OamDelta;Lweblogic.management.deploy.OamVersion;ZLjava.lang.StringBuffer;)Z(SlaveDeployer.java:594) at weblogic.management.deploy.slave.SlaveDeployer.prepareUpdate(Ljava.util.ArrayList;Z)V(SlaveDeployer.java:508) at weblogic.drs.internal.SlaveCallbackHandler$1.execute(Lweblogic.kernel.ExecuteThread;)V(SlaveCallbackHandler.java:25) at weblogic.kernel.ExecuteThread.execute(Lweblogic.kernel.ExecuteRequest;)V(ExecuteThread.java:219) at weblogic.kernel.ExecuteThread.run()V(ExecuteThread.java:178) at java.lang.Thread.startThreadFromVM(Ljava.lang.Thread;)V(Unknown Source) |
But exception can also occur when InitialContext is not closed after lookup. Problem is really hard to debug as exception is thrown in different thread.
Ways to solve NoAccessRuntimeException:
- Add your JNDI user to group administrators in weblogic server.
- Find places where you create InitialContext and close it after use!
Here is code snippet:
1 2 3 |
InitialContext ctx = InitialContextFactory.getContext(); mBeanServer = ((MBeanHome) ctx.lookup(MBeanHome.LOCAL_JNDI_NAME)).getMBeanServer(); ctx.close();//without close NoAccessRuntimeException is thrown |