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

2008年12月24日水曜日

[work][OpenOffice][SDK][java] とりあえずOpenOfficeのUNOポートに接続してみた

http://wiki.services.openoffice.org/wiki/Documentation/DevGuide
のとおり、FirstStep中。


# apt-get install openoffice.org openoffice.org-dev
 

でインストール。

FirstStepに書かれてあるbuild.xmlを参考に、ここで必要なjarは、、、、

/usr/lib/openoffice/program/classes/{jurt.jar,unoil.jar,ridl.jar,juh.jar}
 

だけ。

あと、CLASSPATHに入れておかなければいけないのは、、、

/usr/lib/openoffice/sdk/com/sun/star/lib/loader/*.class
 

らしい。

で、FirstStepのとおりのコードを書き・・・、ant。で、ant run。
おぉー。接続した。

X-Serverに接続しに行くので、Xも起動しておかないとダメ。
X-Serverなしでできないかと探してみたけど、OpenOfficeのメーリングリストで、
without X-Serverは非対応だって言っていた。
残念。

で、動かしたソースは、

public class FirstUnoContact {
public static void main(String[] args) {
try {
// get the remote office component context
com.sun.star.uno.XComponentContext xContext =
com.sun.star.comp.helper.Bootstrap.bootstrap();

System.out.println("Connected to a running office ...");

com.sun.star.lang.XMultiComponentFactory xMCF =
xContext.getServiceManager();

String available = (xMCF != null ? "available" : "not available");
System.out.println( "remote ServiceManager is " + available );
}
catch (java.lang.Exception e){
e.printStackTrace();
}
finally {
System.exit(0);
}
}
}
 

。。。
FirstStepのまんまでした。

OpenOffice の UNO APIを使用するには、
  1. クライアントでUNOの初期化
  2. サーバからコンポーネントコンテキスト取得
をしなきゃならないらしい。
内部的には、
  1. ServiceManagerを初期化して、
  2. OpenOffice.orgサーバとの接続を確立して、(サーバが居なければ立ち上げる)
  3. OpenOffice.orgサーバからコンポーネントコンテキストを取得する
だそうで。

FirstStepでは、この辺の面倒なところを、

com.sun.star.comp.helper.Bootstrap.bootstrap()

がやってくれているらしい。

次に、

xContext.getServiceManager();

がコールされ、serviceManagerを取得している。
OpenOffice.orgのUNO APIではこのserviceManagerが肝なんだってさ。

ふーん。


ついでに、OpenOffice.orgを事前にサーバとして立ち上げておく場合と
サーバとして立ち上げておかない場合でやってみたら、どちらもうまくうごく(もちろんそうだ。。)

が、やっぱり事前にサーバとして立ち上げておかないと重いねー。
.

0 コメント: