Соединение Tomcat JDBC работает в Eclipse, но не автономно

1

Мы проходим процесс обновления нашего программного обеспечения базы данных, а также переход от Tomcat 5.5 к Tomcat 7. В результате я использую новый драйвер JDBC, в данном случае рекомендуемый драйвер SQL Anywhere JDBC 4.0, для которого требуется служба ODBC.

У меня был большой успех, чтобы все это работало в Eclipse. Но как ни странно, когда я пытаюсь запустить Tomcat вне Eclipse, я получаю следующую ошибку:

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

Я могу получить чистый Java-драйвер (jConnect) для работы в обеих средах, поэтому я думаю, что ODBC может играть здесь роль. Однако jConnect очень устарел и имеет некоторые другие проблемы, поэтому я не хочу его использовать.

Вот фрагмент context.xml из моего подкаталога META-INF в моем веб-приложении:

<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 использует свои собственные данные о метапространстве, но единственное существенное различие, которое я видел, это добавление следующей строки в server.xml в теге Host:

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

Я попытался добавить эту строку к моей автономной установке, и Томкат возразил. Я также попытался добавить его за вычетом атрибута источника, зависящего от Eclipse, и ничего не сделал.

Я работаю на Windows 7 и пытался отключить брандмауэр в случае, если это имеет значение. Кажется, это не так. Источник ODBC является системным DSN и должен быть доступен для всех. Когда я помещаю поддельное имя DSN в Tomcat для тестирования, он говорит мне, что не может найти его (другое сообщение об ошибке).

В этот момент я потратил очень много времени на это, и я полностью потерял его. Я бы предпочел не настраивать базу данных с помощью кода Java, особенно, поскольку он работает в Eclipse, но производство будет автономной средой.

Теги:
tomcat
jdbc
database-connection

1 ответ

1
Лучший ответ

Я нашел решение и надеюсь, что это может спасти другим горе.

Необходимо указать драйверу JDBC SQL Anywhere явно использовать протокол TCP/IP. Вам также не нужно проходить через ODBC. Я запускаю сервер базы данных как отдельный процесс, поддерживая имя сервера "testweb". Затем я использую следующую строку подключения в определении ресурса:

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

И это делает трюк.

  • 0
    Я долго искал что-то подобное для СООО, большое спасибо
  • 1
    Пожалуйста. :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню