複数バージョンのJavaの管理

costlow、
2014年2月27日

Javaプラットフォームには、システム管理者がクライアント・システム上で更新を管理する、または特定のアプリケーションとの互換性を維持する際に使用する各種のオプションが用意されています。

本ブログ記事は、リッチ・インターネット・アプリケーション(RIA)(アプレットおよびWeb Start)を使用するクライアントを抱えるシステム管理者のためのガイドです。サーバー・サイド・アプリケーションや、ローカルにインストールしてJREを使用するアプリケーションのシステム管理者に該当する内容はほとんどありません。

RIAの互換性を管理する際のおもな戦略は、以下のとおりです。

  • 既知のRIAを特定する。
  • patch-in-placeモードまたは静的インストール・モードで、Javaの各バージョンをインストールする。
  • 最新バージョンのJavaをデプロイする。
  • 特定バージョンのJavaを使用するように特定のRIAを委譲する。

簡単な例:ある企業では、請負業者のタイムシートを管理するバックオフィス・アプリケーションが運用されています。このアプリケーションにはJava 6が必要であることがわかっています。システム管理者は、最新のJava 7をインストールする必要があります。インストール後に、システム管理者は必要なバージョンであるJava 6を静的にインストールします。次にシステム管理者は、特定のRIAでJava 6が必要であることを示すデプロイメント・ルール・セットを作成します。

既知のRIAの特定

RIAをホワイトリスト化して特定のRIAを特定バージョンのJavaに委譲する際の最初の手順は、アプリケーションがある場所を指定することです。これには、おもに2つの方法があります。

  • https://、http://、またはその他のプロトコルのURLで示される場所。ここにRIAがホストされ、ユーザーがアクセスします。後でワイルド・カード指定できます。社内などで対象を管理する、またはホストするには、これがもっとも簡単な方法です。
  • コード署名ハッシュ、すなわち公開署名された証明書に基づいてベンダーを特定する識別子。特定ベンダーによる多数のRIAを使用する場合には、この方が簡単です。

RIAを特定する方法は、組織によって異なります。重要なのは、想定していなかったRIAをレポートするなど、ユーザーが調整のために連絡する方法を確保しておくことです。

patch-in-placeモードまたは静的インストール・モードで該当するバージョンのJavaのインストール

JREのインストール・メカニズムには、patch-in-placeインストールと静的インストールの2種類があります。patch-in-placeはフットプリントが小さいため、メカニズムのデフォルトになっています。また、意図的に古いバージョンを残さないという理由もあります。静的インストールは意図的に古いバージョンを残すため、特定のRIAを実行する場合に使用できます。

patch-in-place 静的インストール
デフォルト: はい いいえ
インストール先: C:\Program Files\Java\jre7

バージョンを新しくすると、このディレクトリが更新される。

C:\Program Files\Java\jre1.7.0_##

バージョンを新しくするたびに、独自のディレクトリが作成される。

古いバージョンを残す: いいえ はい
RIAデプロイメント・フローのデフォルト: インストールされたバージョンのみ。 インストールされているもっとも新しいバージョン。
用途: ほとんどの場合 既知のアプリケーションで特定の古いバージョンのJavaが必要とされる大規模な環境

システム管理者は、JREのインストールを自動化するときにこの設定を指定できます。

一般的にはデフォルトのpatch-in-placeが最適です。静的インストールは、特定のバージョンが必要だとわかっているシステムでのみ使用してください。

最新バージョンのJavaのデプロイ

常に、セキュアで最新のベースラインを実行する必要があります。Javaのバージョンが新しいほど、セキュリティ対策もエンタープライズ管理機能も万全であるためです。たとえばRIAをJava 6(パブリック・アップデート終了は2013年2月)で実行しなければならない場合は、最新バージョンのJava 7を使用し、特定のRIAについてのみJava 6に委譲すべきです。

Javaのインストールには、最新状態を保つために、セキュリティ・ベースラインと失効日の2つの機能があります。セキュリティ・ベースラインは最新のCritical Patch Updateであり、アップデートのスケジュールは1年ごとに事前に発表されます。一方の"失効日"は、このセキュリティ・ベースラインを動的にチェックできないクライアントのために組み込まれた機能です。"失効日"は、スケジュールされたCritical Patchの1か月後に設定されます。最新バージョンに関する情報はJava.comに掲載されており、特定のバージョンに関するリリース・ノートはOracle Technology Networkに掲載されています。JREは、セキュリティ・ベースラインより低いことを検出すると、RIAデプロイメント・フローのガイドで説明されているとおりの動作に変わります。

特定バージョンのJavaを使用するように特定のRIAを委譲すると、デプロイメント・フロー・プロセス(失効日も含む)を制御できます。

特定バージョンのJavaを使用するための特定のRIAの委譲

大部分のRIAは、メジャー・バージョンの最新リリースのJavaと互換性があります。たとえば、JDK 1.7.0_01で動作するRIAは、それより新しいJDK 1.7.0_51などのアップデートともバイナリ互換性があると想定されます。

特定のアプリケーションで互換性の問題が確認されている場合は、システム管理者はデプロイメント・ルール・セット(DRS)を使用して、静的にインストールされたJavaバージョンと特定のRIAとを関連付けることができます。使用するDRSのバージョンを指定するには、SECURE(バージョンなし)、SECURE-1.X(メジャー・バージョンのみ)という順序で進み、互換性の問題が確認されている特定のバージョン、たとえば1.7.0_51のみを使用するのがもっとも簡単です。ルールはシステム管理者によって明示的に指定されるため、その結果は、プログラムの実行に影響する他のチェックより前に適用されます。

RIAの実行をDENYするルールを作成する場合は、ユーザーに連絡方法を提供すると良いでしょう。

デプロイメント・ルール・セットは、暗号化して署名する必要があります。商用のコード署名証明書をお勧めしますが、作成したデプロイメント・ルール・セットに自己署名したい場合には、クライアントが署名を認識できるように公開鍵をクライアントに配布する必要があります。

デプロイメント・ルール・セットは、Javaのインストール・ディレクトリとは異なる場所にインストールされ、クライアントがJavaインストールを更新するまでアクティブになります。

追加情報については、詳細なデプロイメント・ルール・セットのドキュメントを参照してください。

デプロイメント・ルール・セットでのバージョンのリクエスト

デプロイメント・ルール・セットでバージョンを指定するときは、起動中のJNLPファイルでリクエストされる以上のバージョンを選択することをお勧めします。アプリケーションで必要とされるより低いバージョンのJavaを指定すると、正常に動作しません。JNLPファイルには、<j2se version="1.X+" />のようなセクションがあります。

JNLPでバージョンがリクエストされ、それより低いバージョンを指定した場合、アプリケーションはブロックされます。

JNLPでバージョンがリクエストされ、それ以上のバージョンを指定した場合、指定したとおりに実行されます。

デプロイメント・ルール・セットで、SECUREまたはSECURE-1.Xのようにバージョンを指定するのが、通常はもっとも単純な方法です。

カテゴリ:オラクル

タグ:デスクトップ

このエントリへのリンク

Java技術関連記事

Java Magazine 日本版

Java Magazine日本版は、米国OTNで発行されているJava Magazineの抜粋翻訳版です。

Javaプログラミング言語、JavaベースのアプリケーションをはじめとするJava技術全般の最新トピックスを お届けします。

第46号[2019年12月発行]

javamagazine-thumb

特集「 テスト 」

~アプリケーションの開発においてその品質に大きく関与する作業がテストです。意図された通りに動いているのか、バグはないか、十分に網羅されているかなど、テストを通じて確認が行われます。本号では、プロパティベース・テスト(PBT)、Arquillianフレームワークを使ったJakarta EEアプリケーションのテスト、ArchUnitによるアーキテクチャの単体テストの3つのテスト手法を取り上げます。この他、Java に関するクイズもあります。ぜひ挑戦してみてください。~

詳細はこちら

第45号[2019年10月発行]

KUBERNETESを使ってみる

