トップ 技術・仕様 CORBA
CORBAとは、分散オブジェクト技術と呼ばれる技術です。読み方は「コルバ」です。言語依存しない分散オブジェクトですが、この記事では、Javaを使用したCORBA通信の入門知識をまとめています。
この記事の目次です。
3. CORBA通信入門―Hello World !!サンプルコードの作成
CORBA(読み方:こるば)は、Common Object Request Broker Architectureの略で、 OMGが定めた分散オブジェクト技術の仕様です。
CORBAを使用することで、言語やOSに依存しないで、分散配置されたオブジェクトのメソッドをネットワーク越しに呼び出すことができます。 IDLというインターフェース記述言語で定義したIFより生成した、スタブとスケルトンの雛形にコードを組み込む形で実装します。
CORBA(Common Object Request Broker Architecture)は、 オブジェクト指向技術を使って、ネットワークに接続したマシン上のアプリケーションを連携させるための標準仕様のことです。 この標準仕様は、オブジェクト指向技術の標準化団体、米OMG(Object Management Group)が策定しています。
Java、C、C++、COBOLなどがサポートされている。
IIOPによる相互運用性
IDLでインターフェイスを定義する
CORBAはCommon Object Request Broker Architectureの略です。 OMG(Object Management Group)が定めた分散オブジェクト技術の仕様で、 これを用いることによってネットワーク上に分散しているプログラムを利用したり、 相互に連動させて動かしたりすることができます。
CORBA通信入門ということですが、ここでは簡単なサンプルコードを見ながらどのような実装を行うか見ていきます。
OMG IDLとはOMG(Object Management Group)が定めたインターフェースのを記述する言語です。 IDLとはInterface Definition Languageの略です。下が今回使用するインターフェース定義です。
module HelloApp
{
interface Hello
{
string sayHello();
oneway void shutdown();
};
};
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
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を停止します");
}
}
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はObject Request Broker Daemonの略です。 ORBのデーモンプログラムで、クライアントがネームサービスの使用してオブジェクトを取得し、 そのオブジェクトを利用できるようにします。コマンドライン引数にポート番号を指定します。
コマンドプロンプト
C:\>start orbd -ORBInitialPort 1050
正常に起動すると画面には何も表示されない状態になります。
コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaServer -ORBInitialPort 1050 -ORBInitialHost localhost
HelloWorldCorbaServerが起動しました
ORBのデーモンプグラム(orbd)が動いているサーバーのポート番号とホスト名を指定します。 ここではlocalhostで動いているで上記のようになります。
コマンドプロンプト
C:\JavaHello\CORBA>java HelloWorldCorbaClient -ORBInitialPort 1050 -ORBInitialHost localhost
Hello World
C:\JavaHello\CORBA>
CORBAを理解するためにはCORBAインターフェース定義言語(IDL)の理解が必要です。 CORBAはこのIDLを使用してインターフェースを定義します。
CORBAの理解に不可欠な言語、IDL(Interface Definition Language)についてまとめています。
この記事の更新履歴です。
スポンサーリンク
サイト内のページ
言語
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インフラセキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
関連サイト内検索ツール
zealseedsおよび関連サイト内のページが検索できます。
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
3.236.86.184
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved. Loarding…