AppEngine java8 から java11への移行について
解決したいこと
Google AppEngine java8 +gwt+smartgwt のアプリを
eclipse2021 + google cloud tools + gwt pluginで開発し運用しています。
AppEngine java11への移行で行き詰まりました。
問題 ① ユーザー認証エラー
全面的な書き換えをする知識と時間がないので、WARファイルをJAR ファイルに再パッケージ化して稼働はできました。がしかし、ユーザー認証時にエラーを吐きます。
問題② プロジェクトのデプロイができない
本番環境なら動くのかな?と思いデプロイしようとしたが、
Uploading 0 file to Google Cloud Storage
になり、当然(https://xxxtest.de.r.appspot.com/) を開いても以下がでる
xxxtestは架空です。
Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.
上記2点何か少しでもアドバイスをいただけないでしょうか?
自分で試したこと
・cloud shellにログインして次のディレクトリに移動
~/java-docs-samples/appengine-java11/appengine-simple-jetty-main
・eclipseで自分のプロジェクトをwarでエクスポート> xxx.war
・cloud shellにアップロード
以下の指示どおり実行
https://cloud.google.com/appengine/docs/standard/java-gen2/war-packaging?hl=ja
$ mvn clean package
$ mvn exec:java -Dexec.args="./xxx.war"
・ウェブでプレビューを実行
これで自分のアプリxxx.warが起動しました!!
が、ユーザー認証でエラーを吐きます。
java.lang.IllegalStateException: Operation not allowed in a thread that is neither the original request thread nor a thread created by ThreadManager
at com.google.appengine.api.users.UserServiceImpl.getCurrentEnvironmentOrThrow(UserServiceImpl.java:184)
at com.google.appengine.api.users.UserServiceImpl.getCurrentUser(UserServiceImpl.java:137)
以下エラー元のメソッド
UserService userService = UserServiceFactory.getUserService();
User user = userService.getCurrentUser();
getCurrentUser() が失敗しています。
もしかして以下記載の
https://cloud.google.com/appengine/migration-center/standard/services/migrating-services?hl=ja&tab=java
ユーザー認証
Users API の代わりに、次の HTTP ベースの認証メカニズムを使用します。
に該当するのでしょうか?ですと、そもそもWARファイルをJAR ファイルに再パッケージ化では解決できない?
問題②デプロできない
本番環境なら違うのか?と思いデプロを試みるも失敗
https://cloud.google.com/appengine/docs/standard/java-gen2/war-packaging?hl=ja
の指示どおり以下を実行。(xxxtestは架空です)
runtime: java11
entrypoint: 'java -cp "*" com.example.appengine.jetty.Main xxx.war'
上記app.yamlを作成し、以下を実行
$ gcloud app deploy
descriptor: [/home/xxx/java-docs-samples/appengine-java11/appengine-simple-jetty-main/app.yaml]
source: [/home/xxx/java-docs-samples/appengine-java11/appengine-simple-jetty-main]
target project: [xxxtest]
target service: [default]
target version: [20230827t174142]
target url: [https://xxxtest.de.r.appspot.com]
target service account: [xxxtest@appspot.gserviceaccount.com]
Do you want to continue (Y/n)? y
Beginning deployment of service [default]...
Uploading 0 file to Google Cloud Storage
100%
100%
File upload done.
エラーはでないがそもそもUploading 0 file??
当然(https://xxxtest.de.r.appspot.com/) を開いても以下がでる
xxxtestは架空です。
Error: Server Error
The server encountered an error and could not complete your request.
Please try again in 30 seconds.
app.yamlをsrc/main/appengine に移動しても同じでした。
通常eclipseでコンパイルしてデプロイしています。
デプロイに関してはmavenとapp.yamlとPOM.xmlに関する理解不足です。
知識がないので上記サイトの指示どおりやっていますが、こちらはなにか初歩的なミスな気がしてます。
何か少しでも手がかりいただけたら嬉しいです。