トップ  eラーニング  書籍紹介  IT用語集

Google

言語

アーキテクチャ

開発環境

サーバ構築

ITスキル

自動出題採点アプリ

書籍検索

海外サイト翻訳

Hello World !!(CORBA)

CORBAとは?

CORBAとはCommon Object Request Broker Architectureの略です。 OMG(Object Management Group)が定めた分散オブジェクト技術の仕様で、 これを用いることによってネットワーク上に分散しているプログラムを利用したり、 相互に連動させて動かしたりすることができます。

OMG IDLによるインターフェース定義の作成

OMG IDLとはOMG(Object Management Group)が定めたインターフェースのを記述する言語です。 IDLとはInterface Definition Languageの略です。下が今回使用するインターフェース定義です。


module HelloApp
{
  interface Hello
  {
    string sayHello();
    oneway void shutdown();
  };
}; 

IDLファイルからJavaソースの生成

idljというコマンドで生成できます。 -fallオプションを指定することによって、スタブとスケルトンのJavaソースファイルを生成できます。


コマンドプロンプト 
C:\JavaHello\CORBA>idlj -fall Hello.idl 
C:\JavaHello\CORBA>

これでHelloAppフォルダの下に以下のファイルが生成されます。

生成されるファイルの説明

ソースファイル 説明

HelloPOA.java サーバーのスケルトンクラス
extends org.omg.PortableServer.Servant
implements HelloApp.HelloOperations, org.omg.CORBA.portable.InvokeHandler

_HelloStub.java クライアントのスタブクラス
extends org.omg.CORBA.portable.ObjectImpl
implements HelloApp.Hello

Hello.java IDLインターフェースのJava版
extends HelloOperations, org.omg.CORBA.Object, org.omg.CORBA.portable.IDLEntity

HelloOperations.java IDLで定義したsayHello()メソッドを持つインターフェース

HelloHelper.java CORBAオブジェクトを適切なタイプにキャストするために使うnarrow()メソッドを持つクラス。
CORBAストリームへの書き込みと、読み込みを行うメソッドを持ち、このメソッドはHelloHolderクラスで利用される。

HelloHolder.java Helloインターフェースをパブリックメンバに持つ。

CORBAストリームへの書き込みと、読み込みを行うためにHelloHeloperクラスを使用する。
implements org.omg.CORBA.portable.Streamable

サーバー側Javaソースファイルの作成


import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;

import java.util.Properties;

class HelloImpl extends HelloPOA {
  private ORB orb;

  public void setORB(ORB orb_val) {
    orb = orb_val; 
  }
  
  public String sayHello() {
    return "Hello World";
  }
  
  public void shutdown() {
    orb.shutdown(false);
  }
}

public class HelloWorldCorbaServer {

  public static void main(String args[]) {
    try{
      // ORBの生成と初期化を行う
      ORB orb = ORB.init(args, null);

      // RootPOAの参照を取得
      POA rootpoa = POAHelper.narrow(
              orb.resolve_initial_references("RootPOA"));
      rootpoa.the_POAManager().activate();

      // サーバントを生成し、それにORBを登録
      HelloImpl helloImpl = new HelloImpl();
      helloImpl.setORB(orb); 

      // サーバントからHelloオブジェクトの参照を取得
      org.omg.CORBA.Object ref
              = rootpoa.servant_to_reference(helloImpl);
      Hello href = HelloHelper.narrow(ref);
      
      // ネームサービスを検索してネームサービスの参照を取得
      org.omg.CORBA.Object objRef =
          orb.resolve_initial_references("NameService");
      NamingContextExt ncRef
               = NamingContextExtHelper.narrow(objRef);

      // Helloオブジェクトの参照をネームサービスに登録
      String name = "Hello";
      NameComponent path[] = ncRef.to_name( name );
      ncRef.rebind(path, href);

      System.out.println(
                   "HelloWorldCorbaServerが起動しました");

      // クライアントからの呼び出しを待ちます
      orb.run();
    } catch (Exception e) {
      e.printStackTrace();
    }
    
    System.out.println("HelloWorldCorbaServerを停止します");
  }
}

クライアント側Javaソースファイルの作成


import HelloApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;

public class HelloWorldCorbaClient {
  static Hello helloImpl;

  public static void main(String args[]) {
    try{
      // ORBの生成と初期化を行います
      ORB orb = ORB.init(args, null);

      // ネームサービスを検索してネームサービスの参照を取得
      org.omg.CORBA.Object objRef = 
          orb.resolve_initial_references("NameService");
      NamingContextExt ncRef
                = NamingContextExtHelper.narrow(objRef);

      // ネームサービスからHelloオブジェクトの参照を取得
      String name = "Hello";
      helloImpl = HelloHelper.narrow(
                               ncRef.resolve_str(name));
    
      // sayHello()メソッドを実行します
      System.out.println(helloImpl.sayHello());
    } catch (Exception e) {
      e.printStackTrace();
    }
  }
}

コンパイル

コマンドプロンプト
C:\JavaHello\CORBA>javac *.java HelloApp\*.java
C:\JavaHello\CORBA>

orbdの起動

orbdはObject Request Broker Daemonの略です。 ORBのデーモンプログラムで、クライアントがネームサービスの使用してオブジェクトを取得し、 そのオブジェクトを利用できるようにします。コマンドライン引数にポート番号を指定します。

コマンドプロンプト
C:\>start orbd -ORBInitialPort 1050

正常に起動すると画面には何も表示されない状態になります。

サーバー側のアプリケーションの実行

コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaServer -ORBInitialPort 1050 -ORBInitialHost localhost

HelloWorldCorbaServerが起動しました

-ORBInitialPort 1050 -ORBInitialHost localhost の説明

ORBのデーモンプグラム(orbd)が動いているサーバーのポート番号とホスト名を指定します。 ここではlocalhostで動いているで上記のようになります。

クライアント側のアプリケーションの実行

コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaClient -ORBInitialPort 1050 -ORBInitialHost localhost
Hello World
C:\JavaHello\CORBA>

戻る

グループサイト  zealseeds  zealseedsラーニング  zealseedsブックス  名か字  幸福の木の育て方

通算 (2006年12月26日以来)
Copyright (C) 2007-2009 zealseeds. All Rights Reserved.お問合せ