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)