Sybaseの件
既に2年前になりますが、以下の様なエントリを連日書いた時期がありました。
要約すると、トランザクション管理下において
に付属しているJDBCドライバを使って、DatabaseMetaDataを取得すると、
一時表が作成されてしまう事により、単一のトランザクション内では、SELECT文とCREATE TABLEとを
同時に発行するとエラーになってしまい以下の様なメッセージが出力される。
Caused by: com.sybase.jdbc3.jdbc.SybSQLException: The 'CREATE TABLE' command is not allowed within a multi-statement transaction in the 'tempdb' database.
結果的に、SybaseでS2Daoを使用する際には、DaoMetaDataFactoryImplのDatabaseMetaDataを取得する部分に、
NotSupportedInterceptorを適用する事で、一時凌ぎする事になる、となります。
Sybase付属のJDBCドライバには、DatabaseMetaData周りでなくとも、
どうにも怪しい…納得のいかない動作をする事がそれなりにあります。
ここで、予算に余裕のあるプロジェクトでは、以下の様な選択肢もある様です。
データディレクトテクノロジーズと言う会社が販売しているDataDirect Connect for JDBCと言うプロダクトを使用する。
キチンと検証した訳ではありませんが、Sybaseに付属しているJDBCドライバよりも非常に快適に動作する様です。
当然の事ながら、S2Daoを使用する際に、上記に上げた様な一時凌ぎを行う必要はありません。
サテ、これは一体どういう事なんでしょうか…。
*1:寧ろサーバは関係ない可能性アリ