メモ代わり。てきとーに。 いや、ですからてきとーですって。 2年前ぐらいにPythonあたりでメールくれた方、ごめんなさい。メール紛失してしまい無視した形になってしまいました。。。

2008年12月29日月曜日

[work][OpenOffice][SDK][java] Professional UNO読み中(21) Opening a Connection

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide/ProUNO/Opening_a_Connection
を読む。

Opening a Connection
前の章で使用したUnoUrlResolver()の下の層は完全な柔軟性を提供する。
UNOにおけるプロセス間通信の接続の確立は、com.sun.star.connection.XConnectionの上に
成り立つ。
XConnectionは双方向通信をカプセル化する。

で、ここには異なるプロセス間通信の仕組みがあるらしい。
仕組みのほとんどは、




ひとつのプロセスがListenし、別のプロセスがそこにアクセスするまで待つ、
 

といった似たパターンに従う。

で、このパターンは、



  1. com.sun.star.connection.Accept


  2. com.sun.star.connection.Connector


のサービスに抽象化されている。

それぞれ、 com.sun.star.connection.XAcceptor、com.sun.star.connection.XConnector
というインタフェースとしてexportされている?


で、そのインタフェース定義。


interface XAcceptor: com::sun::star::uno::XInterface
{
XConnection accept( [in] string sConnectionDescription )
raises( AlreadyAcceptingException,
ConnectionSetupException,
com::sun::star::lang::IllegalArgumentException);

void stopAccepting();
};

interface XConnector: com::sun::star::uno::XInterface
{
XConnection connect( [in] string sConnectionDescription )
raises( NoConnectException,ConnectionSetupException );
};
 


acceptメソッドとconnectメソッドはパラメータに接続文字列を受け取る。
ここで指定する接続文字列は、UNO-URL中の接続文字列部分。
先の"uno:socket,host=localhost,port=2002;urp,Negotiate=0,ForceSynchronous=0;StarOffice.ServiceManager"のうちのunoから;urpまでの文字列。つまり
"uno:socket,host=localhost,port=2002;urp,Negotiate=0,ForceSynchronous=0"
まで。

で、コネクションタイプ部分でDefaultで指定できるものは以下のとおり。

  1. socket

  2. pipe



socketコネクションタイプ
ソケット接続。
指定できるパラメータは以下のとおり。
パラメータ名意味
hostListenまたは接続先のホスト名もしくはIP
portTCP/IPにおけるポート番号
tcpNoDelayソケットオプションのno delay。UNOでは1に設定されるべき。



pipeコネクションタイプ
名前付きパイプによる接続。
指定できるパラメータは以下のとおり。
パラメータ名意味
name名前付きパイプの名前



ConnectorとAcceptorを自分で実装すればコネクションタイプを追加することができる。

どうも、

com.sun.star.connection.Connector.AAA
 

などというコネクターを定義し、実装すると、
UNO-URLは、"uno:AAA;urp"なんてな風に書けるらしい。



.

0 コメント: