我遇到问题,因为实际导入的 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”调用“查找方法”,我在以下命令的帮助下找到了这一点Eclipse 中的 Debug模式。因此,它无法找到正确的 JNDI 并给出异常。 供引用.. 我的代码在Tomcat6上运行。 我已经从 JRE1.6 和 JDK 设置了 jar 文件的类路径。
有人可以建议我吗 - 如果我没记错的话,我如何知道这个“SelectorContext.java”是从哪个 JAR 中调用的,以及如何让它查看 RT.JAR 中存在的 InitialContext.class?
最佳答案
你的理解不正确。 SelectorContext是tomcat的JNDI实现之一。
可以选择通过将 java.naming.factory.initial 设置为系统变量来使用外部 JNDI 上下文。这是由 Tomcat (javaURLContextFactory) 设置的,以提供它自己的 JNDI 服务。
当你调用new InitialContext()时,JVM会查看是否有用户提供的命名工厂,如果可用,JVM会调用initialFactory.getInitialContext来获取自定义JNDI实现并将其设为默认值,并且对上下文的所有方法调用都是反过来路由到自定义实现。
在您的情况下,调用 SelectorContext 是正确的,请查看您是否具有在 JNDI 中拥有资源所需的配置。
关于java - 导入的java文件没有被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19407020/