Лучшее понимание трассировки стека OC4J
Мне было поручено развернуть приложение, созданное третьей стороной, на сервере приложений Oracle версии 10.1.3.0. Я развернул его на Oracle Application Server версии 10.1.2.0 без особых затруднений. Я получаю следующую ошибку:
javax.naming.NamingException: Lookup error: javax.naming.AuthenticationException:
No such domain/application: "etrace"; nested exception is:
javax.naming.AuthenticationException: No such domain/application: "etrace"
[Root exception is javax.naming.AuthenticationException: No such domain/application: "etrace"]
at com.evermind.server.rmi.RMIClientContext.lookup(RMIClientContext.java:64)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
Перед этим код приложения создает и инициализирует объект InitialContext и выполняет вызов метода поиска. Передаваемое им значение - это просто строка со значением полного имени запрашиваемого класса (com.ntc.tracing.app.security.EtraceAuthenticatorService). Глядя на объект InitialContext, я знаю, что в хеш-таблице сред заданы следующие параметры:
java.naming.factory.initial: com.evermind.server.rmi.RMIInitialContextFactory
java.naming.provider.url: ormi://ntcdevr310g22:12401/etrace
java.naming.factory.url.pkgs: oracle.oc4j.naming.url
java.naming.security.principal: admin
java.naming.security.credentials: admin1
URL провайдера, принципал и учетные данные устанавливаются мной (через командную строку).
Я не понимаю, что означает эта ошибка. Если я дам ему "плохой" URL-адрес провайдера или не сообщу принципал и передам, я получу другую ошибку (NullPointerException). Это говорит мне, что он поражает провайдера имен, но не говорит, что не может найти класс.
Любые предложения будут ценны. Прямо сейчас я в тупике.
3 ответа
Рискуя констатировать известный факт (но по случайности он упускается из виду): etrace
Ухо-приложение, развернутое в вашем экземпляре OC4J, должно явно предоставить имя пользователя в java.naming.security.principal
ключ доступа к его JNDI-дереву через <namespace-access>
элемент в его orion-application.xml
дескриптор. Именно на это ушло некоторое время, чтобы выяснить, когда мы переносили приложение из WebSphere.
Я уже видел подобные проблемы с JDNI, и проблема, поверьте или нет, заключалась в том, что ClassLoader видел нужный класс в нескольких файлах JAR. Он загрузил информацию о классе, но когда дело дошло до создания экземпляра объекта, виртуальная машина прохрипела и умерла с не очень полезной ошибкой JNDI.
Убедитесь, что вы не экспортируете две одинаковые банки. Вероятно, вы можете проверить это в OC4J Enterprise Manager.
Удачи!
Может быть, попробуйте указать экземпляр oc4j, на котором развернуто приложение?
См. Http://download.oracle.com/docs/cd/B31017_01/web.1013/b28958/rmi.htm#i1084816 для всех параметров, которые может использовать URL ormi. Похоже, вы не указали то, что он ожидает.