TomEE 使ってみての雑感

いくつかのサンプル作成してみての雑感などをあれこれ。

Tomcat に JavaEE(JakartaEE) の機能が追加された、というのを額面通りに受け取ると、あたかも TomEE は Tomcat の上位互換のような印象を受けるが、ちょっと違うかな?と思わないでもない。

埋め込みで使うのが苦手かもしれない(裏技的解決法あり)

今、ちょっと取り組んでいるのが embedded (埋め込み)で使う場合。
tomcat では方法論が確立されているが、tomee ではサンプルすら見つけられない。

それっぽいライブラリはあるのでできなくはないと思うんだが?

ただ、以下のような点は気になる。

少々古い記事になるが、RedHat の中の人が、こんな記事を書いていた。

In summary, of course Spring Boot is cool, but with really simple steps you can start having the same in JavaEE world. We (Apache TomEE contributors) are going to start to work on this and expand this idea.

So don’t underestimate Java EE because of Spring Boot.

 

underestimate (過小評価)しないでくれ、とは言っているが、そこで挙げられたソースコードはあまり実用的とはいえないシロモノで、それで信用しろと言われてもねえ。。。

Spring Boot との比較をしているが、tomcat でできることができないとなると、もはや戦っている土俵が違うという感じだ。

なお、tomcat を埋め込みで使い、さらに heroku にデプロイした例が heroku のサンプルにある。

実は、これを参考にして試行錯誤(まあ、今回も周囲の方々に訊きまくりましたが…orz)していたら、できてしまった。

Tomee を埋め込みで使う場合の裏技?

tomee 本家提供の maven plugin を使うのではなく、通常の maven plugin を使えばよかったのですね。

後で問題は出てくるのかもしれないが、とりあえずは動いた。

なお、railway でも同様のやり方でデプロイ可能。

煮詰まった時の打開策は、経験ある人とちょっとまだ差があるなあ(嘆息)。

同じ Java でしょ?

しかし、コミュニティの運営方針に若干違和感を感じた。

今回の件もそうだが、tomee 純正というか独自仕様に拘り過ぎという気がしないでもない。

通常 maven plugin が EE の仕様に従っていれば、そりゃ tomee でも動く(はず)。

なぜ、それを先に言わない???

そりゃ tomee 用の Application Runner があればそれに越したことはないが、現状だと all features are not yet supported だそうなので、本格的に採用するわけにいかない。

だから、「それが完成するまでは、伝統的な maven plugin を使っていてね」でいいんじゃない?

それを明言しないものだから、取っ付き辛さ→使用者がそれほどいない、という事態の一因になっている気がする。

 

 

tomcat/tomee のポートを 8080 から 80 に変える

tomcat/tomee の http のポートはデフォルトでは 8080 だが、同一マシンに WildFly などが同居していると 8080 は既に使われている場合がある。

tomcat/tomee は、どちらかといえばウェブサーバーとして使う場合が多いと思うので、8080 を 80 に変えたい。

やり方はググるとたくさん出てくると思うが、要は libexec/conf 内にある server.xml の http のポートを書き換えてリスタート。

ところでちょっと疑問に思ったのだが、その下の connector executor も 8080 を使っている。

tomcatThreadPool って何をやっているんだ???

よくわからんが、ものは試しとこちらも 80 に変更。

再起動してこの前の ejb のプログラムを走らせる。

まあ、問題なく 80 で動いてはいる。

この後、問題も出てくるかもしれないが、その時は報告したいと思うので諸々よろしく。

 

EJB の話2

EJB の話』で作成した tomee 向け war ですが、ノーマル雄猫に投入したところ、けっこう面白い挙動を示しました。

TomEE 上で正常に動作すると

となるんですが、ノーマル雄猫では

と、ものの見事に ejb が関与している部分をガン無視w

具体的には

out.print("<h2>Following message comes from ejb -> "+this.ejb.hello()+"</h2>");

の部分ですね。

でも

・デプロイ自体はできる

・サーブレットも動く

ものなんですね。

 

tomcat が Java EE 対応サーバとして認定されていないってのがよくわかりますね。

逆に EJB を軽々と使える TomEE は思っていたより優秀でしょうか。

 

 

EJB の話

そもそも EJB とは?

Enterprise Java Beans の略です。

よく「Java のエンタープライズなシステム向け拡張仕様 Java EE(Enterprise Edition)の一部。サーバ上で動作するアプリケーションをソフトウェア部品(コンポーネント)を組み合わせて開発・実行できるようにしたもの」などと説明されています。

この説明でピンとくる人がいるんだろうか?

というわけでいつものようになるべく行数の少ないコードでプロジェクトを作成。
手抜きコードともいうw

サンプル

シンプルに EJB を使ったサーブレットを作成。

以前に作成した TomEE 環境で動いてます。

ノーマル山猫では動くのかな?

→ war をノーマル雄猫(普通の tomcat のこと)に投入すると、けっこう面白い挙動しました。興味のある人は『EJB の話2』を読んでみてください。

 

ソースコードは GitHub: https://github.com/air-h-128k-il/tomee-ejb にあげてあります。
air-h-128k-il さん、いつもありがとうございます)

ソースコード解説

ソースコードは解説するまでもないでしょうが、ビジネスロジック(よくあるハロワw) を @EJB アノテーションを使ってサーブレットから使えるようにしているだけです。

そんだけw

 

 

レオ杯2022

久しぶりにチャンミの話。

御多分に洩れずクライマックスシリーズになって育成のモチベーションだだ下がり。

サークルメンバーが揃って出走、というのがなかったので特に記事にはしませんでした。

今回(レオ杯2022・中山1200)もワイと大槻さんのみ参加。

ラウンド1もとりあえず出した、という程度だったんですが、ここで好走したのがきっかけで両者育成数回程度のエースを作って参加を継続。

参加者も少なくレベルも下がっているようで、グレードBラウンド2はコンスタントに2・3勝できていた。

これくらいの付き合いがちょうどいいんでしょうね。

 

で、決勝の結果。

動画にしたので、どうぞ。

オグリやっぱつええ。

 

今回は大槻さんも動画を作成した。

カレンチャンの終盤でのスキル発動がえぐい。

それほど負担にならず1位取れて、まあよかったんじゃないでしょうか。