3 既知の問題と回避策

リリース時での既知の問題について学習します。

この章の内容は次のとおりです。

Jacksonでのmvn依存関係コンバージェンス・エラー

問題

Coherenceの管理、メトリック、RESTを使用する際にJacksonモジュールでの依存関係コンバージェンス警告を解決します。

dependencyConvergenceルールでmvn enforcerプラグインを使用する開発者は、coherence-management、coherence-metrics、coherence-restの依存関係を使用する際に、多数のJackson依存関係警告を目にします。Coherenceモジュール、jacksonおよびjerseyモジュール間で使用するjacksonモジュールのバージョンには、矛盾があります。

サンプル警告:

[Warning]
Dependency convergence error for
com.fasterxml.jackson.core:jackson-databind:2.9.9.2 paths to dependency are:
+-com.oracle.example-use:some-service:1.0-SNAPSHOT
+-com.oracle.coherence:coherence-rest:12.2.1-4-0-74841
+-com.fasterxml.jackson.core:jackson-databind:2.9.9.2
and
+-com.oracle.example-use:some-service:1.0-SNAPSHOT
+-com.fasterxml.jackson.core:jackson-databind:2.9.9
and
+-com.oracle.example-use:some-service:1.0-SNAPSHOT
+-com.fasterxml.jackson.module:jackson-module-jaxb-annotations:2.9.9
+-com.fasterxml.jackson.core:jackson-databind:2.9.9

回避策

これらのバージョンの矛盾を解決するには、mvn pom.xml <dependencies>要素に次を追加します。

    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.9.9.2</version>
      <exclusions>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
        </exclusion>
      </exclusions>
    </dependency>
	
    <dependency>
      <groupId>com.fasterxml.jackson.jaxrs</groupId>
      <artifactId>jackson-jaxrs-base</artifactId>
      <version>2.9.9</version>
      <exclusions>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
	    </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
	    </exclusion>
      </exclusions>
    </dependency>
	
    <dependency>
      <groupId>com.fasterxml.jackson.module</groupId>
      <artifactId>jackson-module-jaxb-annotations</artifactId>
      <version>2.9.9</version>
      <exclusions>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-databind</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.glassfish.jersey.media</groupId>
      <artifactId>jersey-media-json-jackson</artifactId>
      <version>2.22.4</version>
      <exclusions>
	    <exclusion>
          <groupId>com.fasterxml.jackson.jaxrs</groupId>
          <artifactId>jackson-jaxrs-json-provider</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.jaxrs</groupId>
          <artifactId>jackson-jaxrs-base</artifactId>
        </exclusion>
        <exclusion>
          <groupId>com.fasterxml.jackson.core</groupId>
          <artifactId>jackson-annotations</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

ノート:

この回避策は、Coherence 12.2.1.4.0.のみに使用する必要があります。この問題は次のパッチで修正されます。

アクティブ永続性を使用する場合のパーティション数の変更

問題

アクティブ永続性を使用している場合は、パーティション数を変更できません。サービスのパーティション数を変更すると、サービスの再起動時に、アクティブなすべてのデータが永続性のごみ箱に移動するため、元のパーティション数のリストア後にリカバリする必要があります。永続化されるデータは、同じパーティション数で実行されているサービスにのみリカバリできます。

アクティブ永続性が使用されている場合は、パーティション数が変更されていないことを確認します。パーティション数が変更されると、サービスの起動時に、次のようなメッセージが表示されます。

<Warning> (thread=DistributedCache:DistributedCachePersistence, member=1):
Failed to recover partition 0 from SafeBerkeleyDBStore(...); partition-count
mismatch 501(persisted) != 277(service); reinstate persistent store from
trash once validation errors have been resolved

このメッセージは、パーティション数の変更がサポートされておらず、現在アクティブなデータがごみ箱ディレクトリにコピーされたことを示しています。

回避策

データをリカバリするには:

  1. クラスタ全体を停止します。

  2. 各クラスタ・メンバーで影響を受けたクラスタとサービスで現在アクティブなディレクトリの内容を削除します。

  3. アクティブなディレクトリへのサービスごとに、ごみ箱ディレクトリの内容を(再帰的に)コピーします。

  4. パーティション数を元の値にリストアします。

  5. クラスタを再起動します。

ジェネリクスの影響

ジェネリクスをフェデレーテッド・キャッシングおよび永続性で使用する場合、次の点に注意してください。

  • ランタイム・タイプ・チェックはフェデレーション内のクラスタ間で実行されないため、フェデレーションをまたがるフェデレーテッド・キャッシュは必ず同じタイプを使用するように構成します。

  • ランタイム・タイプ・チェックは実行されないため、リカバリ可能キャッシュは再起動時に同じタイプを使用するように構成します。

JVisualVMプラグインのサポート

Coherence JvisualVMプラグインは、Coherence 3.7.1.X以上でサポートされます。プラグインを使用した古いクラスタへの接続はサポートされません。

8より後のJavaバージョンでのインライン化の無効化

Java 8より大きいJavaバージョン(たとえば、Java 11)を使用している場合、次のディレクティブのいずれかを(コマンド・ラインで) JVMオプションとして指定する必要があります。このステップでは、Javaチームにより作業中のコンパイラ・バグが原因の、検出されたセグメンテーション・フォルト(SIGSEGV)を回避します。

ノート:

リリース12.2.1.4は、Java 8より上位のバージョンに対して動作が保証されていません。
  • -XX:CompileCommand=exclude,com/tangosol/coherence/component/util/daemon/queueProcessor/service/Grid.onInterval
  • -XX:-Inline

最初のオプションでは、問題のあるメソッドをコンパイラによるインライン化の対象から除外しますが、後のオプションではインライン化全体が無効になります。