ykb
@ykb

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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に関する理解不足です。
知識がないので上記サイトの指示どおりやっていますが、こちらはなにか初歩的なミスな気がしてます。

何か少しでも手がかりいただけたら嬉しいです。

0

1Answer

私は日本語がわかりませんので、ChatGPTを使用して意味を翻訳してもらっています。

私も2014年からEclipseを使用してGoogle App Engineにデプロイしてきました。しかし、最新版のGoogle Cloud CodeはEclipseをサポートしていません。唯一の方法はIntelliJを使ってデプロイすることです。移行は苦痛ですが、やらなければなりません。IntelliJ Communityの無料版で正常にデプロイできます。幸運を祈ります。私も数週間前にEclipse Java8からIntelliJ Java21へのアップグレードを行いました。

0Like

Your answer might help someone💌