0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Liberty Client で EJB を動かす

Posted at

目的

Liberty Client でEJBにアクセスするプログラムをテストして Gitに公開したかったのですが、動かすところまではできました。ただ動きが不安定で、検証を完了して公開するまでに時間がかかりそうなため、試行錯誤したところを備忘録としてのこしていきます。

クラスがみつからない

EARにパッケージしたはずのクラスがロードできない。テストを継続するため共有ライブラリに配置してロード出きるように調整した。client.xml はこの時点で以下の構成

client.xml
<client description="new client">
    <featureManager>
        <feature>javaeeClient-8.0</feature>
	<feature>appSecurityClient-1.0</feature>
    </featureManager>

    <library id="ejb-lib">
	    <fileset dir="..." includes="*.jar" />
    </library>

    <application id="ejb-client" name="ejb-client" type="ear" location="ejb-ear.ear">
	    <classloader commonLibraryRef="ejb-lib" />
    </application>
    
</client>

JNDIのLookupが失敗する 1

EJBのLookupが失敗してしまう。エラー自体に違いがでないのだけどSSLの設定ができてないと別のエラーメッセージがでているので、そのエラーに対処してみる。

サーバー側の key.p12 をクライアント側にコピーして、defaultKeyStore とパスワードを指定する。

以下の構成を client.xml に追加

client.xml
<keyStore id="defaultKeyStore" location="key.p12" password="passw0rd" />

JNDIのLookupが失敗する 2

認証が失敗しているようなエラーがでている。server.xml の認証を無効にして、client.xml の認証をしていしてみる。

以下の構成を client.xmlに追加

client.xml
    <orb id="defaultOrb">
         <clientPolicy.clientContainerCsiv2>
		 <layers>
			 <authenticationLayer user="wsadmin" password="passw0rd" />
		 </layers>
	 </clientPolicy.clientContainerCsiv2>
    </orb>

以下の構成を server.xml に追加

server.xml
    <orb id="defaultOrb">
         <serverPolicy.csiv2>
		 <layers>
			 <authenticationLayer establishTrustInClient="Never"/>
		 </layers>
	 </serverPolicy.csiv2>
    </orb>

    <basicRegistry id="basic" realm="BasicRealm">
        <user name="wsadmin" password="passw0rd"/>
    </basicRegistry>

もとの構成は

JNDIのLookupが失敗する 3

client側のルックアップ先のアドレスの設定先がただしいかよくわからないが、Application Client のMainクラスの EJB Annotaionの指定と ibm-application-client-bnd.xml のバインディング名を調整する。

Main.class
public class Main {
	
	@EJB(name = "ejb/Hello")
	static HelloRemote hello;
	
	public static void main(String[] args) {
		System.out.println(hello.hello());
	}

	public Main() {
		super();
	}
}
ibm-application-client-bnd.xml
<?xml version="1.0" encoding="UTF-8"?>
<application-client-bnd 
	xmlns="http://websphere.ibm.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://websphere.ibm.com/xml/ns/javaee http://websphere.ibm.com/xml/ns/javaee/ibm-application-client-bnd_1_0.xsd"
	version="1.0">

	<ejb-ref name="ejb/Hello" binding-name="corbaname::localhost:2809#ejb/global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote" />
</application-client-bnd>

messages.lognに出力されていたログは以下

messages.log
[8/31/24 22:02:15:380 JST] 00000042 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl    I CNTR0167I: The server is binding the pdprof.ejb.view.HelloRemote interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: ejb/ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.view.HelloRemote
[8/31/24 22:02:15:382 JST] 00000042 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl    I CNTR0167I: The server is binding the pdprof.ejb.view.HelloRemote interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: pdprof.ejb.view.HelloRemote
[8/31/24 22:02:15:382 JST] 00000042 com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime           I CNTR0167I: The server is binding the pdprof.ejb.view.HelloRemote interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.view.HelloRemote
[8/31/24 22:02:15:382 JST] 00000042 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl    I CNTR0167I: The server is binding the pdprof.ejb.Hello interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: ejblocal:ejb-ear/ejb-lib.jar/Hello#pdprof.ejb.Hello
[8/31/24 22:02:15:383 JST] 00000042 com.ibm.ws.ejbcontainer.osgi.internal.NameSpaceBinderImpl    I CNTR0167I: The server is binding the pdprof.ejb.Hello interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: ejblocal:pdprof.ejb.Hello
[8/31/24 22:02:15:383 JST] 00000042 com.ibm.ws.ejbcontainer.runtime.AbstractEJBRuntime           I CNTR0167I: The server is binding the pdprof.ejb.Hello interface of the Hello enterprise bean in the ejb-lib.jar module of the ejb-ear application.  The binding location is: java:global/ejb-ear/ejb-lib/Hello!pdprof.ejb.Hello

JNDIのLookupが失敗する 4

なぜかモジュールを更新したはずなのに、古いままで動作しているような気がする。
client ディレクトリの logs と workarea を削除してキャッシュの削除をすると更新されました。

まとめ

動くようになりましたが git レポジトリに公開していつでも動かせるようにするには時間がかかりそうなので試行錯誤の備忘録とて公開します。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?