~コンテナ化されたアプリケーションおよびサービスのデプロイ、スケーリング、管理を自動化~

eBook

PDF

第43-44号[2019年5月発行]

Javalin:シンプルでモダンなWebサーバー・フレームワーク~高速かつ軽量で自由度が高く、作成される実行可能ファイルが小さい フレームワークを使ってWebアプリを構築する ~

eBook

PDF

第42号[2019年2月発行]

史上最大のJAVA調査

~10,500人のJava開発者が、プロジェクト、ツール、そして自身について明かす~

eBook

PDF

第41号[2018年12月発行]

GraalVM:多言語対応のVMとJVM

~1つのプロジェクトで複数の言語を容易に組み合わせ、事前コンパイルのメリットを活用する~

eBook

PDF

第40号[2018年10月発行]

複雑なPDFを簡単に作成

~人気のJavaライブラリiTextで、PDFファイルを作成して操作する方法~

eBook

PDF

第39号[2018年8月発行]

コマンド・パターン徹底解説

~コマンドをパッケージ化し、オブジェクトとしてレシーバに送ることにより、クリーンで疎結合な、保守性の高い設計を実現する~

eBook

PDF

第38号[2018年7月発行]

Payara Microでマイクロサービスを作成する

~Java EEを使った小型軽量サービスの構築方法~

eBook

PDF

第37号[2018年4月発行]

JAX-RSによるリアクティブ・プログラミング

~非同期アプローチとステージを使用してレスポンシブでリアクティブなアプリを開発する~

eBook

PDF

第36号[2018年2月発行]

Servlet 4.0:高速化

~HTTP/2プロトコルを含むServlet APIの新しいメジャー・リリースでは、リソース要件への先回り対応が実現~

eBook

PDF

第35号[2017年12月発行]

Java 9モジュールを理解する

~モジュールとは何か、モジュールをどう使うのか~

eBook

PDF

第34号[2017年10月発行]

開発者が喜ぶJDK 9の9つの新機能

~モジュール以外にも搭載されている多くの新機能~

eBook

PDF

第33号[2017年8月発行]

Project Lombok:美しく簡潔なコードを実現

~プロジェクトにLombokを追加し、定型コードを大幅に削減する~

eBook

PDF

第32号[2017年6月発行]

FXMLLoaderによるFXMLの拡張

~FXMLLoaderメカニズムを活用し、JavaFX UIの宣言的定義でより高い柔軟性を実現する~

eBook

PDF

第31号[2017年4月発行]

Polyglot for Maven:Mavenの多言語化とスクリプトの導入 ~Ruby、YAML、Groovyなどの言語でPOMファイルを記述できる新しいツールをMavenの開発者が作成~

eBook

PDF

第30号[2017年2月発行]

初めてのJUnit 5

~完全に再設計され、多くの便利な追加機能が搭載されたJUnit 5がついに登場~

eBook

PDF

第29号[2016年12月発行]

Intel x86 Galileoボードのセンサーを操作する ~IoTの神髄であるデータの取得と応答の両方を実例で学ぶ~

eBook

PDF

第28号[2016年10月発行]

JavaServer Faces 2.3:次期バージョンの構想~長年の制限を解消する新機能~

eBook

PDF

第27号[2016年8月発行]

Apache Spark入門

~人気のビッグ・データ・エンジンに親しむ~

eBook

PDF

第26号[2016年6月発行]

JITコンパイラの実際の動作

~JITによるコードの変換方法~

eBook

PDF

第25号[2016年4月発行]

Spring Boot

~早く簡単なWebアプリケーション開発~

eBook

PDF

第24号[2016年1月発行]

ライブラリ: 新たな秘宝を発掘する

eBook

PDF

第23号[2015年11月発行]

TestFXによるJavaFXアプリケーションのテスト

~JavaFXのUIをJUnit形式でテストする~

eBook

PDF

第22号[2015年9月発行]

DevOps

~開発(DEV)と運用(OPS)の対立から「DEVOPS」へ~

eBook

PDF

第21号[2015年7月発行]

JAVAの達人に聞く

