LibreOffice(64)Professional UNO example

前の関連記事:LibreOffice(63)FirstStepsの例をNetBeansでビルドする


とりあえずデベロッパーズガイドのJavaの例を全部動かして見ましょう。次は第2章にあたるProfessional UNOです。

第2章Professional UNOには4つの実行可能なJavaの例が付属


UrlResolver Importing a UNO Object

ConnectionAwareClient Example: A Connection Aware Client

MyUnoObject Differences Between the Lifetime of C++ and Java ObjectsWiki

SimpleBootstrap_java.java Transparent Use of Office UNO Components

それぞれ該当するデベロッパーズガイドへのリンクを探して出現順に並べました。

何をする例なのかはLibreOffice 4.3 SDK - Developer's Guide Examplesに概略一覧があります。

順番に動かしてみます。

UrlResolver LibreOfficeとソケット通信をする


LibreOffice(62)Javaの例をNetBeansでブレークポイントを設定すると同様の手順で起動できます。

(これ以降もとくに記載がない限り同様の手順です。ちなみに動かしてみただけでデベロッパーズガイドはまだ理解していないので感想は間違っているかもしれません。)
run:
usage: UrlResolver uno-url
       uno-url  The uno-url identifying the object to
                be imported, for instance
                uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager                (use " on unix shells to avoid ;-problems
Java Result: 1
ビルド成功(合計時間: 0秒)
NetBeansの出力コンソールにこのようにでてくるだけです。

LibreOffice(61)linuxBeanでJavaの例をmakeでやったようにmakeでビルドしてみます。
--------------------------------------------------------------------------------
Note: For these examples you need a running office listening on port 2083.
      Before you run these examples you have to start your office with
-
  soffice "--accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"
-----
Please use one of the following commands to execute the examples!
-
make ConnectionAwareClient.run
make UrlResolver.run
--------------------------------------------------------------------------------
linuxBean(13)LibreOfficeとPyCharm4の連携設定でやったようにポート番号をそろえてLibreOfficeを起動しないといけないようです。

デベロッパーズガイドを読むよりmakeするほうが例の使い方はわかりやすいですね。

linuxBeanのメニューから実行。

libreoffice4.3 "--accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"

これでポート番号2038でソケット接続を受け付けることができます。
pq@linuxBean:/opt/libreoffice4.3/sdk/examples/DevelopersGuide/ProfUNO/InterprocessConn$ make UrlResolver.run
"/usr/bin/java"  -classpath "/opt/libreoffice4.3/ure-link/share/java/juh.jar:/opt/libreoffice4.3/ure-link/share/java/jurt.jar:/opt/libreoffice4.3/ure-link/share/java/ridl.jar:/opt/libreoffice4.3/ure-link/share/java/unoloader.jar:/opt/libreoffice4.3/sdk/../program/classes/unoil.jar::/home/pq/libreoffice4.3_sdk/LINUXexample.out/class/ProfUNOInterprocessExamples" UrlResolver "uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"
initial object successfully retrieved
接続成功とでてきましたね。
pq@linuxBean:/opt/libreoffice4.3/sdk/examples/DevelopersGuide/ProfUNO/InterprocessConn$ make UrlResolver.run
"/usr/bin/java"  -classpath "/opt/libreoffice4.3/ure-link/share/java/juh.jar:/opt/libreoffice4.3/ure-link/share/java/jurt.jar:/opt/libreoffice4.3/ure-link/share/java/ridl.jar:/opt/libreoffice4.3/ure-link/share/java/unoloader.jar:/opt/libreoffice4.3/sdk/../program/classes/unoil.jar::/home/pq/libreoffice4.3_sdk/LINUXexample.out/class/ProfUNOInterprocessExamples" UrlResolver "uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"
Couldn't connect to remote server
java.net.ConnectException: 接続を拒否されました
ソケット接続を受け付けていない状態ですと接続を拒否されました、と反応があります。

NetBeansから実行して同じような結果を得るためにはプロジェクトのプロパティの引数にuno-urlを設定します。


"uno:socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"

引数の枠にこのように入力しておきます。


NetBeansでも同じ結果が得られましたね。

ConnectionAwareClient LibreOfficeとの通信状態を表示する


先ほどのUrlResolverと同じフォルダにあるのでNetBeansで実行前にプロジェクトプロパティでメインクラスに忘れずに切り替えておきます。

すでにuno-urlをプロジェクトプロパティで引数に設定してあるはずですので、実行→プロジェクト(ProfUNO_InterprocessConn)を実行、とします。

すると左上に小さなウィンドウがでてきました。


libreoffice4.3 "--accept=socket,host=localhost,port=2083;urp;StarOffice.ServiceManager"

これでLibreOfficeをソケット通信の状態で起動した状態で「New writer」ボタンをクリックします。


Writerが起動して表示が「connected」に表示が変わりました。

Writerを終了するとまた「disconnected」に戻りました。

「New calc」ボタンでも同様の動作をします。

MyUnoObject JavaとC++のUNOオブジェクトの寿命の比較


これをmakeすると「gcc: error trying to exec 'cc1plus': execvp: そのようなファイルやディレクトリはありません」といわれて止まってしまいました。

どうやらこれはC++コンパイラーがインストールされていないときにでるエラーのようです。

LibreOffice 4.3 SDK - Installation Guide

SDKのインストールガイドをみるとC++コンパイラはオプションになっていますね。

だからLibreOffice(61)linuxBeanでJavaの例をmakeで環境設定したときにインストールを促されなかったのですね。

インストールガイドにはLinux GNU C++ compiler, gcc version 4.0.1と書いてあります。

linuxBean12.04のSynapticパッケージマネージャで調べてみるとすでにインストールされているgccは4.6でした。

といことでg++-4.6をインストールしようとしたのですが、linux-libc-devの取得に失敗してインストールできませんでした。

アンインストールもできなくなって泥沼へ、、、

結局Synapticパッケージマネージャの「再読込」ボタンをクリックしてパッケージ情報をダウンロードしたあとに、g++を選択してインストールしたらうまくいきました。

g++を選択すると自動的に最適なバージョンをインストールしてくれるようでg++-4.6がインストールされていました。
--------------------------------------------------------------------------------
Please use one of the following commands to execute the examples!
-
make MyUnoObject.run
make ProfUnoLifetime.runexe
--------------------------------------------------------------------------------
pq@linuxBean:/opt/libreoffice4.3/sdk/examples/DevelopersGuide/ProfUNO/Lifetime$ make MyUnoObject.run
"/usr/bin/java"  -classpath "/opt/libreoffice4.3/ure-link/share/java/juh.jar:/opt/libreoffice4.3/ure-link/share/java/jurt.jar:/opt/libreoffice4.3/ure-link/share/java/ridl.jar:/opt/libreoffice4.3/ure-link/share/java/unoloader.jar:/opt/libreoffice4.3/sdk/../program/classes/unoil.jar::/home/pq/libreoffice4.3_sdk/LINUXexample.out/class/ProfUnoLifetime" MyUnoObject
finalizer called
leaving
pq@linuxBean:/opt/libreoffice4.3/sdk/examples/DevelopersGuide/ProfUNO/Lifetime$ make ProfUnoLifetime.runexe
cd /home/pq/libreoffice4.3_sdk/LINUXexample.out/bin && ProfUnoLifetime
constructed
before release
destructed
after release
うーん、Javaの場合はガベッジコレクターが働くのでC++のときとUNOオブジェクトの寿命が異なるということの実例みたいです。

SimpleBootstrap_java.java LibreOfficeを外部から起動して操作できるようにする


単にCalcが起動するだけです。

FirstStepsのFirstLoadContactとどう違うのでしょう?

プロジェクトウィンドウでFirstLoadContact.javaとSimpleBootstrap_java.javaを両方選択した状態で右クリック→ツール→差分、で視覚的に比較できます。


灰色のところが一致するところ、赤色のところは左にしかないもの、黄緑色は右にしかないもの、水色は似ているところ?

どうやらSimpleBootstrap_java.javaはFirstLoadContact.javaのLibreOfficeを外部から起動して操作するようにする部分のようです。

参考にしたサイト


デベロッパーズガイドの第2章になります。

LibreOffice 4.3 SDK - Developer's Guide Examples
上記のデベロッパーガイド出現順に並んでいる訳ではありませんでした。

gcc: error trying to exec 'cc1plus'... [Archive] - Ubuntu Forums
g++がインストールされていないとでてくるエラーです。

次の関連記事:LibreOffice(65)Writing UNO componentsのThumbs Exampleその1

PR

0 件のコメント:

コメントを投稿