Tomcat JDBC连接在Eclipse中工作,但不能独立工作

时间:2014-08-05 03:35:03

标签: java eclipse tomcat jdbc database-connection

我们正在完成升级数据库软件的过程,也从Tomcat 5.5升级到Tomcat 7.因此我使用的是新的JDBC驱动程序,在本例中是推荐的SQL Anywhere JDBC 4.0驱动程序,它需要一个ODBC服务。

我已经取得了巨大的成功,让这一切都在Eclipse中发挥作用。但奇怪的是,当我尝试在Eclipse之外运行Tomcat时,我收到以下错误:

org.apache.tomcat.dbcp.dbcp.SQLNestedException: Cannot create PoolableConnectionFactory
([Sybase][JDBC Driver][SQL Anywhere]Database server not found)

可以获得一个纯Java驱动程序(jConnect)在两个环境中运行,所以我认为ODBC可能在这里发挥作用。但是jConnect非常过时,还有一些其他问题,所以我不想使用它。

以下是我的Web应用程序下的META-INF子目录中的context.xml片段:

<Context docBase="web" path="/web" reloadable="false">
  <!-- Access to the database -->
  <Resource auth="Container" 
    description="Pooled connection to the web database" 
    maxActive="30" maxIdle="5" maxWait="10000" name="jdbc/web" 
    removeAbandoned="true" 
    removeAbandonedTimeout="60" 
    driverClassName="sybase.jdbc4.sqlanywhere.IDriver"
    type="javax.sql.DataSource" 
    url="jdbc:sqlanywhere:DSN=testweb" />
</Context>

相关的jar文件sajdbc4.jar位于$ {TOMCAT_HOME} / lib中。我也尝试将它添加到系统类路径中,这没有任何区别。

Eclipse服务器正在使用自己的元空间数据,但我看到的唯一显着差异是在Host标记中向server.xml添加了以下行:

<Context docBase="web" path="/web" reloadable="true" 
source="org.eclipse.jst.jee.server:web"/>

我尝试将此行添加到我的独立安装中,并且Tomcat反对。我还尝试添加它而不是特定于Eclipse的源属性,它什么也没做。

我在Windows 7上运行,并尝试在相关的情况下关闭防火墙。它似乎不是。 ODBC源是一个系统DSN,应该可供所有人访问。当我把一个虚假的DSN名称放到Tomcat进行测试时,它告诉我它找不到它(一个不同的错误信息)。

在这一点上,我花了很长时间才完成这项工作并完全失败。我宁愿不通过Java代码建立数据库,特别是因为它在Eclipse中工作,但生产将是一个独立的环境。

1 个答案:

答案 0 :(得分:1)

我找到了一个解决方案,并希望它可以为其他人带来一些悲伤。

有必要告诉SQL Anywhere JDBC驱动程序显式使用TCP / IP协议。您也不需要通过ODBC。我将数据库服务器作为一个独立的进程运行,然后广播服务器名称&#34; testweb&#34;。然后我在资源定义中使用以下连接字符串:

url="jdbc:sqlanywhere:Server=testweb;UID=xxx;PASSWORD=xxx;port=2638;LINKS=tcpip(PORT=2638)"

这就是诀窍。