5.5. リモート Jakarta Enterprise Beans 呼び出しの IIOP の設定
JBoss EAP は、JBoss EAP にデプロイされた Jakarta Enterprise Beans への CORBA/IIOP ベースのアクセスをサポートします。
<iiop>
要素は、IIOP、CORBA、Jakarta Enterprise Beans の呼び出しを有効にするために使用されます。この要素が存在するということは、iiop-openjdk
サブシステムがインストールされていることを意味します。<iiop>
要素には、以下の属性が含まれます。
-
enable-by-default
: これがtrue
の場合、Enterprise Beans 2.x のホームインターフェイスを持つすべての Jakarta Enterprise Beans は IIOP 経由で公開されます。それ以外の場合は、jboss-ejb3.xml
を使用して明示的に有効にする必要があります。 -
use-qualified-name
: これがtrue
の場合、Jakarta Enterprise Beans はmyear/myejbjar/MyBean
などのデプロイメントのアプリケーションおよびモジュール名が含まれるバインディング名で CORBA ネーミングコンテキストにバインドされます。false
、デフォルトのバインディング名は bean 名のみになります。
通常、RemoteHome
インターフェイスは Jakarta Enterprise Beans 3 リモート呼び出しには必要ありませんが、IIOP を使用して公開される Jakarta Enterprise Beans 3 Bean に必要です。次に、jboss-ejb3.xml
ファイルを使用して IIOP を有効にするか、standalone-full.xml
設定ファイル内のすべての EJB に対して IIOP を有効にする必要があります。
IIOP の有効化
IIOP を有効にするには、IIOP OpenJDK ORB サブシステムがインストールされており、ejb3
サブシステム設定にある <iiop/>
要素がインストールされている必要があります。ディストリビューションに同梱される standalone-full.xml
設定は、どちらも有効になっています。
IIOP は、サーバー設定ファイルの iiop-openjdk
サブシステムで設定されます。
<subsystem xmlns="urn:jboss:domain:iiop-openjdk:2.1">
以下の管理 CLI コマンドを使用して iiop-openjdk
サブシステムにアクセスし、更新します。
/subsystem=iiop-openjdk
IIOP 要素は、サーバーのデフォルト動作を制御する 2 つの属性を取ります。
<subsystem xmlns="urn:jboss:domain:ejb3:5.0"> ... <iiop enable-by-default="false" use-qualified-name="false"/> ... </subsystem>
以下の管理 CLI コマンドは、ejb3
サブシステムの下に <iiop>
要素を追加します。
/subsystem=ejb3/service=iiop:add(enable-by-default=false, use-qualified-name=false)
IIOP を使用して通信する Jakarta Enterprise Beans の作成
以下の例は、クライアントからリモート IIOP 呼び出しを作成する方法を示しています。
サーバーで Enterprise Beans 2 Bean を作成します。
@Remote(IIOPRemote.class) @RemoteHome(IIOPBeanHome.class) @Stateless public class IIOPBean { public String sayHello() throws RemoteException { return "hello"; } }
必須メソッド
create()
を持つホーム実装を作成します。この方法は、ビジネスメソッドを呼び出すリモートインターフェイスのプロキシーを取得するためにクライアントによって呼び出されます。public interface IIOPBeanHome extends EJBHome { public IIOPRemote create() throws RemoteException; }
Enterprise Bean へのリモート接続のリモートインターフェイスを作成します。
public interface IIOPRemote extends EJBObject { String sayHello() throws RemoteException; }
META-INF
に記述子ファイルjboss-ejb3.xml
を作成して、リモート呼び出しの Bean を導入します。<?xml version="1.0" encoding="UTF-8"?> <jboss:ejb-jar xmlns:jboss="http://www.jboss.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:iiop="urn:iiop" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.jboss.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-2_0.xsd http://java.sun.com/xml/ns/javaee http://www.jboss.org/j2ee/schema/jboss-ejb3-spec-2_0.xsd urn:iiop jboss-ejb-iiop_1_0.xsd" version="3.1" impl-version="2.0"> <assembly-descriptor> <iiop:iiop> <ejb-name>*</ejb-name> </iiop:iiop> </assembly-descriptor> </jboss:ejb-jar>
注記JAR ファイルの記述子とともに、パッケージ化した Bean を JBoss EAP コンテナーにデプロイする準備が整いました。
クライアント側でコンテキストを作成します。
System.setProperty("com.sun.CORBA.ORBUseDynamicStub", "true"); final Properties props = new Properties(); props.put(Context.PROVIDER_URL, "corbaloc::localhost:3528/JBoss/Naming/root"); props.setProperty(Context.URL_PKG_PREFIXES, "org.jboss.iiop.naming:org.jboss.naming.client"); props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.cosnaming.CNCtxFactory"); props.put(Context.OBJECT_FACTORIES, "org.jboss.tm.iiop.client.IIOPClientUserTransactionObjectFactory");
注記クライアントでは、
wildfly iiop openjdk
ライブラリーをクラスパスに追加する必要があります。また、クライアントはorg.wildfly:wildfly-iiop-openjdk
アーティファクトを Maven 依存関係として追加する必要がある場合があります。コンテキストルックアップを使用して
IIOPBeanHome
ホームディレクトリーへの参照を絞り込みます。次に、ホームインターフェイスcreate()
メソッドを呼び出し、リモートインターフェイスにアクセスします。これにより、そのメソッドを呼び出すことができます。try { Context context = new InitialContext(props); final Object iiopObj = context.lookup(IIOPBean.class.getSimpleName()); final IIOPBeanHome beanHome = (IIOPBeanHome) PortableRemoteObject.narrow(iiopObj, IIOPBeanHome.class); final IIOPRemote bean = beanHome.create(); System.out.println("Bean saying: " + bean.sayHello()); } catch (Exception e) { e.printStackTrace(); }