Лучшее понимание трассировки стека 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). Это говорит мне, что он попадает в поставщик имен, но не говорит, что не может найти класс.

Любые предложения будут ценны. Прямо сейчас я в тупике.

Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
0
2 458
3

Ответы 3

Может быть, попробуйте указать экземпляр oc4j, на котором развернуто приложение?

См. http://download.oracle.com/docs/cd/B31017_01/web.1013/b28958/rmi.htm#i1084816 для всех параметров, которые может принимать URL-адрес ormi. Похоже, вы не указали то, чего он ожидает.

Я видел подобные проблемы JDNI раньше, и проблема, хотите верьте, хотите нет, заключалась в том, что ClassLoader видел желаемый класс в более чем одном файле JAR. Он загрузил информацию о классе, но когда дело дошло до создания экземпляра объекта, виртуальная машина прохрипела и умерла из-за не очень полезной ошибки JNDI.

Убедитесь, что вы не экспортируете два одинаковых Jar-файла. Вы, вероятно, можете проверить это в OC4J's Enterprise Manager.

Удачи!

Рискуя констатировать известный факт (но на случай, если он был упущен из виду): приложение для ушей etrace, развернутое в вашем экземпляре OC4J, должно явно предоставить имени пользователя в ключе java.naming.security.principal доступ к своему дереву JNDI через элемент <namespace-access> в его дескриптор orion-application.xml. Это то, что нам потребовалось некоторое время, чтобы понять, когда мы переносили приложение из WebSphere.

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