更好地理解OC4J堆栈跟踪

时间:2008-11-04 16:19:59

标签: java oracle java-ee 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对象并执行查找方法调用。它传递的值只是一个String,其值为所请求类的完全限定名称(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或没有Princip和pass,我会得到一个不同的错误(NullPointerException)。这告诉我它命中了命名提供者,但并不是说它找不到这个类。

任何建议都将不胜感激。现在我很难过。

3 个答案:

答案 0 :(得分:1)

也许尝试指定部署app的oc4j实例?

有关ormi网址可以采用的所有选项,请参阅http://download.oracle.com/docs/cd/B31017_01/web.1013/b28958/rmi.htm#i1084816。看起来你没有指明它期待的东西。

答案 1 :(得分:1)

我以前见过像这样的JDNI问题,不管你信不信,问题是ClassLoader在多个JAR文件中看到了它想要的类。它加载了类信息OK,但是当实际实例化对象时,虚拟机嘶哑并且死于一个不太有用的JNDI错误。

确保您没有导出两个相同的罐子。你可以在OC4J的企业管理器中查看这个。

祝你好运!

答案 2 :(得分:1)

冒着陈述已知事实的风险(但是忽略了它的可能性):部署到OC4J实例中的etrace耳朵应用程序必须在java.naming.security.principal中明确授予用户名通过其<namespace-access>描述符中的orion-application.xml元素对其JNDI树进行密钥访问。我们花了一些时间来弄清楚我们何时从WebSphere迁移应用程序。