リモート・オブジェクト実装 (またはサーバント)

ここでは、オブジェクト実装について例をあげて説明します。

このオブジェクトのRMI (JRMP)とRMI-IIOP実装(SampleImpl.java) には、以下のものがあります。
 public class SampleImpl extends javax.rmi.PortableRemoteObject implements Sample { 	
       public SampleImpl() throws java.rmi.RemoteException { super(); }  
      	public String message() { return "Hello World!"; } 
}

RMI over JRMP および IIOP の両方に PortableRemoteObject クラスを使用できます。 その結果、リモート・オブジェクトの作成が効果的、かつ使用されるプロトコルに依存せず行われるようになります。 オブジェクト実装では、特に別のクラス (単一のクラス継承) を既に拡張している場合には、PortableRemoteObject を拡張する必要はありません。 代わりに、リモート・オブジェクト・インスタンスをサーバー実装にエクスポートする必要があります。 リモート・オブジェクトをエクスポートすることにより、オブジェクトで着信リモート・メソッド要求を受け入れられるようになります。 javax.rmi.PortableRemoteObject を拡張すると、クラスの作成時に自動的にクラスがエクスポートされます。

リモート・オブジェクト (サーバント) の CORBA または Java™ IDL 実装は、以下のとおりです。
public class SampleImpl extends _SamplePOA {     
    public String message() { return "Hello World"; } 
}
POA は、 ポータブル・オブジェクト・アダプターで説明されているポータブル・オブジェクト・アダプターです。

実装は Inheritance モデルに準拠します。このモデルでは、IDL により生成されたスケルトン SamplePOA が、サーバントにより直接拡張されます。 実装を他の実装から継承する必要がある場合は、標準の Inheritance モデルの代わりに、Tie モデルまたは Delegate モデルを使用することをお勧めします。 Tie モデルでは、サーバントは IDL により生成された操作インターフェース (SampleOperations など) を実装します。 Tie モデルでは間接指示のレベルが導入されるため、メソッドの呼び出し時に、メソッド呼び出しが 1 つ余分に発生します。 サーバー・コードには Tie モデルで必要な追加作業について記述されているため、ユーザーは Tie モデルまたは Delegate モデルを使用するかどうかを判断できます。 RMI-IIOP で使用できるのは、Tie モデルまたは Delegate モデルのみです。