JBoss Advent Calendar 2011の14日目のエントリです。今日はJDBC XAデータソースの説明。 XAってなによ? ツーフェーズコミット(2相コミット, 2PC)するためのインタフェースです。 XAとか2PCってどんなときに使うの? 一つのトランザクションで2つ以上のトランザクショナルリソース(JDBC JCAリソースアダプタ=データベースとか、JMS JCAリソースアダプタとか)を扱う場合に利用します。 XAとか2PCってなんで必要なの? 例えばデータベースが二つ、DB-AとDB-Bがあって、DB-AからDB-Bにデータを移す処理をするとします。このとき、DB-AからSELECTして削除してDB-Bにインサートする、というようなことをするわけですが、この処理が途中で落ちたら即データ消滅、データ重複などのデータ不整合という結果になってしまいます。XAを使うとこういった
Commons DBCPを超えるTomcat JDBC Poolとは:Tomcat 7の新機能で何ができるようになるのか?(番外編)(1/2 ページ) TomcatのDBコネクション・プールは2つある @IT読者の皆さんは「Tomcat JDBC Connection Pool」をご存じですか? 通常、TomcatのDBコネクション・プールといえばApache Commonsプロジェクトの「Commons DBCP」を想像するかと思います。しかし、Tomcatには「Commons DBCP」以外にもDBコネクション・プールの実装が存在します。それが、「Tomcat JDBC Connection Pool」(以下、Tomcat JDBC Pool)です。 Tomcat JDBC Poolとは、Apache Tomcatプロジェクトが独自に作成したDBコネクション・プールの実装のことです。
C JDBCエラー・メッセージ この付録では、Java Database Connectivity(JDBC)エラー・メッセージの一般構造について説明し、Oracle JDBCドライバによって戻されることがある一般JDBCエラー・メッセージとTTCエラー・メッセージをリストします。この付録には、次の項目が含まれます。 JDBCエラー・メッセージの一般構造 一般JDBCメッセージ ネイティブXAメッセージ TTCメッセージ メッセージ・リストは、それぞれはじめにORA番号順、次に五十音順にソートされています。 JDBCエラー・メッセージの一般構造 一般JDBCエラー・メッセージ構造では、次のようにメッセージの末尾にコロンを付けて、ランタイム情報を追加できます。 <error_message>:<extra_info> たとえば、「closed statement」エラーは次のように出力される
以下で紹介されているOracle JDBCのJava.sql.PreparedStatement#setString()の制限について。 [Oracle] JDBCでバインドできる文字列のサイズの制限 | Archive Redo Blog 例えばデータベースキャラクタセットがJA16SJISのDBにvarchar2(4000)の列があったとしても、PreparedStatment#setString()ではUTF-8換算で2000バイトまでしか挿入できない。 UTF-8は日本語が3バイトなので、全て日本語の場合だと666文字までしか入らないという問題があります。 上記のページではsetCharacterStream()を使って解決としていますが、 以下のページではまた別の問題が起きることを指定しています。 http://rryu.sakura.ne.jp/nisenise-fuhito/
Java.sql.PreparedStatementインターフェースを使用してOracleデータベースにデータを登録する際、setString()メソッドを使用してバインドできる文字列のサイズには制限があるようです。 Oracleデータベースとしてのバインドサイズの上限はVARCHAR2、NVARCHAR2の最大サイズ(4000バイト)と同じなのですが、Oracle JDBCドライバでPreparedStatementインターフェースのsetString()メソッドを使用した場合、使用しているキャラクタ・セットによってより厳しいサイズ制限が課せられるようです。 「Oracle9i JDBC開発者ガイドおよびリファレンス2(9.2)」の中の「ThinドライバによるSQL CHAR データ・サイズ制限」というトピックで解説されている内容を見ると、データベース・キャラクタセットがJA16SJIS
S2UnitはDBを使ったユニットテストの支援機能としてExcelファイルからDBにテスト用データを投入したり、ExcelファイルとDBの内容を比較したりすることができます。ただ、実際にやってみるとわかるのですがこのExcelファイルのメンテナンスコストが馬鹿になりません。 そこで、実際にDBにアクセスするのではなく、フレームワークやJDBCドライバのレイヤで発行されたSQLを横取りし、期待通りのSQLが発行されたのかどうかを確認するという方法はどうだろう?と考えました。そういうライブラリを自作しようかとも思ったのですが(実際途中まで作っていたのですが)、世の中同じことを考える人はいるもので、MockRunnerのJDBC Mockという機能を使うとそのものズバリなことができるようです。 http://mockrunner.sourceforge.net/examplesjdbc.html
この連載では、Javaのデータベース・アクセスAPIである「JDBC」の機能を、サンプルコードを交えて解説していきます。また、J2EEにおけるJDBCの位置付けや、JDBCを利用するさまざまなテクノロジについても解説していく予定です。前提知識としては、Javaとリレーショナル・データベースに関するベーシックな知識があれば十分です。 今回は、JDBCの概要について簡単に触れた後、JDBCのアーキテクチャについて解説します。 JDBCとは? JDBCは、一言でいってしまうなら「リレーショナル・データベース(および、ほとんどすべての表形式のデータ)にアクセスするための、標準Java API」です。JDBCは「Java Database Connectivity」の省略だといわれています(が、実はJDBC仕様には明記されていません)。 企業内のクリティカルなデータは、多くの場合リレーショナル・デー
通常、自動コミットがオフの状態であれば、JavaからDBのコネクションをクローズするときにロールバックかそれに相当する処理が行われます。 Javaのドキュメントにも、このことが書かれています。 自動コミットモードが無効にされている場合、変更をコミットするには commit メソッドを明示的に呼び出す必要があります。そうしないとデータベースの変更は保存されません。 Oracle Technology Network for Java Developers | Oracle Technology Network | Oracle ところが・・・ 自動コミット・モードを使用禁止にして、直前の変更を明示的にコミットまたはロールバックせずに接続をクローズした場合は、暗黙的なCOMMIT操作が実行されます。*1 3.基本機能 - Oracle Database JDBC開発者ガイドおよびリファレンス
Tomcatでコネクションプーリングを使用していて、Tomcat <-> Oracle間の接続がFINやRSTパケットによる通知なしに切られた場合、プールしている接続が実際には死んでいる状態が発生する。例えば、以下のような場合に発生する。 APサーバー <-> DBサーバー間のFirewallによるセッション切断 DBサーバーのリブート(Windows Server 2008の場合。他は未確認) なお、Windows Server 2008で試した限りではOracleサービスの再起動やshutdown、startupの場合は発生しなかった。おそらくFINまたはRSTパケットが飛んでいると思われる。 一度、この状態に陥ると、その後ネットワークやDBサーバーが復旧しても死んだ接続がプールに残り続け、その接続を使用したTomcatのスレッドはSQLを実行する処理でOracleからの応答をずっと待
http://d.hatena.ne.jp/muimy/20100918/1284812424 のつづき どうも、WEB-INF/libにJDBCドライバ置かずに、Tomcatのlibに置いたら、怒られないようだ 汎用的なやつをTomcatが勝手に呼んでくれないのは、クラスローダーがらみの問題ぽい。 registerDriverするのとunregisterDriverするのは同じクラスローダーである必要があるとか Tomcatのソースちょっと追ってみたが、警告を出しているのは、 TomcatのWebappClassLoader#clearReferencesJdbcメソッド内の以下の部分 for (String name : driverNames) { log.error(sm.getString("webappClassLoader.clearJbdc", contextName, n
Tomcat上で、昔は文句言われずに動いてたWebアプリが、最近動かしたら、リロード時に怒られるようになった。こんなメッセージがでる。 致命的: The web application [/hogehoge] registered the JBDC driver [com.mysql.jdbc.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered. ぐぐってみると、内臓DBCPのバグだから、君は悪くない!ほっとけ!っていうのがあって、ちょっとホッとしたが http://stackoverflow.com/questions/3320400/jdbc-dr
2010年2月8日 at 12:21 午後 1件のコメント GlassFishはデータベースとの接続にデータベースベンダーが提供するJDBCドライバを使用します. GlassFishにはインストール時デフォルトで Java DBが付属しており,あらかじめJava DBに対するJDBCリソースと接続プールの設定がされています.そして GlassFish の監視系の機能の一つである,「呼び出しフロー」のデータ保存先として使用されています. ここでは,新たにMySQL 5.1との接続設定方法について紹介します.MySQLと接続するためには,MySQLのJDBCドライバを事前に入手しておいてください. また以降の手順ではMySQLが既にインストールされていることを前提に説明します. JDBCドライバに対するクラスパスを設定 dashost > asadmin get “cluster1-confi
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く