Лучшее понимание трассировки стека OC4J - PullRequest
1 голос
/ 04 ноября 2008

Мне было поручено развернуть приложение, созданное третьей стороной, на сервере приложений 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 ]

1 голос
/ 05 февраля 2009

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

Убедитесь, что вы не экспортируете две одинаковые банки. Вероятно, вы можете проверить это в OC4J Enterprise Manager.

Удачи!

1 голос
/ 20 февраля 2009

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

1 голос
/ 11 ноября 2008

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

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

...