GeneXusデフォルトのJDBCドライバー(SQLServer)で問題

他では聞いたことの無い事例ですが、
同じ現象が起きる人がいるかもしれないので、掲載します。

GeneXusでJava/SQLServerのシステムを構築し運用していた所、
「データ登録時に、まれにエラーが発生することがある」という現象が出ました。

エラーの内容
HTTPステータス 500 - java.sql.SQLException: I/O Error: Connection reset
HTTPステータス 500 - java.sql.SQLException: Invalid state, the Connection object is closed.

必ず起きるわけではないので、調査がかなり難しかったのですが、
結果としては、DBにBLOBのデータがあり、
画面からデータを登録する際に、ファイルもアップロードするのですが、
ファイルサイズが大きい場合に起こりやすいという状態でした。



GeneXusでJava/SQLServerのシステムを構築した場合、
JDBCドライバーはデフォルトでは、jTDS Draiver(Type4)が設定されます。
こちらはオープンソースのJDBCドライバーとなります。

普段は特に問題ないのですが、BLOBのファイルについて、
サイズが大きい場合やアップロードの頻度が高い場合に
予期しないエラーが発生する(ことがある)


解決方法として、SQLServerには、Microsoftが提供するJDBCドライバーがありますので、
そちらのドライバーを使用することです。
例:
https://docs.microsoft.com/ja-jp/sql/connect/jdbc/microsoft-jdbc-driver-for-sql-server?view=sql-server-2017



具体的な原因が不明なので、スッキリはしないですが、
JDBCドライバーを入れ替えて以降はエラーが発生せず、
1年以上問題なく稼働しているので、解決方法としては正しいのかと思われます。

コメント

このブログの人気の投稿

IVS文字・サロゲートペア文字の注意

Tomcatの設定3:8080ポート以外で動作させる

Tomcatの設定5:メモリ調整と起動モード

Tomcatの設定4:セキュリティ関連の調整

GeneXusのオプション設定、起動時オプション

ファビコン(fabicon)の設定