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 実装ではサポートされていません。 | java-ee-7.yml org.openrewrite.xml.liberty.WebBeansXmlRule |
| セッション Bean のプロデューサー・フィールドは静的でなければならない | CDI 1.2 Weld 実装では、@Produces アノテーションを持つ非静的フィールドがセッション Bean クラスで宣言されると、アプリケーションが起動せず、例外がスローされます |
java-ee-7.yml org.openrewrite.java.migrate.AddStaticVariableOnProducerSessionBean |
| 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 アノテーションに値として渡される場合、このアノテーションを使用しているクラスは、渡されるインターフェースを実装する必要があります。 |
いいえ |
| Java API for RESTful Web Services (JAX-RS) および Contexts and Dependency Injection for Java (CDI) | このルールは、アプリケーション内のJAX-RSとCDIの存在を識別する。 WebSphere Application Server Java EE 7に準拠した従来の、デフォルトでJAX-RS が付属しているが、必要に応じてJAX-RS に戻すことができる。 V9.0 2.0 1.1 | いいえ |
| 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 エレメントの処理での振る舞いの変更を確認する | サーブレット 3.0 では、metadata-complete 属性が "true" に設定されている場合、web.xml ファイルの <absolute-ordering> 要素で参照されているかどうかに関係なく、すべての Web フラグメント アーカイブが使用されます。 サーブレット3.1では、<absolute-ordering>要素にリストされていないウェブ・フラグメントは処理から除外されます。 | いいえ |
| asynchronous サーブレットでの振る舞いの変更を確認する | Servlet 3.0 では、要求に照会ストリングが含まれている場合、このストリングが、ディスパッチされるリソースに対して使用可能にされます。 Servlet 3.1 では、ディスパッチするリソースに対して照会ストリングが提供されている場合、この照会ストリングが、元の要求からの照会ストリングの代わりに、ディスパッチされるリソースに対して使用可能にされます。 | いいえ |
| getServerInfo メソッドでの振る舞いの変更を確認する | この規則は javax.servlet.ServletContext.getServerInfo() メソッドを参照するようにフラグが立てられます。Servlet 3.1 フィーチャーが実装されている場合と Servlet 3.0 フィーチャーが実装されている場合とで返される値が異なるためです。 | いいえ |
| sendRedirect メソッドでの振る舞いの変更を確認する | この規則は javax.servlet.http.HttpServletResponse.sendRedirect(String) メソッドを参照するようにフラグが立てられます。Servlet 3.1 フィーチャーが実装されている場合と Servlet 3.0 実装の場合で相対 URL に対するデフォルト動作が異なるためです。 | いいえ |
| ServletContextListener インターフェースでの振る舞いの変更を確認する | javax.servlet.ServletContextListener インターフェースを実装するクラスは、javax.servlet.annotation.WebListener アノテーションが付けられるか、web.xml ファイルまたは web-fragment.xml ファイル内で listener-class として定義される必要があります。 | いいえ |
| setComment メソッドでの振る舞いの変更を確認する | この規則は javax.servlet.SessionCookieConfig.setComment() メソッドを参照するようにフラグが立てられます。Servlet 3.1 フィーチャーが実装されている場合はサーブレット・コンテキスト初期化後に IllegalStateException がスローされますが、Servlet 3.0 ではそうではないためです。 | いいえ |
| Web 記述子の重複エレメントに関する振る舞いの変更を確認する | Servlet 3.0 では、Web 記述子に重複した <ordering> または <absolute-ordering> 要素が含まれていても、アプリケーションをデプロイできます。 Servlet 3.1 では、これらのエレメントが重複しているアプリケーションはデプロイできません。 | いいえ |
| リソース参照注入ターゲットのマージでの振る舞いの変更を確認する | Servlet 3.1 フィーチャーが実装されている場合と Servlet 3.0 実装の場合でリソース参照注入ターゲットのマージ動作は異なります。 以前は web.xml ファイルから除外されていた、web-fragment.xml ファイル内に定義された新しくアクティブにされた注入ターゲットが原因で、既存アプリケーションの動作が変わる可能性があります。 | いいえ |
| URL パターン・マッピングでの振る舞いの変更を確認する | Servlet 3.0 では、同じ URL パターンが複数のサーブレットにマップされる場合でもアプリケーションは正常に開始します。 Servlet 3.1 では、アプリケーションは開始せず、例外をスローします。 | いいえ |
| javax.servlet.ServletOutputStream と javax.servlet.ServletInputStream に追加された新しいメソッドを確認する | Servlet 3.1 で、javax.servlet.ServletOutputStream および javax.servlet.ServletInputStream に新しいメソッドが導入されました。 これらのメソッドは、Servlet 3.0 には含まれておらず、Servlet 3.1 にマイグレーションするときに実装する必要があります。 | いいえ |
OpenJPA から EclipseLink JPA
| 規則名 | ルールの説明 | 自動修正 |
|---|---|---|
| パーシスタンス・ユニットの第 2 レベル・キャッシュは無効にしなければならない | OpenJPA ではデフォルトで第 2 レベル・キャッシュは無効になりますが、EclipseLink ではデフォルトで有効になります。 クイック・フィックスを使用して、パーシスタンス・ユニット・キャッシュ構成を変更し、EclipseLink で同じキャッシュ動作を維持します。 | java-ee-7.yml org.openrewrite.java.migrate.JpaCacheProperties |
| persistence.xml ファイルで OpenJPA プロバイダーを使用してはならない | OpenJPA から EclipseLink にマイグレーションする場合には、OpenJPA 固有のプロバイダーではなく、デフォルト JPA プロバイダーを使用します。 | java-ee-7.yml org.openrewrite.java.migrate.javaee7.OpenJPAPersistenceProvider |
| 照会のヒントまたはプロパティーに OpenJPA ストリングを使用しない | 照会のヒントおよびプロパティーに使用される OpenJPA 定義のストリングは、可能な場合、EclipseLink の同等のストリングに置き換える必要があります。 | いいえ |
| OpenJPA EclipseLink 情報と潜在的な問題点 | このルールには、 Java EE 7 ( OpenJPA ) への移行に関する一般的な情報と、 WebSphere Migration Toolkit for Application Binaries (バイナリスキャナ) が検出できない問題に関する情報が含まれています。 | java-ee-7.yml org.openrewrite.java.migrate.javax.openJPAToEclipseLink |
| openjpa.LockManager 構成プロパティーはマイグレーションしなければならない | OpenJPA LockManager プロパティーである openjpa.LockManager は、JPA 2.1 仕様が提供するロック API を使用してマイグレーションする必要があります。 | いいえ |
| openjpa.jdbc.Schema 構成プロパティーはマッピング・ファイルにマイグレーションしなければならない | OpenJPA スキーマ・プロパティーの openjpa.jdbc.Schema は、仕様で定義されているマッピング・ファイル構成にマイグレーションする必要があります。 | いいえ |
| org.apache.openjpa.enhance.PersistenceCapable インターフェースは使用できない | ビルド時に挿入される org.apache.openjpa.enhance.PersistenceCapable インタフェースは、 WebSphere 従来型またはLiberty Java EE 7 JPA 2.1 実装を使用するJPAアプリケーションでは使用できません |
いいえ |
| org.apache.openjpa パッケージが使用できない | org.apache.openjpa JPA API は、WebSphere Java EE 7 JPA 2.1 の実装では使用できません。 | いいえ |
| マッピング・ファイルは OpenJPA から EclipseLink へのマイグレーション時に処理されない | OpenJPA から EclipseLink へのマイグレーションの規則セットは、JPA アノテーションで検出された問題はマイグレーションしますが、エンティティー・マッピング・ファイルで検出された問題はマイグレーションしません。 | いいえ |
| OpenJPA および WebSphere JPA 構成プロパティーはマイグレーションする必要がある | OpenJPA および WebSphere のベンダー固有の JPA 2.0 構成プロパティーはマイグレーションする必要があります。 代わりに、標準化されたプロパティーおよび EclipseLink プロパティーを使用します。 | いいえ |