Повторное подключение источника данных jdbc к sybase ASE 12.5 после перезапуска базы данных - PullRequest
0 голосов
/ 28 ноября 2011

У меня есть Java-приложение, которое использует jtds драйвер и commons-dbcp в качестве пула соединений. Это приложение подключается к Sybase ASE 12.5. Время от времени sybase перезапускается для обслуживания. После перезапуска мое приложение пытается повторно подключиться к sybase, но, похоже, все время происходит сбой со следующим исключением:

java.sql.SQLException: Stored procedure 'dbo.pmxSystemDate' not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output). at 
    net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368) at 
    net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2820) at 
    net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2258) at 
    net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:632) at 
    net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477) at 
    net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1304) 

Вот spring конфигурация источника данных:

<bean id="ds" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="net.sourceforge.jtds.jdbc.Driver" />
    <property name="url" value="jdbc:jtds:sybase://dbms:6000/dbTD" />
    <property name="username" value="sa" />
    <property name="password" value="" />
    <property name="initialSize" value="5"/>
    <property name="maxActive" value="10"/>
    <property name="validationQuery" value="SELECT 1" />
    <property name="testOnBorrow" value="true" />
    <property name="maxWait" value="10" />      
    <property name="removeAbandoned" value="true" />
    <property name="removeAbandonedTimeout" value="10" />
    <property name="validationQueryTimeout" value="3" />
</bean>

Если я пытаюсь эмулировать сбой сети, отключив, а затем включив сетевой интерфейс, все работает, как ожидалось, и мое приложение успешно переподключается.

Я также попробовал jconnect sybase драйвер, но безуспешно.

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

Кто-нибудь сталкивался с такой проблемой?

1 Ответ

0 голосов
/ 29 ноября 2011

Ну, чтобы преодолеть эту проблему, мне пришлось изменить запрос проверки с

select 1

до

select name from dbTD..sysobjects where name='sysobjects'
...