第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_cache
をfalse
に設定するか、あるいはこの行をすべて削除します。<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 がスローされる可能性があります。
- @EmbeddedIdを使う場合
- コレクションあるいは関連プロパティ/フィールドで@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.PreparedStatement
でsetFetchSize
メソッドへ渡します。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
よりも大きい値に設定されると、予期せず失敗してしまう可能性があります。この問題を回避するには、MaxParams
を481
よりも小さい値にします。 - 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.zip
のjboss-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"と買えされるようになりました。