アプリケーションによっては凝った画面操作を実現するためにHTMLベースではなくJavaベースで作成されたものがあります。
JNLPとかJava Web Start等と呼ばれているものです(以下、JNLPで統一)。このJNLPですがJavaの古いバージョンでは搭載されていたのですが最新バージョンでは廃止、Javaのライセンス変更やライフサイクル等で古い技術扱いとなっている状況の様ですが、既に稼働しているアプライアンス機器やWebサーバ等のインタフェースとして使わざるを得ない現状があります。
しかし、上記のようにJavaのライセンス変更やライフサイクル等の理由でJNLPが使えるOracle Javaバージョンが使えない状況にあります。
そのため代替として別の方法が必要になります。調べてみるとJNLPのフリー実装としてIcedTeaというものがあります。
このIcedTeaをベースに作ったOpenWebStartというものを今回使ってみたのでTips含めてWindows版をベースに紹介してみたいと思います。
GitHub – AdoptOpenJDK/IcedTea-Web: The new home for IcedTea-Web
The new home for IcedTea-Web. Contribute to AdoptOpenJDK/IcedTea-Web development by creating an account on GitHub.
GitHub – karakun/OpenWebStart: Run Web Start based applications after the release of Java 11
Run Web Start based applications after the release of Java 11 – karakun/OpenWebStart
インストール
バイナリがGithubにありますのでそちらをダウンロードしてインストールします。
拡張子との関連付けも行えます。
ファイルをダブルクリックするだけで実行できるようになるので関連付けしておくと便利です。
古いアプリケーションによってはjspとなっているケースもあります。その場合は、右クリックでメニューを開いてOpenWebStartから開けばjspも動作します。
Javaランタイム(JVM)のダウンロードもインストール時に行われます。
JVMがダウンロードされない場合は手動で導入が必要です。OpenWebStartがアップデートチェックしているJVMは下記になります。
その他OpenJDKなど多数ビルドがありますので必要に合わせて導入しましょう。
OpenJDKと各種JDKディストリビューションの情報源まとめ #minjava – Qiita
はじめにこの記事は、2020年3月13日に正式出版された共著『みんなのJava』タイアップ企画としてお送りします。英語版の記事は「Summary of information about Ope…
既に他のランタイムがある場合、OpenWebStartの設定の中でどのランタイムを使用するか管理することができます。
無事インストールが終わるとWindowsの場合、下記のようにメニューに新規追加されていると思います。
設定画面を立ち上げてみました。
使っていくとわかるのですがGUIで設定できる項目とできない項目があります(2022/04現在)。
GUIから設定できない場合は、テキストエディタ等で設定ファイルの編集が必要になります。
設定
通常だと設定変更しないと使えないケースが多いと思いますので、ポイントとなりそうな部分を書いておきます。(以下Adoptiumを使用したケースの設定になりますが、他JDKでも、ほぼ同じようなpathやファイル名を使えると思います)
OpenWebStartの設定全般についてはこちらのドキュメントが参考になります。
Server Whitelist
セキュリティ項目として信頼のおけるサーバを指定しないと実行時にエラーが出て使えないケースがあると思います。Server Whitelistにアクセス先を登録しておくとこの問題を解決できます。
こちらはGUIから設定できないので設定ファイルの編集を行います。
Pathは${USER_HOME}.config\icedtea-web\deployment.propertiesになります。設定ファイルのPathのヒントはGUIのCertificatesの画面で確認できます。
設定ファイルを開いてアクセス先を追加します。下記のようにワイルドカードも使用できます。詳細はこちらを参照ください。
deployment.security.whitelist=https://*:8443, https://*:8080
追加後、GUIでServer Whitelistを開いて設定が反映されているか確認しておくと良いでしょう。
署名アルゴリズム
古いアプリの場合、署名アルゴリズムを変更しないと下記のようにエラーが出て実行できない場合があります。こちらはJVMの設定ファイルの編集が必要です。
Application Error: Cannot grant permissions to unsigned jars. Application requested security permissions, but jars are not signed.
筆者の環境ではPathは${USER_HOME}.cache\icedtea-web\jvm-cache\adoptium_1.8.0.xxx_x64\jre\lib\security\java.securityになります。
各自のJVMにあるjava.securityファイルを検索して見つけてください。
例えば、下記のように変更します。
#jdk.jar.disabledAlgorithms=MD2, MD5, RSA keySize < 1024, \ # DSA keySize < 1024, include jdk.disabled.namedCurves jdk.jar.disabledAlgorithms=MD2, RSA keySize < 1024, DSA keySize < 1024
Javaバージョンによって設定内容は変わる場合があります。また、セキュリティレベルを下げることになりますので自己責任で変更してください。詳細はこちらを参照ください。
Proxy
リモートワーク時代だとトンネリングやProxy経由でのアクセスが必要になるかもしれません。
こちらはGUIで設定変更することが可能です。実情に合わせて変更してください。
キャッシュ
動作と言うかBugに近い話かもしれませんが、JNLP実行時に複数のjarファイルをダウンロードする場合、並列で実施されます。
サイズが大きいあるいは回線が細いとダウンロードが失敗して起動できない場合があります。
一つ一つダウンロードするようにするか、何度かリトライしてすべてキャッシュできた段階であれば起動できるようになります。
また下記のようなエラーが出る場合は、ファイルが壊れているかキャッシュされたファイルが中途半端にダウンロードされた状態になっている可能性があります。
Launch exception netx: Initialization Error: Could not initialize application. (Fatal: Initialization Error: A fatal error occurred while trying to verify jars. An exception has been thrown in class JarCertVerifier. Being unable to read the cacerts or trusted.certs files could be a possible cause for this exception.: Error in verify jar xxxxx) Exception while verifying jars Error in verify jar xxxxx
どうしてもおかしな動作の場合は、キャッシュをクリアしてから再度実行してみましょう。