2010-10-29 4 views
0

J'ai un joli code Java qui fait une boucle while avec un tg.getParent() pour obtenir le groupe de threads root. Cela a fonctionné pendant plusieurs mois sur quatre environnements différents (un Windows et trois Linux). Récemment, nous avons ajouté un cinquième environnement pour nos tests de validation d'accès. Cet environnement est supposé être une réplique de notre environnement de production autant que possible. Les développeurs ont un accès très limité à ce système, et il a fallu plusieurs semaines pour que le système mis en place par notre groupe d'hébergement ait toutes les permissions et propriétés correctes. A peu près tout fonctionne maintenant, mais aujourd'hui, quand le testeur est allé à la partie de l'application qui utilise la méthode getRootThreadGroup() mentionnée ci-dessus, l'appel à ThreadGroup.getParent() a apparemment lancé une SecurityException. Je n'ai pas beaucoup de détails car pour le moment je n'ai pas pu localiser le fichier journal de l'application. Mais je suis sûr à 99,99% qu'une exception SecurityException s'est produite ici. J'ai regardé le javadoc pour SecurityException et getParent() et checkAccess(), etc, mais rien de tout cela n'a de sens pour moi. Quelqu'un peut-il penser à une raison simple pour laquelle ce nouvel environnement pourrait amener notre application à lancer une SecurityException sur cet appel alors que cela n'a jamais été observé sur d'autres environnements (et le code est définitivement exécuté sans exception sur tous les autres environnements)? Mon intuition est que d'une certaine manière l'utilisateur d'exécution pour l'application n'a pas les permissions pour "quelque chose" ...JAVA: SecurityException sur ThreadGroup.getParent()

Oh, il fonctionne sur un serveur Bea Weblogic avec java 1.6 (jrockit-jdk), mais il devrait être configuré exactement de la même manière que les autres environnements.

Merci pour toute aide.

Répondre

1

Cela ressemble à un gestionnaire de sécurité. Si vous écrivez un programme simple pour exécuter Thread.currentThread().getThreadGroup().getParent() et l'exécuter avec -Djava.security.manager, vous verrez:

Exception in thread "main" java.security.AccessControlException: access denied (java.lang.RuntimePermission modifyThreadGroup) 
+0

Désolé pour votre temps. Trouvé le problème était sans rapport avec les discussions comme vous pouvez le voir ci-dessous. –

0

Qu'à cela ne tienne. J'ai trouvé que le problème était en fait une colonne de base de données manquante. Il m'a fallu deux heures ce matin pour enfin localiser le journal, et une fois que j'ai trouvé cela, il était très simple de trouver le problème réel.

Questions connexes