第5章 既知の問題

Enterprise Application Platform 5.1.1 での既知の問題をコンポーネント別に一覧にまとめています。

クラスタリング

JBPAPP-4541
MCBean:ServerConfig Profile Service が管理するコンポーネント上でpartitionNameプロパティを使う場合、null 値を返していましたが、MCBean:HAPartition 管理コンポーネントからのpartionName を使ってください。こちらが正しいプロパティになっています。
JBPAPP-5464
InitialState フェーズでHibernate SecondLevel Cache を使うと、NullPointerExceptionが発生します。この問題を回避するには、クエリキャッシュを無効にしてください。クエリキャッシュを無効にする方法ですが、デフォルトではクエリキャッシュが無効となっているため、persistence.xmlを編集することで、以下のように明示的に query_cachefalseに設定するか、あるいはこの行をすべて削除します。
<property name="hibernate.cache.use_query_cache" value="false"/>

コンソール

JBPAPP-5285
Admin Consoleを使ってデータベースプロパティを変更すると、変更が永続化されます。しかし、この変更を元に戻しアプリケーションサーバーを再起動すると以前の値が永続されてしまいます。この問題はまだ解決されていませんが、server/PROFILE/data/attachmentsにある関連の添付ファイルを編集しデータソース設定が新規設定を強制的に使用させることで回避可能です。

EJB

JBPAPP-4899
jboss-ejb3-core-1.3.5 をデフォルト設定 LANG=C でコンパイルすると、マッピングできない文字が表示されASCIIのエンコーディングエラーとなります。LANG=en_US.UTF-8 を使うことでこの問題を回避してください。
JBPAPP-5121
永続ユニットがEARの外側にあり、永続ユニットの注入を試行する bean がEAR内にある場合、永続ユニットをEARにデプロイできません。永続ユニットが見つからないため、この注入は失敗します。EJB3仕様では予期される動作で、EJB3仕様に厳密に準拠するには、永続ユニットはEARにパッケージする必要があります。JBoss 固有の動作により、永続ユニットがEARの外側にも存在可能となっています。これは JBoss AS サーバープロファイルの下にあるdeployers/ejb3.deployer/META-INF/jpa-deployer-jboss-beans.xml ファイルで設定されおり、該当箇所は以下の通りです。
<bean name="PersistenceUnitDependencyResolver" class="org.jboss.jpa.resolvers.DynamicPersistenceUnitDependencyResolver"/>
デフォルトでは、DynamicPersistenceUnitDependencyResolverが使われており、JMX Console を使いMBean 経由で仕様に準拠した動作となるよう制御可能です。仕様に準拠しない JBoss Search Strategy は、こちらにあります。

Hibernate

JBPAPP-6395
LEFT OUTER JOIN でCriteria API を利用し、子に基準を追加する場合、子のコレクションにはこの基準と一致する子しか含まれなくなります。この動作は、フィルターを利用しない場合でも適用されます。例えば、
criteria.createCriteria("children", JoinFragment.LEFT_OUTER_JOIN)
この問題に対する回避策はありません。
JBPAPP-6475
エンティティーに以下の条件が含まれている場合、org.hibernate.PropertyAccessException がスローされる可能性があります。
  1. @EmbeddedIdを使う場合
  2. コレクションあるいは関連プロパティ/フィールドで@JoinTable を利用し、このエンティティーの別プロパティー/フィールドを参照している場合
例:
@EmbeddedId
private MyPk id;
private Long name;
@CollectionOfElements
@JoinTable(
name="GLOBAL_NOTES",
joinColumns=@JoinColumn(name="text_id", referencedColumnName="name"))
private Set<String> globalNotes = new HashSet<String>();
この問題に関する回避策ですが、@EmbeddedIdを利用しないという策しかありません。

メッセージング

JBPAPP-3904
Oracle 11g R1を利用している場合、Oracle JDBC ドライバ version 11.1.0.7.0 が原因で、JBoss Messaging Transaction Service がSQLException ("Bigger type length than Maximum")で失敗します。
これは、Oracle JDBC driver 11.1.0.7.0における再発バグにより起こっています。
Oracle 11g R1、Oracle 11g R2、Oracle RAC 11g R1、Oracle RAC 11g R2で利用する場合は、Oracle JDBC ドライバー version 11.2.0.1.0 を推奨しています。
JBPAPP-4668
Oracle 11g R1、R2、RAC 上で最新のJDBCドライバー version 11.2.0.2.0を使うと、JBoss Messaging Test Suite テスト2つが失敗します。
  • QueueManagementTest.testDestroyDestinationProgrammatically
  • QueueManagementTest.testDestroyDestinationProgrammaticallyWithParams
