0

我有一些漂亮的样板 Java 代码,它使用 tg.getParent() 执行 while 循环以获取根线程组。这已经在四种不同的环境(一个 Windows 和三个 Linux)上运行了几个月。最近,我们为访问验证测试添加了第五个环境。这个环境应该尽可能的复制我们的生产环境。开发人员对该系统的访问权限非常有限,我们的托管组设置系统以拥有所有正确的权限和属性是一个多周的过程。

现在几乎一切正常,但是今天,当测试人员进入应用程序中执行上述 getRootThreadGroup() 方法的部分时,对 ThreadGroup.getParent() 的调用显然抛出了 SecurityException。我没有很多详细信息,因为目前我无法找到应用程序日志文件。但我 99.99% 确信这里发生了 SecurityException。我已经查看了 SecurityException 和 getParent() 和 checkAccess() 等的 javadoc,但这些对我来说都没有多大意义。

谁能想到一个简单的原因,为什么这个新环境会导致我们的应用程序在这个调用上抛出一个 SecurityException,而这在任何其他环境中从未被观察到(并且代码肯定会在所有其他环境中毫无例外地执行)?我的直觉是,应用程序的运行时用户不知何故没有“某事”的权限......

哦,它运行在带有 java 1.6 (jrockit-jdk) 的 Bea Weblogic 服务器上,但它的配置应该与其他环境完全相同。

谢谢你的帮助。

4

2 回答 2

1

听起来像正在使用安全管理器。如果您编写一个简单的程序来执行Thread.currentThread().getThreadGroup().getParent()和运行它-Djava.security.manager,您将看到:

Exception in thread "main" java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup)
于 2010-10-29T14:58:44.237 回答
0

没关系。我发现问题实际上是缺少数据库列。今天早上我花了两个小时终于找到了日志,一旦找到了,就很容易找到实际问题。

于 2010-10-29T15:09:05.003 回答