~Javaの達人たちが語る、過去もっとも驚いたことと今後のイノベーションについて~

eBook

PDF

第20号[2015年5月発行]

ACTION!

~パフォーマンス特集~

eBook

PDF

第19号[2015年3月発行]

イノベーションのためのプラットフォーム

~Javaベースのクラウドサービス~

eBook

PDF

第18号[2014年9月発行]

JAVA仮想マシンの代替言語

~8つのJVM言語の8つの機能に注目する~

eBook

PDF

第17号[2014年7月発行]

JAVAデプロイに役立つオープンソース・ツール7選

~プロジェクトの規模を問わないプロセスの向上~

eBook

PDF

第16号[2014年5月発行]

Java 8 特集

~組み込みからクラウドまでJava 8で実現~

eBook

PDF

第15号[2014年3月発行]

JAVA開発者のためのビッグ・データ

~ビッグ・データとJavaの相性が最高である理由~

eBook

PDF

第14号[2014年1月発行]

SMARTEST HOUSE ON THE STREET ~街で一番スマートな家~ ~JavaベースのopenHABによるInternet of Things~

eBook

PDF

第13号[2013年11月発行]

クラウド:課題とチャンス

~クラウドを利用したアプリケーションの開発、導入、管理~

eBook

PDF

第12号[2013年9月発行]

#パフォーマンス

~Twitter、Java 仮想マシン(JVM)ランタイム環境への移行~

eBook

PDF

第11号[2013年7月発行]

Java EE 7の到来 ~オラクルのAnil GaurがJava EEの進化を語る~

eBook

PDF

第10号[2013年5月発行]

Java is Community ~Javaコミュニティ・メンバーになるための実践ガイド~

PDF

第9号[2013年3月発行]

組込みコンピューティングの時代 ~Terrence Barrが語るJavaとInternet of Things(モノのインターネット)~

PDF

第8号[2013年1月発行]

未来のJavaを創る/JCP Executiveシリーズ Mike Milinkovichに聞く/対話型テストとリグレッション・テストを統合した BlueJで、初心者でもテストを実現可能に/クライアントでSpringフレームワークを使用する理由/Java SE Embedded の Raspberry Piへのセットアップ/Akkaフレームワークを使用したアクターベースのシステムの構築 ほか

PDF

第7号[2012年11月発行]

海に浮かぶJAVA/DUKE'S CHOICE AWARDS/BRIAN GOETZ,PROJECT LAMBDAを語る ほか

PDF

第6号[2012年9月発行]

ディベロッパー・パワー!/より確かなスプレッドシートの構築/Java EE 6ストレス・テスト監視ツール/クライアントJavaアプリケーションにおけるFork/Joinフレームワーク ほか

PDF

第5号[2012年6月発行]

デバイス・コンバージェンス/飛躍するゲーム業界/ゲームの終わり/NetBeansを使用したWicket 1.4でのWebアプリケーション構築/OPENJDK:インタビュー/Java SE 7: 非矩形ウィンドウと半透明ウィンドウを掘り下げる ほか

PDF

第4号 [2012年5月発行]

JavaMailが届けるメッセージ/アプリにWEBを取り込もう/JavaFXとSWINGの統合/アスペクト指向プログラミングは必要か?/ GLASSFISHで実現するシンプルなクラスタリングと高可用性 ほか

PDF

第3号 [2012年3月発行]

クラウド・コンピューティング・プラットフォームの標準技術となるJava EEの進化/リッチ・クライアント:JavaFXとSwingの統合/エンタープライズJava/軽量パブリッシュ/サブスクライブ通信/GlassFishで実現するシンプルなクラスタリングと高可用性 ほか

PDF

第2号 [2012年1月発行]

「進化しつづけるJava」(JavaOne 2011レポート)/JavaFX 2.0特集 ほか

PDF

第1号 [2011年11月発行]

【創刊記念号】Java利用の成功例/Java入門(最初の一歩・RESTful Webサービスの概要)/お待たせしました!Java 7の登場/

JDK 7コーディング方法の変革 ほか 

PDF