トップ 技術・仕様 CORBA

CORBAとは―読み方はコルバ。CORBA通信(Java)の入門知識を解説。

CORBAとは、分散オブジェクト技術と呼ばれる技術です。読み方は「コルバ」です。言語依存しない分散オブジェクトですが、この記事では、Javaを使用したCORBA通信の入門知識をまとめています。

▲記事トップへ

目次

この記事の目次です。

1. CORBAとは

2. CORBAの概要

3. CORBA通信入門―Hello World !!サンプルコードの作成

4. CORBA IDL

更新履歴

1. CORBAとは

CORBA(読み方:こるば)は、Common Object Request Broker Architectureの略で、 OMGが定めた分散オブジェクト技術の仕様です。

CORBAを使用することで、言語やOSに依存しないで、分散配置されたオブジェクトのメソッドをネットワーク越しに呼び出すことができます。 IDLというインターフェース記述言語で定義したIFより生成した、スタブとスケルトンの雛形にコードを組み込む形で実装します。

2. CORBAの概要

CORBA(Common Object Request Broker Architecture)は、 オブジェクト指向技術を使って、ネットワークに接続したマシン上のアプリケーションを連携させるための標準仕様のことです。 この標準仕様は、オブジェクト指向技術の標準化団体、米OMG(Object Management Group)が策定しています。

特徴

3. CORBA通信入門―Hello World !!サンプルコードの作成

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

CORBA通信入門ということですが、ここでは簡単なサンプルコードを見ながらどのような実装を行うか見ていきます。

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>

4. CORBA IDL

CORBAを理解するためにはCORBAインターフェース定義言語(IDL)の理解が必要です。 CORBAはこのIDLを使用してインターフェースを定義します。

更新履歴

この記事の更新履歴です。

戻る

スポンサーリンク

サイト内のページ

言語
C・C++ /HTML /Java /JavaScript /PHP /シェルスクリプト

開発環境
Ant /Burp /Eclipse /Fiddler /gcc /gdb /Git /g++ /JDK /JMeter /JUnit /Teraterm /ZAP

技術・仕様
Ajax /CORBA /Jakarta EE(旧称J2EE、Java EE) /JNI

ライブラリ/Framework/CMS
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

54.205.179.155

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク