【问题标题】:Create JNDI Connection for Ingres Database为 Ingres 数据库创建 JNDI 连接
【发布时间】:2013-08-15 21:40:15
【问题描述】:

我有一个 Java 项目,我一直在尝试为我的 Ingres 数据库创建 JNDI 连接,但没有成功。我不确定是否需要包含特定于 ingres 的内容,但经过大量研究后,我无法让事情发挥作用。

在我的项目中,我在 web.xml 文件和 context.xml 中有我的数据源信息

context.xml 有以下信息

<Context>
<Resource name="jdbc/myDB" auth="Container" type="javax.sql.Datasource"   
  username="myUser" password="password" driverClassName="com.ingres.jdbc.IngresDriver"
  url="databaseURL" maxActive="8" maxIdle="4" maxWait="100" />

 </Context>

我的 web.xml 有以下信息

<web-app>
<resource-ref>
    <description>Project Descrip</description>
    <res-ref-name>jdbc/myDB</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
</resource-ref>
</web-app>

在我的 java 代码中,我尝试使用以下四行来建立连接

Context initContext = new InitialContext();
Context envContext = (Context) initContent.lookup("java:comp/env");
Datasource ds = (DataSource) envContext.lookup("jdbc/myDB");

return ds.getConnection();

执行第三行后,我得到一个异常: NamingException - 无法创建资源实例

我发现了几十个具有相同例外的帖子,并尝试了建议的解决方案,但没有成功。我使用的是 Tomcat 7 服务器,并确保将必要的 ingres jar (iijdbc.jar) 包含到我的 WEB-INF/lib 文件夹和我的 tomcat lib 文件夹中。

任何帮助或建议将不胜感激

【问题讨论】:

  • 您的数据库 URL 看起来很奇怪。
  • 我知道,我拿出了真品。我知道我有正确的 URL,因为我已经使用它通过休眠连接到我的数据库。我只是无法使用 jndi 连接进行工作
  • 也许如果您在 Context 上设置调试标志,您会获得更多关于查找可能出错的信息?
  • 我确实考虑过这一点,但是当我将它包含在 Context 标记中时,我的程序说“将属性 'debug' 设置为 '1' 没有找到匹配的属性”所以我做了一些研究并发现调试属性已被弃用

标签: java tomcat7 datasource jndi ingres


【解决方案1】:

我对 Ingres 了解不多,但如果尝试制作数据源类似于 JBOSS 和 DB2 或 MySQL。我注意到在您的 WEB.XML 中您定义了资源引用,但您没有提及有关 servlet 参数的任何内容。

<servlet>
    <description>Servlet Description</description>
    <display-name>MyServlet</display-name>
    <servlet-name>MyServlet</servlet-name>
    <servlet-class>servlet.MyServlet</servlet-class>

    <init-param>
        <param-name>MyDB</param-name>
        <param-value>java:comp/env/jdbc/MyDB</param-value>
     </init-param>

     <load-on-startup>1</load-on-startup>
</servlet>

然后你需要在你的 sevlet 中编码:

InitialContext initialContext = new InitialContext();
DataSource dataSource = (DataSource)initialContext.lookup(this.getInitParameter("MyDB"));

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    您可以尝试在Resource 标签中添加global="jdbc/myDB" 属性,如下所示:

    <Context>
      <Resource name="jdbc/myDB" auth="Container" type="javax.sql.Datasource"   
        username="myUser" password="password" driverClassName="com.ingres.jdbc.IngresDriver"
        url="databaseURL" maxActive="8" maxIdle="4" maxWait="100" global="jdbc/myDB"/>
    </Context>
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 1970-01-01
      • 1970-01-01
      • 2010-12-14
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 2015-11-05
      • 2011-07-15
      相关资源
      最近更新 更多