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年以上問題なく稼働しているので、解決方法としては正しいのかと思われます。
同じ現象が起きる人がいるかもしれないので、掲載します。
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年以上問題なく稼働しているので、解決方法としては正しいのかと思われます。
コメント
コメントを投稿