- - PR -
【質問:JBOSSでHSQLDBを利用したいがうまくアクセスできない。】
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2006-05-26 17:04
【質問:JBOSSでHSQLDBを利用したいがうまくアクセスできない。】
既にオラクルで動作しているものをスタンドアロンでテスト環境を作るためにJBOSSにバンドルされているHSQLDBを利用したいと想いました。データベースを移行し、さあJBOSSからアクセス開始というところで躓いています。 アプリケーションをデプロイしている環境(C:\jboss-3.2.5\server\default\deploy)にhsqldb-ds.xmlを配置して、DBに必要なテーブルと最低限のデータを用意してJAVAのモジュール側からアクセスしてみたのですが、 ERROR [Fos] [SQLException]:java.sql.SQLException: Table not found: OPE_LOG_INF in statement のようなエラーが出てしまい、テーブルにアクセスできません。 ちなみに、DatabaseManagerを起動してテーブルの作成は成功し、抽出まで出来ているのでテーブル自体は存在するはずなのですが、どうしてJAVA側から認識してくれないのかがわからず手詰まりになってしまいました。 【状況:起動ログ】起動ログの内容は以下のようになっています。 16:18:01,001 INFO [DefaultDS] Bound connection factory for resource adapter for ConnectionManager 'jboss.jca:service=LocalTxCM,name=DefaultDS to JNDI name 'java:/DefaultDS' ・・・ 10:36:11,029 INFO [STDOUT] Opening database: C:\jboss-3.2.5\server\default\data\hypersonic\default 10:36:11,029 INFO [STDOUT] HSQLDB server 1.7.1 is running 【状況:設定ファイル】ロードされているはずのhsqldb-ds.xmlには以下のような記述があります。ここは肝だと想われるので全て掲載します。 <?xml version="1.0" encoding="UTF-8"?> <!-- The Hypersonic embedded database JCA connection factory config $Id: hsqldb-ds.xml,v 1.1.2.13 2004/04/19 12:47:36 ejort Exp $ --> <datasources> <local-tx-datasource> <!-- The jndi name of the DataSource, it is prefixed with java:/ --> <!-- Datasources are not available outside the virtual machine --> <jndi-name>DefaultDS</jndi-name> <!-- for tcp connection, allowing other processes to use the hsqldb database. This requires the org.jboss.jdbc.HypersonicDatabase mbean. --> <connection-url>jdbc:hsqldb:hsql://localhost:1701</connection-url> <!-- for totally in-memory db, not saved when jboss stops. The org.jboss.jdbc.HypersonicDatabase mbean necessary <connection-url>jdbc:hsqldb:.</connection-url> --> <!-- for in-process persistent db, saved when jboss stops. The org.jboss.jdbc.HypersonicDatabase mbean is necessary for properly db shutdown --> <connection-url>jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB</connection-url> <!-- The driver class --> <driver-class>org.hsqldb.jdbcDriver</driver-class> <!-- The login and password --> <!-- <user-name>sa</user-name> --> <user-name>guest</user-name> <password></password> <!--example of how to specify class that determines if exception means connection should be destroyed--> <!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name--> <!-- this will be run before a managed connection is removed from the pool for use by a client--> <!--<check-valid-connection-sql>select * from something</check-valid-connection-sql> --> <!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use --> <min-pool-size>5</min-pool-size> <!-- The maximum connections in a pool/sub-pool --> <max-pool-size>20</max-pool-size> <!-- The time before an unused connection is destroyed --> <!-- NOTE: This is the check period. It will be destroyed somewhere between 1x and 2x this timeout after last use --> <!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a problem with not reaping threads on closed connections --> <idle-timeout-minutes>0</idle-timeout-minutes> <!-- 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> --> <!-- example of how to specify a class that determines a connection is valid before it is handed out from the pool <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyValidConnectionChecker</valid-connection-checker-class-name> --> <!-- Whether to check all statements are closed when the connection is returned to the pool, this is a debugging feature that should be turned off in production --> <track-statements/> <!-- Use the getConnection(user, pw) for logins <application-managed-security/> --> <!-- Use the security domain defined in conf/login-config.xml --> <security-domain>HsqlDbRealm</security-domain> <!-- Use the security domain defined in conf/login-config.xml or the getConnection(user, pw) for logins. The security domain takes precedence. <security-domain-and-application>HsqlDbRealm</security-domain-and-application> --> <!-- This mbean can be used when using in process persistent hypersonic --> <depends>jboss:service=Hypersonic,database=localDB</depends> </local-tx-datasource> <!-- This mbean should be used only when using tcp connections. Uncomment when the tcp based connection-url is used. --> <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic"> <attribute name="Port">1701</attribute> <attribute name="Silent">true</attribute> <attribute name="Database">default</attribute> <attribute name="Trace">false</attribute> <attribute name="No_system_exit">true</attribute> </mbean> <!-- This mbean can be used when using in process persistent db --> <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=localDB"> <attribute name="Database">localDB</attribute> <attribute name="InProcessMode">true</attribute> </mbean> </datasources> 【考察1】 ここで、connection-urlは自分のインストールした環境では、 jdbc:hsqldb:/jboss-3.2.5/server/default/data/hypersonic/localDB であり、これでDatabaseManagerには接続ができています。(※1) 自分が作成したテーブルはこのlocalDBに紐付けたつもりでいます。 DatabaseManagerのGUI画面からは作成したテーブルは正常に見え、操作も可能です。(抽出、登録OK) この設定ファイルで作成したDBは以下で存在を確認しています。 つまりDBはあるはずで、アクセスはできるはずという認識です。 【環境確認】 C:\jboss-3.2.5\server\default\data\hypersonic>dir ドライブ C のボリューム ラベルがありません。 ボリューム シリアル番号は 54A5-8EF0 です C:\jboss-3.2.5\server\default\data\hypersonic のディレクトリ 2006/05/26 10:36 <DIR> . 2006/05/26 10:36 <DIR> .. 2006/05/26 10:36 0 default.data 2006/05/26 10:36 359 default.properties 2006/05/26 10:36 43,629 default.script 2006/05/26 10:36 0 localDB.data 2006/05/26 10:36 359 localDB.properties 2006/05/26 10:36 5,324 localDB.script 6 個のファイル 49,671 バイト 2 個のディレクトリ 6,654,222,336 バイトの空き領域 ※1:接続は出来るのですが、疑問点があります。設定では、以下のように、アカウントがguestのはずですが、それでは入れず sa でパスワードなしでしか入れないのです。これはなぜなのか??解りません <!-- The login and password --> <!-- <user-name>sa</user-name> --> <user-name>guest</user-name> <password></password> 【考察2】 JAVA側でDBにアクセスする部分は InitialContext context = new InitialContext(); DataSource ds = (DataSource)context.lookup( fos.FosSystemLoadManager.DSNAME ); cat.info("データソースの取得:2:" + ds + " <<= " + fos.FosSystemLoadManager.DSNAME); conn = ds.getConnection(); で接続エラーはログを見る限り出ていません。 【ログ】 16:19:43,709 INFO [Fos] データソースの取得:2:org.jboss.resource.adapter.jdbc.WrapperDataSource@147ff11 <<= java:/DefaultDS 設定されたJNDI名で、インスタンスも正常取得されています。 それなのに、 【ログ】 16:19:43,719 ERROR [Fos] [SQLException]:java.sql.SQLException: Table not found: OPE_LOG_INF in statement [INSERT into OPE_LOG_INF (EVENT_DAYTIME, OPE_ID, OPERATION) values ('2006-05-26','takahash','takahash||ログイン|OK|NA|')] 16:19:43,719 ERROR [Fos] オペレータ操作ログINSERT異常 と出てきてしまいます。 ちなみに、このSQLをDatabaseManagerのGUI画面から手動で打ち込むと正常に登録されるので、SQLに間違いはないと想います。 そうなるとJAVA側でDBの認識がうまくいってないようで、何か設定の仕方に誤りがあるのかもしれないのですが、どなたか解りますでしょうか?お忙しいとは想いますが、宜しくご教授御願い致します。 【システム環境】 XP SP2 jboss-3.2.5 j2sdk1.4.2_08 | ||||
|
投稿日時: 2006-05-26 17:19
10:36:11,029 INFO [STDOUT] Opening database: C:\jboss-3.2.5\server\default\data\hypersonic\default
上記をみると、defaultのデータファイルでDBが起動されてると思うのですが、 Hydeさんが本当に使用したいデータファイルは C:\jboss-3.2.5\server\default\data\hypersonic\localDBではないのでしょうか。? ##以下追加 2006-5-26 17:28 ## connectin-urlのタグが2つあるのとか気になったのでちょいと修正し、 張っておきます。 尚、当方はWebLogicの環境がないため、確認できておりません。 予め、ご了承ください。 xml------------------------- <?xml version="1.0" encoding="UTF-8"?> <!-- The Hypersonic embedded database JCA connection factory config $Id: hsqldb-ds.xml,v 1.1.2.13 2004/04/19 12:47:36 ejort Exp $ --> <datasources> <local-tx-datasource> <!-- The jndi name of the DataSource, it is prefixed with java:/ --> <!-- Datasources are not available outside the virtual machine --> <jndi-name>DefaultDS</jndi-name> <!-- for tcp connection, allowing other processes to use the hsqldb database. This requires the org.jboss.jdbc.HypersonicDatabase mbean. <connection-url> jdbc:hsqldb:hsql://localhost:1701 </connection-url> --> <!-- for totally in-memory db, not saved when jboss stops. The org.jboss.jdbc.HypersonicDatabase mbean necessary <connection-url>jdbc:hsqldb:.</connection-url> --> <!-- for in-process persistent db, saved when jboss stops. The org.jboss.jdbc.HypersonicDatabase mbean is necessary for properly db shutdown --> <connection-url> jdbc:hsqldb:${jboss.server.data.dir}${/}hypersonic${/}localDB </connection-url> <!-- The driver class --> <driver-class>org.hsqldb.jdbcDriver</driver-class> <!-- The login and password --> <user-name>sa</user-name> <!-- <user-name>guest</user-name> --> <password></password> <!--example of how to specify class that determines if exception means connection should be destroyed--> <!--exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyExceptionSorter</exception-sorter-class-name--> <!-- this will be run before a managed connection is removed from the pool for use by a client--> <!--<check-valid-connection-sql>select * from something</check-valid-connection-sql> --> <!-- The minimum connections in a pool/sub-pool. Pools are lazily constructed on first use --> <min-pool-size>5</min-pool-size> <!-- The maximum connections in a pool/sub-pool --> <max-pool-size>20</max-pool-size> <!-- The time before an unused connection is destroyed --> <!-- NOTE: This is the check period. It will be destroyed somewhere between 1x and 2x this timeout after last use --> <!-- TEMPORARY FIX! - Disable idle connection removal, HSQLDB has a problem with not reaping threads on closed connections --> <idle-timeout-minutes>0</idle-timeout-minutes> <!-- 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> --> <!-- example of how to specify a class that determines a connection is valid before it is handed out from the pool <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.DummyValidConnectionChecker</valid-connection-checker-class-name> --> <!-- Whether to check all statements are closed when the connection is returned to the pool, this is a debugging feature that should be turned off in production --> <track-statements /> <!-- Use the getConnection(user, pw) for logins <application-managed-security/> --> <!-- Use the security domain defined in conf/login-config.xml --> <security-domain>HsqlDbRealm</security-domain> <!-- Use the security domain defined in conf/login-config.xml or the getConnection(user, pw) for logins. The security domain takes precedence. <security-domain-and-application>HsqlDbRealm</security-domain-and-application> --> <!-- This mbean can be used when using in process persistent hypersonic --> <depends>jboss:service=Hypersonic,database=localDB</depends> </local-tx-datasource> <!-- This mbean should be used only when using tcp connections. Uncomment when the tcp based connection-url is used. <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic"> <attribute name="Port">1701</attribute> <attribute name="Silent">true</attribute> <attribute name="Database">default</attribute> <attribute name="Trace">false</attribute> <attribute name="No_system_exit">true</attribute> </mbean> --> <!-- This mbean can be used when using in process persistent db --> <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=localDB"> <attribute name="Database">localDB</attribute> <attribute name="InProcessMode">true</attribute> </mbean> </datasources> ------------------------xml [ メッセージ編集済み 編集者: はちぃ 編集日時 2006-05-26 17:31 ] | ||||
|
投稿日時: 2006-05-26 17:26
はちぃさん
ご親切に、ご返答ありがとうございます。まさにそこですね・・・見落としていました。 その設定方法がよく解らないのですが、hsqldb-ds.xmlのどこかを修正しなければいけないみたいですね・・・使用しないdefaultをコメントアウトするとかでしょうか・・・? <!-- This mbean should be used only when using tcp connections. Uncomment when the tcp based connection-url is used. <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic"> <attribute name="Port">1701</attribute> <attribute name="Silent">true</attribute> <attribute name="Database">default</attribute> <attribute name="Trace">false</attribute> <attribute name="No_system_exit">true</attribute> </mbean> --> ちなみにlocalDBのほうは、はじめから記述があるのですけど・・・ 有効にならないのでしょうか?これでは間違ってるのでしょうか? <!-- This mbean can be used when using in process persistent db --> <mbean code="org.jboss.jdbc.HypersonicDatabase" name="jboss:service=Hypersonic,database=localDB"> <attribute name="Database">localDB</attribute> <attribute name="InProcessMode">true</attribute> </mbean> | ||||
|
投稿日時: 2006-05-26 17:30
defaultをコメントアウトすると、鬼のように例外が発生し、起動しなくなりました。
ここをコメントアウトするのではなさそうですね・・・ | ||||
|
投稿日時: 2006-05-26 17:37
さようでございますか。。。 下手な助言、申し訳御座いませんでした。 上の返信に加えた設定でもだめだったのでしょうか。 | ||||
|
投稿日時: 2006-05-26 18:07
はちぃさん
どうも大変お世話になります。編集していただいたXMLファイルで置き換えて再起動いたしましたら、動きました!ありがとうございます。 【まとめ】 というと connectin-urlのタグの重複部分を修正し一つのみにする。 default の部分はDatabaseはコメントアウトする。(頂いた設定だとコメントアウトでも動きました。) ということでしょうか。 しかし今までログに出ていた Opening database がなくなっているのと、HSQLDBのruningメッセージがないのが??ですね。 コメントアウトをはずしても・・・動きました。すると Opening databaseとHSQLDBのruningメッセージが現れます。 ですが、Opening databaseはlocalDBにはならないようですね・・・ とりあえず、テーブルアクセスは出来るようになりましたので。 これでテストしてみます・・・ また何かありましたら宜しくご教授お願いします。 本当に助かりました。 有難うございます。 | ||||
|
投稿日時: 2006-05-26 18:17
おぉ!!動きましたか。 なんとなく微妙なとこですが、 正直自信がなかったのでうれしいです。 不確かな状態での助言となり、 お手数をお掛けしましたこと、お詫び致します。 申し訳御座いませんでした。 #テストがんばってください。!! ##参考サイトありました・・・ http://wiki.jboss.org/wiki/Wiki.jsp?page=SetUpAHSQLDBDatasource http://muimi.com/j/jboss/db/ [ メッセージ編集済み 編集者: はちぃ 編集日時 2006-05-26 18:40 ] |
1