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

Google

言語

開発環境

Webアプリ/ミドル

データベース

OS/ネットワーク

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>

戻る

Loarding…

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

Copyright (C) 2007-2011 zealseeds. All Rights Reserved.お問合せ