JBoss EAP 4.3 のデフォルトデータソースを Oracle に切り替える
JBoss EAP はデフォルトで内蔵の HSQLDB を使います。
これを Oracle に切り替えました。
またまた備忘録を残しておきます。
1. hsqldb 用の設定ファイルを削除
$CONFIG/deploy/hsqldb-ds.xml
$CONFIG/deploy/jboss-messaging/hsqldb-persistence-service.xml
2. Oracle 用の設定ファイルをコピー
cp $JBOSS_HOME/docs/examples/jca/oracle-ds.xml $CONFIG/deploy/
cp $JBOSS_HOME/docs/examples/jms/oracle-persistence-service.xml $CONFIG/deploy/jboss-messaging/
3. データソースの接続設定
$CONFIG/deploy/oracle-ds.xml の JDBCURL やユーザID、パスワード等を設定。
4. クラスタリングの設定を無効に(default 設定がベースの場合)
$CONFIG/deploy/jboss-messaging/oracle-persistence-service.xml の 132 行目を修正。
+ <attribute name="Clustered">false</attribute>
5. ドライバをコピー
$CONFIG/deploy/lib 以下に ojdbc5.jar をコピー
6. JBoss を起動
以上。
トラブルシューティング:
- ClassNotFoundException
お馴染みの例外。
原因: JDBCドライバが見つからない
対策: JDBCドライバを $CONFIG/lib ディレクトリに配置
at org.jboss.mx.loading.LoadMgr3.beginLoadTask(LoadMgr3.java:212)
at org.jboss.mx.loading.RepositoryClassLoader.loadClassImpl(RepositoryClassLoader.java:514)
at org.jboss.mx.loading.RepositoryClassLoader.loadClass(RepositoryClassLoader.java:408)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:374)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:242)
at org.jboss.resource.adapter.jdbc.local.LocalManagedConnectionFactory.getDriver(LocalManagedConnectionFactory.java:272)
... 127 more
- NoClassDefFoundError: org/jgroups/Channel
原因: クラスタ化していないコンフィグレーションで JBoss Messaging のクラスタ化が有効になっている。
default コンフィグレーションをベースにしてぼんやりしていると発生する。
対策: oracle-persistence-service.xml の 132 行目を修正してクラスタ化を無効に設定する。
/docs/examples/jms/oracle-persistence-service.xml はデフォルトで有効になっていました。
java.lang.NoClassDefFoundError: org/jgroups/Channel
at org.jboss.messaging.core.jmx.MessagingPostOfficeService.startService(MessagingPostOfficeService.java:425)
at org.jboss.system.ServiceMBeanSupport.jbossInternalStart(ServiceMBeanSupport.java:289)
at org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:196)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
tns listener が起動しない
久しぶりに触ると細かいところでちょこちょこ迷います。
Parallels Desktop を再起動したところ、1521 番でリスンしてくれていませんでした。
サービスコントロールパネルで tns listener を見ると起動していません。
手動で起動させても失敗・・・。
チェックした場所:
イベントログ - 何もなし
ORA_HOME/db_1/NETWORK/log/listener.log - バインドできない旨のエラー発見
リスニングしています: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
リスニング・エラーです: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=*.*.*.*)(PORT=1521)))
TNS-12545: 接続に失敗しました。ターゲット・ホストまたはオブジェクトが存在しません。
TNS-12560: TNS: プロトコル・アダプタ・エラー
TNS-00515: 接続に失敗しました。ターゲット・ホストまたはオブジェクトが存在しません。
32-bit Windows Error: 49: Unknown error
リスニングしていません: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc)))
原因:
ホストのIPアドレスが変わっており、バインドできなかった。
対策:
ORA_HOME/db_1/NETWORK/ADMIN/listener.ora の IP アドレスを書き換える。
HOST=0.0.0.0 とすれば全ての NIC にバインドしてくれるので IP アドレスが変更になっても正常に起動できる。
scott さんはデフォルトでロックされてる
久しぶりに Oracle を触ってみました。バージョンは10gです。
デフォルトで change_on_install 固定はマズイだろうと思っていましたが、最近はテスト用のアカウントまできっちりしているんですね。
デフォルトで設定されている ID/パスワード が問題になったのか、scott さんはロックされていました。
しかもパスワードが最初から期限切れになっているというおまけ付き。
アカウントをアンロック、scott/tiger でログイン、パスワードを変更するまでの様子をメモしておきます。
ERROR:
ORA-28000: the account is locked
警告: Oracleにはもう接続されていません。
SQL> conn system / *******
接続されました。
SQL> alter user scott account unlock ;
ユーザーが変更されました。
SQL> conn scott/tiger;
ERROR:
ORA-28001: the password has expired
scottに対するパスワードを変更しています。
新規パスワード: *****
新規パスワードを再入力してください: *****
パスワードが変更されました。
接続されました。
SQL> select * from emp;
WebLogic Type 4 Driver for Oracle が非推奨に
WebLogic Server 10gR3 より Type 4 driver for Oracle が非推奨になったようです。"非推奨" とは、Oracle|BEA は今後新機能の追加などを行わないことを意味します。セキュリティ脆弱性などが見つかった場合は修正されますが、利用者は Oracle Thin Driver など他の JDBC へ移行することが推奨されます。
・The Oracle Driver (Deprecated)
・Using WebLogic Type 4 JDBC Drivers
WebLogic Type 4 driver は"もう一つの" JDBC ドライバで、WLS8.1 の時から提供されてきました。中身はデータディレクト社の OEM 製品です。
このドライバはパフォーマンスに重点が置いてあり、多くの場合 Oracle の純正 Thin Driver よりも良いパフォーマンスを発揮します。しかし、残念なことに長い間この製品は不安定さを抱えてきました。個人的にもより実績のある Thin Driver への移行を強くお勧めします。
Type 4 ドライバのリタイア後にもなんらかの理由で Type4 ドライバを継続して利用したい場合は、データディレクト社から別途お購入することも一応可能です。