GroupSession
CentOS 7 にGroupsessionをインストールしようとしております。TomcatはGroupsessionのインストールガイド通りに、tar.gzファイルを展開し、サービスとして起動するようにtomcatユーザーを作り、ホームに.bash_profileを作成、JAVA_HOME、PATH、CATALINA_HOMEを記述。以下2ファイルも作成、配置。/etc/systemd/system/tomcat.service/etc/firewalld/services/tomcat.xmlJAVAはAdoptOpenJDKをyumインストールし、# java -versionで該当のバージョン名が表示される状態になっています。上記、JAVA_HOMEもAdoptOpenJDKインストールディレクトリを指しています。ところが、サービスを起動して、クライアントのブラウザから見ると、"HTTPステータス 500 Internal Server Error"となり、"java.lang.ClassCastException: class java.util.Vector cannot be cast to class java.lang.String (java.util.Vector and java.lang.String are in module java.base of loader 'bootstrap')"と表示されています。こちらのフォーラムにて、似たメッセージが、macOSの環境下で表示されているというスレッドを見つけましたが、その方はmacOSをダウングレードして(以前動いていた環境に戻して)解決したとのことでした。どなたかこのメッセージの原因がわかる方はいらっしゃらないでしょうか。ちなみに、"サーバーIP:ポート"で、tomcatのサンプルページは見えています。OS:CentOS7.8Apache Tomcat 9.0.39AdoptOpenJDK11.0.9.1+1
おそらくLinux環境の場合、Tomcatはroot権限でないと動かないような気がします。
> おそらくLinux環境の場合、Tomcatはroot権限でないと動かないような気がします。返信ありがとうございます。実は、今回はCentOS7なのですが、以前、GroupSessionをCentOS6にインストールして稼働させたことがあり、その際は、tomcatユーザーで稼働できたのです。また、現在のCentOS7環境でも、"Apache Tomcat/9.0.39If you're seeing this, you've successfully installed Tomcat. Congratulations!"というページは見えており、tomcatは動いているものと見えるのですが・・・
CentOS6では、tomcatユーザーで動いていたのですね。> また、現在のCentOS7環境でも、"Apache Tomcat/9.0.39> If you're seeing this, you've successfully installed Tomcat. Congratulations!"> というページは見えており、tomcatは動いているものと見えるのですが・・・tomcat自体は、rootユーザで動かすよりも、tomcatユーザなど任意のユーザで動かすことを推奨されていますが、自分の環境では、CentOS7でもCentOS8でもtomcatのバージョンを変えても、groupsessionの配置箇所のパーミッションを変更しても、任意のでユーザではtomcatは動くけど、groupsessionは動かないため、残念ながら自分の環境では、groupsessionをrootユーザで実行しています。war の展開か、スクリプトがrootユーザでなければ動かないものがあるのかなあと思っています。
> tomcat自体は、rootユーザで動かすよりも、tomcatユーザなど任意のユーザで動かすことを>推奨されていますが、自分の環境では、CentOS7でもCentOS8でもtomcatのバージョンを変え>ても、groupsessionの配置箇所のパーミッションを変更しても、任意のでユーザではtomcat>は動くけど、groupsessionは動かないため、残念ながら自分の環境では、groupsessionを>rootユーザで実行しています。ためしに、サービスをrootで動くように変更してみました。・・・動きました。見えました。以前動いたサーバーを、確認することができたので、調べたところ、確かに、tomcatユーザーで動くよう、tomcatおよびgsession.warのディレクトリはすべてtomcatにchownしており、tomcatのhomeに.bash_profileを配置するなど、しているのですが、よく見ると、サービスを起動するスクリプトはrootの持ち物で、中身はsuでtomcatユーザーとして実行する、という内容になっていました。結局root権限を持ったtomcatという名前のユーザーがtomcatを実行していたということになるようです。前回は、インストールガイドに沿って設定すると、どうしても"404"になるという別の問題が起きていまして、これを解消するために、httpdより先にtomcatを起動する都合で、サービス化の設定をしていったのですが、結果、「root権限を持ったtomcatユーザー」で実行しているために、今回の「java.lang.ClassCastException」に遭遇しなかった、ということのようです。どの部分にroot権限が必要か、迄は追及する時間も知識もないのでここで折り合いをつけることにします。一応、このサーバーは外向きに公開するものではないので、問題ないと思われます。「rootでなら動く」という情報をいただいて、助かりました。ありがとうございました。
私の環境でも同じエラーが起こっていて、rootでも解消しません。環境はDebian10.7で、パッケージ類はaptでいれています。(tomcat9.0 OpenJDK11.0.9)エラーの詳細が以下のようになっていますが、Velocityの初期化設定が読めていないのでしょうか?12-Dec-2020 11:20:51.564 重大 [ajp-nio-127.0.0.1-8009-exec-2] org.apache.catalina.core.StandardWrapperValve.invoke サーブレット [action] に例外を割り当てます java.lang.ClassCastException: class java.util.Vector cannot be cast to class java.lang.String (java.util.Vector and java.lang.String are in module java.base of loader 'bootstrap') at org.apache.velocity.runtime.log.AvalonLogSystem.init(AvalonLogSystem.java:73) at org.apache.velocity.runtime.log.LogManager.createLogSystem(LogManager.java:127) at org.apache.velocity.runtime.RuntimeInstance.initializeLogger(RuntimeInstance.java:553) at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:226) at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:114) at org.apache.velocity.app.Velocity.init(Velocity.java:80) at jp.co.sjts.util.StringUtil.merge(StringUtil.java:1010) at jp.co.sjts.util.log.log4j.Log4jConfig.setLogDir(Log4jConfig.java:83) at jp.co.sjts.util.struts.BaseServlet.initLogConfiguration(BaseServlet.java:72) at jp.co.sjts.util.struts.BaseServlet.init(BaseServlet.java:42)(以下略)
先日、rootで起動したらうまくいった、と言いましたが、> ためしに、サービスをrootで動くように変更してみました。> ・・・動きました。見えました。一転して、tomcatで動かすことに成功しました。catalina.outのなかに>PANIC : Error configuring AvalonLogSystem : java.io.FileNotFoundException: /velocity.log (許可がありません)という行があったので、rootで動かしているときに確認すると、今までなかった、/velocity.logができていました。当然オーナーはrootで、"-rw-r-----"になっていました。これを、# chown tomcat. /velocity.log# chown -R tomcat. (tomcatをインストールしたディレクトリ)(2行目は、rootで動かしていた間にできたものをtomcatもどしています。)と実行して、tomcatユーザーでサービスを起動したところ、クライアントからGroupsessionにログインすることができるようになりました。果たしてこれで正しいのか?というところなのですが、その点は別に質問を立てたいと思います。ありがとうございました。
このページを参考に、StringUtil.javaのVelocity.init()の前に Velocity.setProperty(VelocityEngine.RUNTIME_LOG_LOGSYSTEM_CLASS, "org.apache.velocity.runtime.log.NullLogSystem"); を入れることで実行できました。https://lets-try-simo2.net/velocity-linux/Struts1もそうですが、エラーになっていた原因として表示されていたLogManagerまわりもDeprecatedが散見されます。
TOP