LibertyとtWASのEJB環境を自動化で構築

# 目的

LibertyとtWASのEJB環境を構築してテストします。

# テスト環境の構築

用意したGitレポジトリをクローンします。
```
git clone http://github.com/pdprof/ejb-jndi.git
cd ejb-jndi/ejb-jndi-docker
```

Libertyのイメージをビルドして開始します。
```
./setup-docker.sh
./start.sh
```

tWASのイメージをビルドして開始します。
```
./setup-was90.sh
./was90-start.sh
```

Libertyの起動を確認します。Welcome PageとEJBにアクセスします。

http://localhost:9081/
http://localhost:9081/ejb-hello/hello

tWASの起動を確認します。

http://localhost:9080/ejb-hello/hello

上からもわかりますが、LibertyはPort9081 tWASは9080で構成されています。
また２つのContainerがpdprof-networkというdocker networkで構成されています。構成については起動スクリプトを確認すると良いです。

https://github.com/pdprof/ejb-jndi/blob/main/ejb-jndi-docker/start.sh#L13
https://github.com/pdprof/ejb-jndi/blob/main/ejb-jndi-docker/was90-start.sh

# 構成済みのユーザー

Liberty と tWASの管理ユーザーは 

|User | Password|
|---|---|
|wsadmin|passw0rd|

になっています。構成は以下のファイルでされています。

https://github.com/pdprof/ejb-jndi/blob/main/ejb-jndi-docker/config/server.xml#L49
https://github.com/pdprof/ejb-jndi/blob/main/ejb-jndi-docker/was90/PASSWORD

# tWASにアクセス

launchClient 、Thin ClientでtWASにアクセスします。管理ユーザーのIDとパスワードが必要です。

- launchClient
```
podman exec -it was90-ejb bash
cd /tmp/thinclient
./launchToTWAS.sh
```

ログ抜粋
```
...
WSCL0035I: Initialization of the Java EE Application Client Environment has completed.
WSCL0014I: Invoking the Application Client class Main
Realm/Cell Name: defaultWIMFileBasedRealm
User Identity: wsadmin
User Password:         
 Hello!! from lookup java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
Hello!! from lookup java:app/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
Hello!! from lookup ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/twas/ejb/Hello
***** Failed in lookup ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/liberty/ejb/Hello
```


- Thin Client
```
./thinToTWAS.sh 
```

ログ抜粋
```
$ ./thinToTWAS.sh                    
***** Failed in lookup java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:app/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
Realm/Cell Name: defaultWIMFileBasedRealm
User Identity: wsadmin
User Password:         
 Hello!! from lookup ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/twas/ejb/Hello
***** Failed in lookup ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/liberty/ejb/Hello
```

# Libertyにアクセス

launchClient 、Thin Client(IBM Java)、Thin Client(Non IBM Java)でtWASにアクセスします。管理ユーザーのIDとパスワードが必要です。

- launchClient
```
podman exec -it was90-ejb bash
cd /tmp/thinclient
./launchToLiberty.sh
```

ログ抜粋 （最初のアクセスではSSLの署名者についての情報が出力されます。）

```
...
WSCL0035I: Initialization of the Java EE Application Client Environment has completed.
WSCL0014I: Invoking the Application Client class Main
Realm/Cell Name: defaultWIMFileBasedRealm
User Identity: wsadmin
User Password:         
 Hello!! from lookup java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
Hello!! from lookup java:app/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/twas/ejb/Hello

*** SSL SIGNER EXCHANGE PROMPT ***
SSL signer from target host 10.89.0.21 is not found in trust store /opt/IBM/WebSphere/AppServer/profiles/AppSrv01/etc/trust.p12.

Here is the signer information (verify the digest value matches what is displayed at the server): 

Subject DN:    CN=localhost, OU=defaultServer
Issuer DN:     CN=localhost, OU=defaultServer
Serial number: 1153675918
Expires:       Fri Jan 30 14:48:09 UTC 2026
SHA-1 Digest:  82:EE:67:4F:4E:A7:77:70:79:43:A6:54:79:B5:BC:31:55:06:F1:21
MD5 Digest:    DA:CC:90:36:67:FE:A4:D4:66:04:E2:EB:84:95:5B:AA

Add signer to the trust store now? (y/n) y
A retry of the request may need to occur if the socket times out while waiting for a prompt response.  If the retry is required, note that the prompt will not be redisplayed if (y) is entered, which indicates the signer has already been added to the trust store.
Hello!! from lookup ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/liberty/ejb/Hello
```

- Thin Client (IBM Java)

```
 ./thinToLiberty.sh 
```

ログ抜粋 （Failed時のNMSV0307Eを省略します。）
```
***** Failed in lookup java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:app/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/twas/ejb/Hello
Hello!! from lookup ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/liberty/ejb/Hello
```


- Thin Client (Non IBM Java)

```
./thinToLibertyNoIBMJava.sh 
```

ログ抜粋 （Failed時のNMSV0307Eを省略します。）
```
***** Failed in lookup java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:app/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/twas/ejb/Hello
Hello!! from lookup ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
***** Failed in lookup java:comp/env/liberty/ejb/Hello
```

# 参考情報

構築のもとにした内容は以下にあります。gitやdocker(podman) が使えれば上の通りに動作するはずですが、動くまでの構成をするのが大変だったりします。動いている環境を使ってテストしたい内容に変更するとテストが短縮できます。

https://qiita.com/keniooi/items/7f3fa3825a6ce0ad438a

https://qiita.com/keniooi/items/cc91856fc490b439d670

# トラブルシューティング

毎度のことですが、よくつかう dockerコマンドを書いておきます。この文書でもpodman, dockerとまとまりがないですが、Linux では dockerがpodmanを呼び出すようになっていました。

```
docker ps # 動作中のContainer確認
docker logs -f ejb-jndi # ログ確認
docker restart ejb-jndi # 再起動
docker inspect ejb-jndi # container 確認
docker exec -it ejb-jndi bash # Container内状況確認
```

など試してみましょう。ejb-jndiの部分を docker ps で確認した container の別IDにすることでtWAS側も確認できます。

# まとめ

LibertyとtWASのEJB環境を構築して tWAS環境に導入したlaunchClient, Thin Clientをテストしました。