3

我有一个 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 文件夹中。

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

4

2 回答 2

0

我对 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"));

希望这可以帮助。

于 2014-04-13T13:34:47.353 回答
0

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

<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>
于 2015-10-09T13:28:28.863 回答