当前位置: 首页 > 知识库问答 >
问题:

根异常是javax.naming.NameNotFoundException:在上下文“java:comp/env”中找不到名称jdbc

薛焱
2023-03-14

我正在开发一个Java Web应用程序,并将其部署在Websphere Application Server中,

        jndiName = "jdbc/TestDataSource";
        Context ctx = new InitialContext();
        envContext = (Context) ctx.lookup("java:comp/env");
        javax.sql.DataSource ds = (javax.sql.DataSource) envContext.lookup(jndiName);
        conn = ds.getConnection();
<resource-ref>
        <description>Connection-ConnectionPool</description>
        <res-ref-name>jdbc/TestDataSource</res-ref-name>
        <res-type>javax.sql.DataSource</res-type>
        <res-auth>Container</res-auth>
        <res-sharing-scope>Shareable</res-sharing-scope>
        <mapped-name>jdbc/TestDataSource</mapped-name>
</resource-ref>

共有1个答案

越嘉茂
2023-03-14

异常意味着您创建的线程没有Java EE应用程序的上下文,因此它无法知道从哪个Java EE组件命名空间获取Java:comp/env/jdbc/testDataSource。请注意,您可以为不同的Java EE应用程序/组件定义相同的名称以表示不同的含义。有一个简单的方法来解决这个问题,它遵循Java EE规范标准。不要创建自己的线程,而是使用ManagedExecutorService(也是Java EE的一部分),它可以自动将应用程序的上下文传播到托管线程,在这种情况下,app服务器将能够正确地解析查找。

下面是一个例子:

ExecutorService executor = InitialContext.doLookup("java:comp/DefaultManagedExecutorService");

executor.submit(new Callable<Object>() {
    public Object call() throws Exception {
        DataSource ds = InitialContext.doLookup("java:comp/env/jdbc/TestDataSource");
        Connection conn = ds.getConnection();
        try {
           // ... do useful stuff with connection
        } finally {
           conn.close();
        }
        return result;
    }
});
 类似资料:
  • 问题内容: 我试图找出为什么我的Web应用程序抛出一个 当我从中复制配置的一个姐妹悄悄地运行时。 我有: 通过右键单击并选择“新的持久性”从netbeans创建一个新的持久性,我不在乎我提供的实际值,但只需要在正确的目录中创建persistence.xml文件即可。 如下编辑我的context.xml,以匹配工作姐妹项目中的那个 编辑了我的web.xml以包含资源DataSource,如下所示 如

  • 问题内容: 什么意思? 看起来像什么: 怎么办? 我了解查询如下: 在或中查找名称,以获取数据库的URL。 _是这样吗 ?!! _但是,前者看起来如何? 问题答案: 是JNDI树中的节点,您可以在其中找到当前Java EE组件(Web应用程序或EJB)的属性。 允许定义直接指向此节点的变量。它允许做 而不是 相对路径而不是绝对路径。这就是它的用途。

  • 我有一个由许多模块组成的JavaEE应用程序。我试图能够进行间接的JNDI查找。 我遵循以下步骤: ejb jar。xml:在每个模块中。我定义了一个企业bean。模块中的所有DAO都继承自此DAO(MyDataAccessObject) persistence.xml:我在每persistence.xml中定义(在每个模块中) ibm应用程序bnd。xml 我应该在WebSphere知道的jav

  • 我试图使用angular 7中的数组功能,但我遇到了这样一个错误:。同样,我不能使用简单的数组方法,如push和pop。 Angular7不允许我像这样初始化变量:

  • 我正在开发一个使用tomcat服务器管理的连接池的spring应用程序。 我在上下文中的标记中定义了数据源。tomcat的xml:(我在上下文中使用Spring2.0.7)。xml: 在我的应用程序上下文中。xml(即在spring配置文件中),代码为: 当应用程序启动时,出现以下错误: 请帮我解决这个问题。

  • 问题内容: 我一天中花了太多时间试图找出一些连接JNDI工厂bean的错误。问题原来是,而不是这个… 我实际上已经写过了… 我推断也许引用了一些环境变量并使之生效,以便最终查看我的上下文文件。唯一的区别是。从专家的口中,这是做什么的? 在值中没有前缀的情况下,我将收到一条错误消息,指出“名称jdbc在此上下文中未绑定”。 问题答案: 在名称空间的根上下文中是名称为“ comp”的绑定,该绑定绑定到