由于未调用实际导入的java文件,因此我遇到问题。请看一下我的代码: -
import javax.naming.Context;
import javax.naming.InitialContext;
.....
public class ABC{
.....
1. Context lContext = null;
2. ObjectDataSourceFactory lSource = null;
3. try
4. {
5. lContext = new InitialContext();
6. lSource = ((ObjectDataSourceFactory)lContext.lookup(....));
}
catch (Exception e)
{
}
我在这里面临的问题是:当流控制进入第6行时,它从“SelectorContext.java”调用“查找方法”而不是从“InitialContext.java”调用,我在这个问题的帮助下找到了日食中的调试模式。结果它找不到合适的JNDI并给出异常。 FYI .. 我的代码在Tomcat6上运行。 我已经从我的JRE1.6和JDK设置了jar文件的类路径。
有人可以建议我 - 我怎么知道从哪个JAR调用这个“SelectorContext.java”以及如何让它查看RT.JAR中存在的InitialContext.class,如果我没有错的话?
答案 0 :(得分:1)
您的理解不正确。 SelectorContext是tomcat的JNDI实现之一。
通过将java.naming.factory.initial设置为系统变量,可以选择使用外部JNDI上下文。这是由Tomcat(javaURLContextFactory)设置的,以提供它自己的JNDI服务。
当你调用new InitialContext()时,JVM会看到是否有用户提供的命名工厂,如果它可用,JVM调用initialFactory.getInitialContext来获取自定义JNDI实现并使其成为默认值并且对上下文的所有方法调用都是inturn路由到自定义实现。
在您的情况下,调用SelectorContext是正确的,看看您是否具有所需的配置以在JNDI中拥有资源。