A.4. Sybase
例A.10 Sybase Datasource
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>jdbc/SybaseDB</jndi-name>
<!-- Sybase jConnect URL for the database.
NOTE: The hostname and port are made up values. The optional
database name is provided, as well as some additinal Driver
parameters.
-->
<connection-url>jdbc:sybase:Tds:host.at.some.domain:5000/db_name?JCONNECT_VERSION=6</connection-url>
<driver-class>com.sybase.jdbc2.jdbc.SybDataSource</driver-class>
<user-name>x</user-name>
<password>y</password>
<exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.SybaseExceptionSorter</exception-sorter-class-name>
<!-- sql to call when connection is created
<new-connection-sql>some arbitrary sql</new-connection-sql>
-->
<!-- sql to call on an existing pooled connection when it is obtained from pool
<check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
-->
<!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
<metadata>
<type-mapping>Sybase</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
A.4.1. Sybase の制限
Sybase では、認識しておくべき例外設定がいくつか存在します。
- トランザクションにおけるDDLステートメント
- Enterprise Platform の中心部分であるHibernateがあると、データベースがトランザクション内でDDLステートメントに対応するか否かをSQLダイアレクトにより決定することができます。Sybase はこれをオーバーライドしません。デフォルトはJDBCメタデータをクエリしDDLがトランザクション内で許可されているか参照します。しかし、Sybaseはこのオプションを使うかのレポートを修正しません。Sybaseは、ロック関連の問題があるため、トランザクションにおけるDDLステートメントの利用を推奨していません。
ddl in tranオプションの有効化あるいは無効化の方法については、Sybase 文書を参照してくdささい。 - Sybase は、値が基盤となるカラムの制限を越えても例外をスローしません。
- Sybase ASE は、Parameterized SQLを利用している場合例外をスローしません。デフォルトでは、
jconn3.jarはParameterized SQLを挿入に使っており、値が基盤カラムの制限を越えても例外はスローされません。例外がスローされないため、Hibernateは挿入が失敗したことを通知できなくなっています。Parameterized SQLの代わりにDynamic Prepare を使うことで、ASEは例外をスローします。Hibernateはこの例外をとらえ、それに従い動作します。このような理由からHibernateの設定ファイルでは、Dynamic prepareパラメーターをtrueに設定してください。<property name="connection.url">jdbc:sybase:Tds:aurum:1503/masterDb?DYNAMIC_PREPARE=true</property>
jconn4.jarはデフォルトではDynamic Prepareを利用します。 - SchemaExportは、連鎖トランザクションモードにてストアドプロシージャーを作成できません。
- Sybaseでは、SchemaExport を使い連鎖トランザクションモードにてストアドプロシージャーを作成することができません。この問題の回避策は、以下のコードを新規のストアドプロシージャーの直後に追加します。
<database-object> <create> sp_procxmode paramHandling, 'chained' </create> <drop/> </database-object>