一尘不染

Tomcat JDBC连接在Eclipse中有效,但不能独立运行

tomcat

我们正在经历升级数据库软件的过程,也正在从Tomcat 5.5升级到Tomcat7。结果,我正在使用新的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特定的source属性,但是它什么也没做。

我在Windows
7上运行,并尝试关闭防火墙以防万一。似乎并非如此。ODBC源是系统DSN,并且所有人都应该可以访问。当我将虚假的DSN名称添加到Tomcat进行测试时,它告诉我找不到它(不同的错误消息)。

在这一点上,我已经花了很长的时间,完全不知所措。我宁愿不通过Java代码来建立数据库,尤其是因为它在Eclipse中可以正常工作,但是生产将成为一个独立的环境。


阅读 266

收藏
2020-06-16

共1个答案

一尘不染

我找到了一个解决方案,希望它可以为其他人省去一些麻烦。

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

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

这就是窍门。

2020-06-16