Java EE 7 振る舞いの違い
Java EE 6 から Java EE 7 に移行する場合、実装の変更および仕様の明確化のため、アプリケーションでの振る舞いが異なることがあります。 Liberty では、次の Java EE レベルへの移行は不要であり、既存の Java EE 6 フィーチャーを使用し続けることができます。 WebSphere Application Server traditional V9.0 では、Java EE 6 レベルに残せるのは JAX-RS テクノロジーと JPA テクノロジーのみで、それらは、このサーバーで明示的に構成しなければなりません。 他のテクノロジーはすべて、Java EE 7 レベルにマイグレーションする必要があります。
CDI 1.2
規則名 | ルールの説明 | 自動修正 |
---|---|---|
CDI は暗黙的 Bean アーカイブを認識する | Contexts and Dependency Injection (CDI) 1.1 仕様では、暗黙的 Bean ディスカバリー・モードが導入されました。そのため、WebSphere Application Server での Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 実装とは動作とパフォーマンスが変更されています。 | いいえ |
CDI は beans.xml ファイルがない場合に暗黙的 Bean をスキャンする | Contexts and Dependency Injection (CDI) 1.1 仕様では、暗黙的 Bean ディスカバリー・モードが導入されました。そのため、WebSphere Application Server での Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 実装とは動作とパフォーマンスが変更されています。 | いいえ |
InjectionPoint getAnnotated メソッドの振る舞いの変更を確認する | Contexts and Dependency Injection (CDI) 1.0 実装では、javax.enterprise.inject.spi.InjectionPoint インターフェースを実装するクラスの getAnnotated メソッドは、javax.enterprise.inject.spi.Annotated のインスタンスを返すことができます。 CDI 1.2 実装では、getAnnotated メソッドは、注入ポイントが注入フィールドであるか、コンストラクターまたはメソッドのパラメーターであるかに応じて、AnnotatedField または AnnotatedParameter のインスタンスを返さなければなりません。 |
いいえ |
beans.xml 内の有効なスキーマを確認する | このルールは、beans.xml ファイルをスキャンして、xmlns 属性で指定された名前空間が対応するスキーマの場所にマッチするかどうかを調べます。 |
java-ee-7.yml org.openrewrite.java.migrate.BeansXmlNamespace |
beans.xmlで有効な名前空間をチェックする | このルールは、beans.xml ファイルをスキャンして、xmlns 属性に有効な名前空間が指定されているかどうかを調べます。 |
いいえ |
他の JAR ファイルに含まれているインターセプター、デコレーター、および代替手法の有効化を確認する | CDI 1.2 Weld の実装では、1 つの JAR ファイルの beans.xml ファイルで有効になっているインターセプター、デコレーター、および代替は、その JAR ファイルでのみ有効になります。 | いいえ |
Specializes と Alternative の両方のアノテーションを使用しているクラスは他のモジュールに注入されない | この規則により、@Specializes および @Alternative の両方のアノテーションが付けられているクラスにフラグを立てます。 |
いいえ |
beans.xml 用に OpenWebBeans スキーマを使用しない | beans.xml ファイルの OpenWebBeans スキーマは、Liberty CDI 1.2 実装ではサポートされていません。 | いいえ |
セッション Bean のプロデューサー・フィールドは静的でなければならない | CDI 1.2 Weld 実装では、@Produces アノテーションを持つ非静的フィールドがセッション Bean クラスで宣言されると、アプリケーションが起動せず、例外がスローされます |
いいえ |
openwebbeans.properties ファイルは使用されない | このルールは、アプリケーションのMETA-INF/openwebbeans/openwebbeans.properties構成ファイルにフラグを立てます。 Java EE 7 CDI 1.2 フィーチャーは CDI の Weld 参照実装に基づいており、この構成ファイルは使用されません。 | いいえ |
セッション・スコープ Bean に含まれる一時フィールドは正常にフェイルオーバーできない | この規則により、@SessionScoped のアノテーションが付けられたクラス内の transient 修飾子のあるフィールドにフラグを立てます。 |
いいえ |
EL 3.0
規則名 | ルールの説明 | 自動修正 |
---|---|---|
ヌル・パラメーターが指定された coerceToType メソッドでの振る舞いの変更 | Expression Language 3.0 では、coerceToType(Object obj, Class<?> targetType) の第 1 パラメーターにヌル値が指定された場合の動作が変更されました。 |
いいえ |
JAX-RS 2.0
規則名 | ルールの説明 | 自動修正 |
---|---|---|
@Local JAX-RS インターフェースを実装する必要がある | WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装では、JAX-RS インターフェースが @javax.ejb.Local アノテーションに値として渡される場合、このアノテーションを使用しているクラスは、渡されるインターフェースを実装する必要があります。 |
いいえ |
JAX-RS 2.0 で SSL を使用するには構成が必要である | Liberty サーバーで JAX-RS 2.0 Secure Sockets Layer (SSL) 機能を使用するには、ssl-1.0 フィーチャーまたは appSecurity-2.0 フィーチャーのいずれかを有効にし、JAX-RS 2.0 クライアント・コードで com.ibm.ws.jaxrs.client.ssl.config プロパティーを構成する必要があります。 |
いいえ |
org.codehaus.jackson パッケージは使用できない | JAX-RS 1.1 でサードパーティ API として公開されている org.codehaus.jackson パッケージは、WebSphere Application Server Java Platform では公開されなくなりました。 |
いいえ |
アプリケーションとともに Apache Wink API をパッケージする場合、アプリケーションの変更が必要になることがある | アプリケーションとともに Apache Wink API をパッケージする場合、アプリケーションで javax.ws.rs.core.Application のサブクラスを提供する必要があり、また getClasses() メソッド実装と getSingletons() メソッド実装の少なくとも片方がヌルを返さないようにする必要があります。 |
いいえ |
Apache Wink API は使用できない | org.apache.wink パッケージは、WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装を使用する Java API for RESTful Web Services (JAX-RS) アプリケーションでは使用できません。 |
いいえ |
Apache Wink Client API は使用できない | org.apache.wink.client パッケージは、WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装を使用する JAX-RS アプリケーションでは使用できません。 |
いいえ |
com.ibm.websphere.jaxrs.server.IBMRestFilter クラスはサポートされなくなった | com.ibm.websphere.jaxrs.server.IBMRestFilter API は、JAX-RS 1.1 Wink 実装に基づいているため、WebSphere Application Server Java Platform,
Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装では使用できません。 |
いいえ |
org.apache.wink.client.handlers.LtpaAuthSecurityHandler クラスはサポートされなくなった | org.apache.wink.client.handlers.LtpaAuthSecurityHandler API は、JAX-RS 1.1 Wink 実装に基づいているため、WebSphere Application Server Java Platform,
Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装を使用する Java API for RESTful Web Services (JAX-RS) アプリケーションでは使用できません。 |
いいえ |
org.apache.wink.common.model.atom package パッケージは使用できない | org.apache.wink.common.model.atom パッケージは、WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装を使用する Java API for RESTful Web Services (JAX-RS) アプリケーションでは使用できません。 |
いいえ |
org.apache.wink.common.model.multipart パッケージは使用できない | WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装では、
org.apache.wink.common.model.multipart パッケージは IBM の com.ibm.websphere.jaxrs20.multipart パッケージに置き換えられました。 |
いいえ |
メディア・タイプの確認には isReadable メソッドおよび isWriteable メソッドを使用する | WebSphere Application Server Java Platform, Enterprise Edition (Java EE) 7 JAX-RS 2.0 実装では、@Consumes アノテーションおよび @Produces アノテーションが付けられた MessageBodyReader インターフェースおよび MessageBodyWriter インターフェースで、サポートされるメディア・タイプが制限されることがあります。 |
いいえ |
JMS Client 2.0
規則名 | ルールの説明 | 自動修正 |
---|---|---|
メッセージ優先順位および NoLocal 属性での振る舞いの変更を確認する | 4.0 より前の JAXB および XML バインディングは、非推奨の Validator クラスを提供します。 オンデマンド検証はサポートされなくなったため、このクラスは XML バインディング 4.0 では使用できません。 |
いいえ |
setClientID メソッドおよび createDurableSubscriber メソッドでの振る舞いの変更を確認する | このルールは、javax.jms.Session.createDurableSubscriber , javax.jms.TopicSession.createDurableSubscriber , javax.jms.Connection.setClientID メソッドにフラグを立てます。これは、JMS クライアント 2.0 では異なる例外を投げるからです。 |
いいえ |
Servlet 3.1
規則名 | ルールの説明 | 自動修正 |
---|---|---|
absolute-ordering エレメントの処理での振る舞いの変更を確認する | いいえ | |
asynchronous サーブレットでの振る舞いの変更を確認する | いいえ | |
getServerInfo メソッドでの振る舞いの変更を確認する | いいえ | |
sendRedirect メソッドでの振る舞いの変更を確認する | いいえ | |
ServletContextListener インターフェースでの振る舞いの変更を確認する | いいえ | |
setComment メソッドでの振る舞いの変更を確認する | いいえ | |
Web 記述子の重複エレメントに関する振る舞いの変更を確認する | いいえ | |
リソース参照注入ターゲットのマージでの振る舞いの変更を確認する | いいえ | |
URL パターン・マッピングでの振る舞いの変更を確認する | いいえ | |
javax.servlet.ServletOutputStream と javax.servlet.ServletInputStream に追加された新しいメソッドを確認する | いいえ |
OpenJPA から EclipseLink JPA
規則名 | ルールの説明 | 自動修正 |
---|---|---|
すべてのエンティティーに 1 次キーが必要 | いいえ | |
アノテーションが付けられた getter メソッドには setter メソッドが必要である | いいえ | |
自動的に生成された値を持つ属性には構成が必要である | ご使用のアプリケーションが OpenJPA によって生成された属性を持つエンティティーを含む場合、EclipseLink を使用して新規エンティティーを永続化すると、EclipseLink はこれらの値を EclipseLink テーブルから生成しようとするため、エラーが発生します。 | いいえ |
パーシスタンス・ユニットの第 2 レベル・キャッシュは無効にしなければならない | java-ee-7.yml org.openrewrite.java.migrate.JpaCacheProperties |
|
persistence.xml ファイルで OpenJPA プロバイダーを使用してはならない | java-ee-7.yml org.openrewrite.java.migrate.javaee7.OpenJPAPersistenceProvider |
|
照会のヒントまたはプロパティーに OpenJPA ストリングを使用しない | いいえ | |
ElementCollection アノテーションには定義された Column アノテーションが付随する必要がある | OpenJPA では、このアノテーションが付けられた属性の列に element という名前が付けられるのに対し、EclipseLink ではその属性の名前に基づいて列に名前が付けられます。 OpenJPA で作成されたテーブルとの互換性を維持するため、name 属性を element に設定した @Column アノテーションを追加します。 |
いいえ |
EmbeddedId アノテーションによって参照されている場合は、組み込み可能クラスには Id アノテーションを付けられない | Java Persistence API (JPA) 仕様により、EmbeddedId アノテーションが付けられた属性をエンティティーが定義する場合、Id アノテーションが付けられた属性を組み込み可能クラスに含めることができません。 EmbeddedId アノテーションと Id アノテーションの両方が定義されている場合、OpenJPA は Id アノテーションを無視するのに対し、EclipseLink は例外をスローします。 |
いいえ |
組み込みクラスには組み込み可能のアノテーションを付ける必要がある | いいえ | |
コンストラクターを持つエンティティー・オブジェクトにはデフォルトのコンストラクターも必要である | Java Persistence API (JPA) エンティティー・クラスが引数付きコンストラクターを持つ場合、そのクラスは、引数なしのデフォルトのコンストラクターも持つ必要があります。 OpenJPA 実装環境では引数なしコンストラクターが自動的に生成されますが、EclipseLink 実装環境では生成されません。 | いいえ |
java.util.Locale 属性は変換する必要がある | いいえ | |
関係マッピングには JoinColumn アノテーションを使用する必要がある | OpenJPA では、関係属性が @OneToOne アノテーションまたは @ManyToOne アノテーションのいずれかと、@Column アノテーションを共に持つ場合、この @Column アノテーションは @JoinColumn アノテーションとして扱われます。 EclipseLink では、エンティティー・クラスは関係属性をマップするために @Column ではなく @JoinColumn を使用する必要があることを示す例外がスローされます。 |
いいえ |
マッピング・ファイルは OpenJPA から EclipseLink へのマイグレーション時に処理されない | いいえ | |
OpenJPA および WebSphere JPA 構成プロパティーはマイグレーションする必要がある | いいえ | |
アノテーションが付けられていないコレクション属性には Transient アノテーションを付ける必要がある | いいえ | |
アノテーションが付けられていないエンティティー属性には Transient アノテーションを付ける必要がある | いいえ | |
コレクション値の入力パラメーターを使用した IN 式の構文を検証しなければならない | いいえ |