これらのテストは、fullSize キュー設定パラメータに大きな値を使い、java.sql.PreparedStatementsetFetchSize メソッドへ渡します。JDBCドライバの問題は、executeQuery() が呼び出されると、通常のメモリ以上の量を消費していることになります。その結果、java.lang.OutOfMemoryErrorが発生しテストが失敗してしまいます。
JBPAPP-5124
JDBC driver Sybase jConnect JDBC driver v7 (Build 26502)でSybase データベースを使うと、このドライバのPreparedStatement クラスの制限により、sybase-persistence-service.xml 設定ファイルのMaxParams 属性を 481 より大きく設定できなくなります。 MaxParams 属性が481よりも大きい値に設定されると、予期せず失敗してしまう可能性があります。この問題を回避するには、MaxParams481よりも小さい値にします。
JBPAPP-5537
メッセージ駆動型 beanがデフォルト設定 useDLQ=true, DLQMaxResent=5 でデプロイされ、メッセージの再送が促されると、メッセージがデッドレターキューに送信された後でもメッセージがdelivering の状態でキューに残ります。この問題を回避するには、useDLQ=falseに設定することでMDB側で処理するデッドレターキューを無効にします。

ネットワーキング

JBPAPP-5591
Enterprise Platformのバージョン5ではIPv6に対応していません。

RESTEasy

JBPAPP-4665
java.lang.SecurityExceptionが原因で、Resteasy-guice アプリケーションがデプロイに失敗します。以下のようなエラーメッセージが表示されます。
java.lang.SecurityException: class "org.jboss.resteasy.examples.guice.hello.DefaultGreeter$$FastClassByGuice$$70fd68d0"'s signer information does not match signer information of other classes in the same package
これは、JBoss Enterprise Application Platform の cglib.jar が署名され、cglib-instrumented プロキシがアプリケーションターゲットクラスの署名者情報ではなく、cglib.jar の署名者情報を使うためです。
JBPAPP-4995
2010年8月え基本認証メソッドをTwitter が廃止するとのことで、TwitterClient の例は RESTEasy 1.2.x で廃止予定となっています。そのため、アプリケーションはすべてOAuthを使う必要があります。RESTEasy 2.x には TwitterClient の例を編集しOAuthが入ったものが含まれるようになっています。テスト目的で利用いただく場合、RESTEasy 2.x から例をダウンロードしてください。
JBPAPP-5038
jettison.jar ファイルが jboss-eap-noauth-5.1.0.CR3.zipjboss-eap-5.1/resteasy/lib ディレクトリに含まれていません。この問題を回避するには、Seam ディストリビューションに含まれているjettison.jar ファイル、jboss-eap-5.1.1/seam/lib/jettison.jarを利用してください。

スクリプト

JBPAPP-5003
jboss_init_redhat.sh のスクリプトがディストリビューションから削除されました。代わりに、ご自身のスクリプトを使うことで、Enterprise Platformのスタートアップをカスタマイズできます。

Seam

JBPAPP-5039
Microsoft Internet Explorer 8とSeam のタスク例との互換がないことで、タスクに添付されたテキストがタスク一覧に空白の行として表示されてしまいのですが、この問題の回避策はありません。
JBPAPP-6366
jboss-seam2-examples ディストリビューションに含まれる例のうち、JBoss Enterprise Application Platform サーバーの機能を紹介することを目的に設計されているものもあります。完全なApplication Platform サーバーを必要とするこれらの例は、JBoss Enterprise Web Platform サーバーでは機能しません。

TCK

JBPAPP-3929
java.sql.Date.valueOf が日付の形式 yyyy-mm-dd を解析しようとすると、TCKテストがjava.lang.IllegalArgumentExceptionをスローしていました。これは、最新のSun JVM、Sun JDK 1.6.0_24の再発バグが原因となっています (詳細はhttp://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6898593 を参照)。Sun JDK 1.6.0_17にダウングレードすることで、この問題を回避できます。

Varia

JBPAPP-4912
webapp から依存されているデータソースが再起動すると、NullPointerException がスローされていました。このエラーが IllegalStateExceptionに変更され、"WebModules cannot be restarted, and must be redeployed"と買えされるようになりました。