Лучшее понимание трассировки стека 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. Похоже, вы не указали то, что он ожидает.

Другие вопросы по тегам