GlassFish 5.1.0のArchive Path is NULLに対する対策
この記事は、オープンソフトウェアとして広く利用されているアプリケーションサーバのGlassFish 5.1.0を構築する機会があったので、そこで遭遇した「Archive Path is NULL」に関するバグの修正方法について備忘録として紹介しています。
RHEL 8.5にGlassFish 5.1.0をインストールする手順については、以下の記事で紹介しています。
目次
GlassFish 5.1.0のArchive Path is NULLに対する対策
Eclipse FoundationからダウンロードしたGlassFish 5.1.0のドメイン管理サーバ(DAS)画面を利用して、Webアプリケーションを配備(デプロイ)しようとすると、以下のようなエラー表示が出現します。
この事象が発生している動作環境については、以下のとおりです。
$ cat /etc/redhat-release
Red Hat Enterprise Linux release 8.5 (Ootpa)
$ java -version
openjdk version "1.8.0_242"
OpenJDK Runtime Environment (build 1.8.0_242-b08)
OpenJDK 64-Bit Server VM (build 25.242-b08, mixed mode)
$ /opt/glassfish5/bin/asadmin version
Version = GlassFish Server Open Source Edition 5.1.0 (build default-private)
Command version executed successfully.
「Archive Path is NULL」エラーの原因と対策について紹介していきます。
Archive Path is NULLの原因
サーバログを確認してエラーの原因を確認します。
$ cd /opt/glassfish5/glassfish/domains/domain1/logs
$ cat server.log
[2023-06-18T03:34:45.548+0000] [glassfish 5.1] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=48 _ThreadName=admin-listener(3)] [timeMillis: 1687059285548] [levelValue: 800] [[
GUI deployment: uploadToTempfile]]
[2023-06-18T03:34:45.551+0000] [glassfish 5.1] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=48 _ThreadName=admin-listener(3)] [timeMillis: 1687059285551] [levelValue: 800] [[
deploy(): origPath is NULL]]
GUIからアプリケーションをデプロイしてエラーとなったタイミングで「deploy(): origPath is NULL」がサーバログに記録されていました。どうやら、デプロイするアプリケーションのファイルパスが正しく取得できていないようです。
この問題は、既知の問題として以下で取り上げられていました。
https://github.com/eclipse-ee4j/glassfish/issues/22739
この記事によると、2020年6月にバグ修正のプルリクエストが承認されているようですが、2023年6月時点でダウンロード可能なGlassFish 5.1.0には、バグ修正が反映されていません。
GlassFish 5.1.1もリリースされていないところをみると、この先も修正版がリリースされる可能性はかなり低そうです。
自力で修正するしかなさそう
GlassFish 5.1.0の既知のバグに対する修正リリースを待っていられないので、自力で修正していきます。
修正すべきソースコードは、/opt/glassfish5/glassfish/modules/console-common.jarの中に含まれています。console-common.jarを展開すると、applicationsフォルダの中にuploadFrame.jsfファイルがあるので、こちらを修正していきます。
uploadFrame.jsfファイルの45行目を次のように修正します。
uploadFrame.jsf 45行目
【修正前】
<sun:form id="form">
【修正後】
<sun:form id="form" enctype="multipart/form-data">
修正できたら、/opt/glassfish5/glassfish/modules/console-common.jarのapplicationsフォルダにuploadFrame.jsfファイルを戻します。
jarファイルの扱い方については割愛しますが、jarファイルは単なるzipファイルであるため、ファイルの拡張子をjarからzipに変更することでzipで解凍できるようになります。
Windowsであれば、7zipを使って開くのもありだと思います。7zipでjarの中を直接開いたり、ファイルを取り出したりすることができ、何よりも簡単なので是非試してみてください。
修正できたか確認してみる
では、修正したGlassFish 5.1.0を起動して、アプリケーションがデプロイできるか確認してみます。
エラー表示は出ていません。サーバログを確認してみます。
[2023-06-18T05:27:53.416+0000] [glassfish 5.1] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=170 _ThreadName=admin-listener(7)] [timeMillis: 1687066073416] [levelValue: 800] [[
GUI deployment: uploadToTempfile]]
[2023-06-18T05:27:53.435+0000] [glassfish 5.1] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=170 _ThreadName=admin-listener(7)] [timeMillis: 1687066073435] [levelValue: 800] [[
uploadFileName=sample_test.war]]
[2023-06-18T05:27:53.442+0000] [glassfish 5.1] [INFO] [] [] [tid: _ThreadID=170 _ThreadName=Thread-8] [timeMillis: 1687066073442] [levelValue: 800] [[
================== availabilityEnabled skipped ]]
[2023-06-18T05:27:53.561+0000] [glassfish 5.1] [INFO] [] [javax.enterprise.system.tools.deployment.common] [tid: _ThreadID=46 _ThreadName=admin-listener(1)] [timeMillis: 1687066073561] [levelValue: 800] [[
visiting unvisited references]]
[2023-06-18T05:27:53.745+0000] [glassfish 5.1] [INFO] [] [javax.enterprise.system.core] [tid: _ThreadID=46 _ThreadName=admin-listener(1)] [timeMillis: 1687066073745] [levelValue: 800] [[
sample_test was successfully deployed in 265 milliseconds.]]
[2023-06-18T05:27:53.767+0000] [glassfish 5.1] [INFO] [] [org.glassfish.admingui] [tid: _ThreadID=170 _ThreadName=admin-listener(7)] [timeMillis: 1687066073767] [levelValue: 800] [[
Deleting the file uploaded to Temp Directory]]
アプリケーションのデプロイが正常に処理されたことが確認できました。
まとめ
GlassFish 5.1.0は、2018年にEclipse Foundationからリリースされました。2023年時点でもJava EE 8と互換性のあるJakarta EE 8のリファレンス実装として広く利用され続けています。
GlassFish 5.1.0以降のバージョンのリリースについては確認されていないため、新規開発の場合は、Jakarta EE 9以上の利用を検討した方がよさそうです。
レガシーシステムなどの開発でJakarta EE 8をどうしても利用する必要がある場合は、GlassFish 5.1.0が正しく動作可能なOSとOpenJDKの組み合わせなどを考慮しなければなりません。
Payara Server Community EditionもJakarta EE 8互換のアプリケーションサーバであるため、選択肢に含めて検討されるとよいかもしれません。こちらは、機会があれば検証してみたいとおもいます。
参考になれば幸いです。
システムのお悩みについてご相談ください
SOHOのシステム運用管理に関するお悩みごとについて、なんでもお気兼ねなくご相談ください。
現役システムエンジニアのスタッフが、ボランティアでご相談にご対応させていただきます。