質問
- OpenOffice.orgの技術はスゴいと思います。貢献するにはどうしたらいいですか?
- UNOはOpenOffice.orgに依存しますか?
- UNOはMS COMに類似していますか?
- ODKとは何ですか?
- JavaやCORBAをミドルウェアとして使用しなかった理由は?
- UNOとCORBAの違いは何ですか?
- UNO IDLとCORBA IDLとの違いは?
- OpenOffice.orgコンポーネントをJavaBeansとして使用してもいいですか?
- コードの例を見せてもらえますか?
- C++型定義を生成するにはどうすればいいですか?
- regcompの目的は?
- OpenOffice.org APIはどこにありますか?
- どうやって作成したコンポーネントのテストを行えばいいですか?
- ブリッジはいくつありますか?
- ブリッジが関係するのはどの時点ですか?
- structのデフォルト値を指定するにはどうしたらいいですか?
- 作成したコンポーネントはコアダンプしかしません。なにがいけないのでしょう?
- コンパイラバージョンに依存したC++ブリッジを書くのはどうしてこんなにめんどくさいのですか?
- C++ブリッジをRISC cpuに実装する方法は?
- 既存の文書をロードする場合,どのPropertyValueを使用すべきですか?
- 既存の文書を開いてHTMLフォーマットで保存する方法は?
- OpenOffice.org文書をXMLで保存する方法は?
- 常にqueryInterfaceを使用すべきですか?
- 「cannot dump type 'com/star/uno/RuntimeException'」の意味は?
- 「symbol "component_getImplementationEnvironment" could not be found」の意味は?
- regmergeで型ライブラリに追加したものをアンマージする方法は?
- 型ライブラリのサービス記述はどこに書いてあるのですか?
- ユニークなuik番号を作成する方法は?
- オフィスをリスニングモードに設定するにはどうしたらいいですか?
- TestOffice.javaの起動方法は?
- 他のマシンで動いているOpenOffice.orgにリモート接続する方法は?
- UnoUrlResolverの目的は?
- リモートブリッジが廃棄された場合,どうやってイベント通知を受けることができますか?
- UDK wwwドキュメントをチェックアウトする方法は?
- UNOセキュリティモデルに関する詳細情報はどこにありますか?
- UNO CORBAブリッジに関する詳細情報はどこにありますか?
- SOAP-UNOの統合に関する詳細情報はどこにありますか?
- OpenOffice.orgとBonoboの統合に関する詳細情報はどこにありますか?
回答
OpenOffice.orgの技術はスゴいと思います。貢献するにはどうしたらいいですか?
いつでも大歓迎です。どの分野を手伝うかの見当をつけるためには,オープンタスクリスト(http://udk.openoffice.org/common/man/tasks/tasks.html)を探してみてください。ここのどのタスクについてでも質問があれば,お気軽に問い合わせてください。dev@udk.openoffice.orgメーリングリストへのポストをお待ちしています。
このページのトップへ近い将来,Openoffice-setup-set以外にもOffice Development Kitがダウンロードできるようになります。この開発キットにはコンポーネントをビルドするために必要なファイル(インクルードファイル,ライブラリ,ツールなど)がすべて含まれます。開発キットにはサンプルも含まれる予定です。このサンプルはmakefileでビルドされており,(完全なOpenOffice.orgビルド環境ではなく)gnumakeだけが必要となっています。このmakefileをテンプレートとして使用して,作成したUNOコンポーネントをあなたのビルド環境に統合することが可能です。
このページのトップへはい,UNOは完全にオフィス自体から独立したコンポーネントモデルと捉えることができます。COMと直接的に競合関係になります。機能リストはここ(http://udk.openoffice.org/common/man/uno.html)で見ることができます。
このページのトップへOffice Development Kit(ODK)は,UDKに追加のドキュメント・API(より多くのIDL)・サンプルコードを加えて拡張したものです。UDKはODKのサブセットです。OpenOffice.orgを拡張したいか,OpenOffice.orgでソリューションを書きたいのであれば,ODKが役に立つでしょう。UDKはスタンドアローンのオブジェクトモデルで,OpenOffice.orgなしで使用することができます。UDKはGnomeやXPCOM(http://www.mozilla.org/projects/xpcom/)との統合に関するディスカッションで主なターゲットになるでしょう。これは,オープンソースオブジェクトモデルを1つだけ持つ,という長期的な目標を達成するためのものです。将来的には,ODKに依存したコンポーネントや,OpenOffice.orgから独立したコンポーネントを書くことができるようになるはずです。
Office Development KitによってソフトウエアエンジニアはOpenOffice.orgのためのコンポーネントを,かさばるOpenOffice.orgビルト環境を必要とせずに開発できるようになります。このため,ODKにはベースライブラリ(+インポートライブラリ)のバイナリ,C++ヘッダファイル,すべてのidlファイル,.jarファイル,開発ツール(コードジェネレータ,コンポーネントを登録するツールなど)を含むことになります。ODKには,さらに,いくつかのソースの例とmakefileが含まれます。このmakefileはgnumake + C++コンパイラしか必要としません。このmakefileを例として使用することで,それをあなたのビルド環境に統合するために使用できます。将来的にはOpenOffice.orgビルドのリリースごとに,独立してダウンロード(http://www.openoffice.org/dev_docs/source/latest_build/latest_build.html#odk)できる形で開発キットが提供される予定です。
このページのトップへJavaやCORBAをミドルウェアとして使用しなかった理由は?
コンポーネントに使用するミドルウェアには粒度の細かいもの,少なくともインプロセスのものを使用したいと考えました。異なるUNOコンポーネントを同じ言語で使用すれば,オーバーヘッドはありません(例:C++でのコールはバーチャルメソッドコールでしかありません)。残念ながら,CORBAにはインタフェースと構造に関するインプロセス仕様がありません。コミュニケーションを行う唯一の方法はIIOPプロトコルを経由するものです。このオーバーヘッドは,インプロセスコミュニケーションを行うには高すぎます。そして,プログラミング言語から独立させたいとも考えていました。UNOをさまざまな言語(Java,C++,Cなど)の間に立つ仲介役にしたかったのです。これはCORBAの目指すところではありませんでした。もうひとつのUNOの目的は,さまざまなオブジェクトモデル(COM/DCOM,CORBA,Java,XPCOMなど)の間の仲介役になることでしたが,これは明白にその他のオブジェクトモデルの目的ではありませんでした。
このページのトップへUNOはスタブコードを生成しません。以前のUNO2実装では生成するようにしていました。問題の1つとしては,生成されたスタブコードがかなりの重荷となったことです(前回の時は約12MBでした。APIには現在よりも少ない型しかなかったにもかかわらず,です!)。UNO3(現行バージョン)では,スタブコードを生成することなく,ただ実装をコンパイルする特定のコンパイラを識別するブリッジコードを提供するだけで,包括的に実装をコールすることにしました。C++のために生成される唯一のものは,純粋な仮想クラス以外には,型を返すgetCppuType()関数だけです。完全な型の定義は実行時にバイナリストレージから読み出されます。このアプローチの利点は,型の数が増えると,消費するスペースが減る,ということです。もっとUNOとCORBAの違いを知りたいのであれば,以下の比較を参照してください。
このページのトップへUNO IDLには次の特徴があります。
- 構造と例外の継承
- ステレオタイプ『サービス』(インタフェースとプロパティを結合させる抽象型クラス)
- 特定の値を列挙値に割り当てることが可能
- ステレオタイプ配列はなし(アドホックシーケンスはあり)
- ユニオンステレオタイプはなし
OpenOffice.orgコンポーネントをJavaBeansとして使用できますか?
はい。OpenOffice.org bean(OOBean)プロジェクトによりOpenOffice.orgコンポーネントをJavaアプリケーションで使用することが可能となりました。http://whiteboard.openoffice.org/OOBean/index.htmlで情報,ソースコード,バイナリのダウンロードについて見てみてください。OO Beanの特徴は次のとおりです。
- OpenOffice.orgコンポーネントのJavaアプリケーション・アプレットへの埋め込み。
- StarOffice API全体へのJavaからのアクセス。これは独自に作成したアプリケーションを実装するためです。
このプロジェクトは始まったばかりなので,バグ,不完全なドキュメント,インストール時の問題などがあることに留意してください。OpenOffice.orgとJavaに興味を持っている方がこのプロジェクトに貢献してくれたり,もしくは単にbeanを皆さんのJavaアプリケーションで使用してくれることを歓迎します。
このページのトップへ- C++の例
- http://www.openoffice.org/source/browse/udk/remotebridges/examples/officeclient.cxx
この例では,どのようにしてOpenOffice.org文書へのインタープロセスブリッジを作るかを示しています。どうか,WindowsまたはLinux用にコンポーネントを書いても違いがないことに留意してください。 - http://www.openoffice.org/source/browse/udk/product/examples/
数多くの例
- http://www.openoffice.org/source/browse/udk/remotebridges/examples/officeclient.cxx
- HTMLドキュメント
- http://udk.openoffice.org/cpp/man/tutorial/remotedemo.html
リモートデモのチュートリアル - http://udk.openoffice.org/cpp/man/component_tutorial.html
UNOスペースで書いたコンポーネント - http://udk.openoffice.org/cpp/man/tutorial/unointro.html
C++に特有のUNOガイド - http://udk.openoffice.org/common/man/concept/unointro.html
言語に依存しないUNOガイド
- http://udk.openoffice.org/cpp/man/tutorial/remotedemo.html
どのようにしてJavaを使用した開発を始めるか,という良質のドキュメントはありません。ソースを直接見るしかありません。jurtプロジェクトにもいくつか例があり,次のコマンドを使用してチェックアウトすることができます。
$ cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs co oo/udk/jurt
ソースコードのデモツリーに例がいくつかあります。
- Javaの例
- http://www.openoffice.org/source/browse/udk/jurt/demo/com/sun/star/demo/TestOffice.java インタープロセスブリッジを起動してオフィスでいくつか文書を作成します。
- http://www.openoffice.org/source/browse/udk/jurt/demo/com/sun/star/comp/demo/
ここにはJavaComponentのセットアップ方法の例がいくつかあります。サンプルはオフィスに登録でき,従ってオフィスと同じプロセスで実行できます。
また,Sun-Developer-connection(http://soldc.sun.com/staroffice)も覗いてみるようお勧めします。Download SDKをクリックすると,StarOffice Programmers Tutorialがダウンロードできます。ここには特定のAPIトピックスの例がいくつか載っています。オフィスapiに関する高度な質問を行うにはdev@api.openoffice.orgメーリングリストを使用してください。
このページのトップへ- .idlファイルを作成してインタフェースを記述します。
- unoidlを使用して.urdファイルを生成します。
- 新しい型をregmergeでシステムレジストリにマージします。
- cppumakerを使用してC++型を作成します(javaでは,javamakerを使用します)。
- javaについて:生成したインタフェースをコンパイルしてそれをCLASSPATHに追加します。
unoidlはIDL記述をバイナリ表現の型ライブラリ形式に変換します。実行時にすべてのIDL型に関してこの型情報が必要とされます。生成されたunoidlの出力ファイルには特定のIDLファイルの型情報しか含まれていません。ここには型すべての完全な型の記述は含まれません。そのため,regmergeを使用して型ライブラリapplicat.rdbに新しい型をインストールする必要があります。UNOコンポーネントを開発したら,いくつかの管理関数(例:component_writeInfo)をサポート・エクスポートする必要があります。component_writeInfo関数では,開発者はサポートしたサービスと実装名に関する情報をいくつか提供します。この情報は後でサービスマネージャがコンポーネントのインスタンスを作成する際に利用されます。そのため,もしあなたが独自のコンポーネントを開発した場合,そのコンポーネントを実行時環境にインストールする必要があります。これはregcompを使用することで行うことができます。regcompはcomponent_writeInfo関数を読み込んで,含有情報に関する管理作業を多少行います。たとえば,そのコンポーネントがサポートするすべてのサービスを,サービスマネージャが使用するグローバルなSERVICESセクションに挿入します。このセクションでサービス名と実装名が関連付けられます。あなたが作成したコンポーネントに対応するセクションは予約領域IMPLEMENTATIONSの中にあります。それはcomponent_writeInfo関数で定義されるキーと同じものです。オフィスディレクトリにインストールしてあるapplicat.rdbを参照してください。
$ regview applicat.rdb /SERVICES
$ regview applicat.rdb /SERVICES/<service_name>
$ regview applicat.rdb /IMPLEMENTATIONS
$ regview applicat.rdb /IMPLEMENTATIONS/<implementation_name>
つまり,regcompは常に,新しいコンポーネントをインストールする際に必要となります。regmergeは新しい型を型ライブラリにインストールするために必要となります。
このページのトップへhttp://api.openoffice.orgプロジェクトサイトを参照してください。
このページのトップへどうやって作成したコンポーネントのテストを行えばいいですか?
新しいコンポーネントを開発した場合,それは最終的には共有ライブラリまたはダイナミックリンクライブラリ(DLL)となります。DLLは,実装されたサービスが呼び出されると必要に応じてロードされます。OpenOffice.orgでコンポーネントを参照・使用できるようにするためには,そのサービスを外部コンポーネントとして登録する必要があります。このためには,次の手順に従ってください。
- 作成したDLLを.../programディレクトリにコピーします。
- ツールregcompを.../programディレクトリにコピーします。このツールはUDKモジュールcpputoolsにあります。
- regcompツールを使用します。
$ regcomp -register -r applicat.rdb -c foo.dll - 独自のインタフェースとその他の新しい型を開発したのであれば,その新しい型をUNOの型ライブラリに登録する必要があります。そのためには,ツールregmergeが必要となります。これはUDKモジュールregistryにあります。unoidlツールはfoo.urdファイルを生成します。このファイルには新しい型が含まれています。このファイルは,作成したコンポーネントの出力ディレクトリにあります。
- regmergeツールを使用します。
$ regmerge applicat.rdb /UCR foo.urd
あらゆるIDL型の型の記述はレジストリに予約キーUCR(UNOコアリフレクション)の下に保存されます。 - コンポーネントと新しい型を登録すると,そのサービスのインスタンスをサービスマネージャ経由で作成できます。
新しいサービスのインスタンスを作成するのに非常に簡単で素早い方法としては,ベーシックを使用するものがあります。新しいベーシックスクリプトを開始し,次のコードをタイプします。
Sub Main
s = createUnoService("YourSerivceName")
msgbox(s.dbg_supportedinterfaces)
End Sub
インスタンスの作成に成功すると,メッセージボックスにはオブジェクトでサポートされたすべてのインタフェースが表示されます。
詳しい情報はhttp://www.openoffice.org/source/browse/udk/product/examples/ディレクトリ内のREADMEファイルにあります。
このページのトップへ現在,4つのブリッジがあります。C++ブリッジ,Javaブリッジ,UNOリモートプロトコル(URP)ブリッジ,IIOPブリッジです。
C++で独自のコンポーネントを開発した場合,同じコンパイラでコンパイルしたコンポーネントのインプロセスコールを行うためには,インタフェースにブリッジする必要はまったくない,ということを覚えておいてください。コンポーネントローダはこのことを認識し,実装されたC++インタフェースを直接使用します。しかし,もしスクリプト(例:ベーシック)を使用してJavaコンポーネントを呼び出したり,他のプロセスに対してリモートUNOを行う場合は,ブリッジが関係してきます。
このページのトップへstructのデフォルト値を指定するにはどうしたらいいですか?
structのデフォルト値を指定することはできません。というのも,このようなデフォルトは他のオブジェクトモデル(例:CORBA)では使用できないからです。また,unoidlが生成する,structのデフォルトコンストラクタを変更して,メンバ変数にデフォルト値を擬似的に持たせることもできません。デフォルトコンストラクタはenum変数には最初のenum値を,数値変数には0をセットし,その他の型はそれぞれのデフォルトコンストラクタを使用します。生成されたインラインデフォルトコンストラクタは.hppファイルにあります。コンストラクタはメンバを既知の初期値にしか設定しません。
このページのトップへ作成したコンポーネントはコアダンプ(コアを吐く)しかしません。なにがいけないのでしょう?
スタックトレースからだけでは何が間違っているのかはなんとも言えないので,できるだけ多くの情報を教えてください。運良くあなたがサービスの作成者であれば,コンポートネント実装コードと,オブジェクトのインスタントを作成するコードも送ってくれることができるでしょう。あなたがコンポーネントを開発したのではなければ,コンポーネント開発者に連絡する必要が出てきます。
このページのトップへコンパイラバージョンに依存したC++ブリッジを書くのはどうしてこんなにめんどくさいのですか?
UNOの背後にある目的は,UNOコンポーネント製作者とユーザーにとって一番簡単な言語バインディングを提供し,生成コードを削減し,実行速度を最大化することにあります。現在の技術で,目的は達成されました。たとえば,C++ではコールオーバーヘッドはありません。これは,C++からC++へのコールはバーチャルメソッドコールでしかないからです。コンパイル時のコード生成もありません。これは実行時に動的なブリッジで行われます。UNO C++言語バインディングは他(CORBA,COM)のバインディングよりもスマートです。一方,C++ブリッジを記述するのは難しいのですが,これはコンパイラ・オペレーティングシステム・プロセッサ毎に1回だけしか行う必要がありません。言語バインディングを実現するもっと単純な方法もありますが,それはよりよい方法ではありません。cppからunoへのブリッジは非常にコンパイラ・abiに依存しており,ちょっと見るだけで,全然ポータブルではないように見えます。しかし,注意しなければいけないことは,ブリッジコードはほとんどのコンパイラで類似している,ということです。主な違いは,生成されるvtables,C++バーチャルコールの実行,例外の取り扱いです。
このページのトップへRISCマシンでは,関数のパラメータはレジスタ内で渡されます。ところがC++ブリッジコードは,C++レイアウトと要求されたunoレイアウトの間のスタックを扱います。これを解決する例として,sunpro5 solaris sparcブリッジを参照してください。レジスタをrightに(訳注:完全にという意味と思われる)スタックにプッシュします([7個またはそれ以上のパラメータが渡る場合は]スタック上に置かれた非レジスタパラメータに続けて)。
このページのトップへ既存の文書をロードする場合,どのPropertyValueを使用すべきですか?
文書をローダ経由で開く場合,常にプロパティ引数はありません。
PropertyValue [] szEmptyArgs = new PropertyValue [0];
String doc = "private:factory/swriter";
aDoc = oCLoader.loadComponentFromURL (doc, "_blank", 0, szEmptyArgs );
この引数を使用して,強制的にOpenOffice.orgに特定のフィルタを使用させたり,文書を読み取り専用で開いたり,パスワードで保護する文書にパスワードを設定したりすることができます。表計算ファイル用のcsvフィルタの追加オプションがここにいくつかあります。これは,UIを使用してsoffice.ini/sofficercにピックリスト用に入力・保存したものと同じものです。
このページのトップへそのためのサンプルのコードです。
このページのトップへPropertyValue [] mypv = new PropertyValue[1];
mypv[0] = new PropertyValue();
mypv[0].Name = new String("FilterName");
mypv[0].Value = new String("scalc: Text - txt");
mypv[0].Handle = -1;
mypv[0].State = PropertyState.DEFAULT_VALUE;
aStore.storeAsURL(doc, mypv); //aStoreはXStorableオブジェクトで,docはurl文字列です。
そのためのサンプルのコードです。
sub SaveXML
dim mProps(0) as new com.sun.star.beans.PropertyValue
mProps(0).Name = "FilterName"
'これは614で実行できます。
mProps(0).Value = "swriter: StarOffice XML (Writer)"
oDesk = createUNOService("com.sun.star.frame.Desktop")
'なんらかの理由から,ActiveComponentはもう実行できません。
oComponent = oDesk.CurrentComponent()
oComponent.storeAsUrl("file:///C|/Tmp/startemp.xml",_
mProps())
end sub
このページのトップへ
queryInterfaceを直接的にコールする必要はありません。より便利な方法としては,このために特別な参照コンストラクタを使用することができます。
::com::sun::star::uno::Any x = xI->queryInterface(
::getCppuType((const ::com::sun::star::uno::Reference<
::com::sun::star::i18n::XTransliteration>*)0));
x >>= transRef;
上記の代わりに,次のものを使用するべきです。
transRef = Reference< XTransliteration >( xI, UNO_QUERY );
このページのトップへ「cannot dump type 'com/star/uno/RuntimeException'」の意味は?
まず,FAQの「C++型定義を生成するにはどうすればいいですか?」に従っているかを確認します。つまり,次のことを行います。まず,コンポーネントを「記述」または「定義」する.idlファイルを作成します。unoidlツールを使用してidlファイルをコンパイルします。その結果作成された.urdファイルでcppumakerを実行します。cppumakerはC++の式をidl型用に生成し,unoidlが生成した型ライブラリで処理を行います。この手順を踏んでも「cppumaker ERROR: cannot dump type 'com/star/uno/RuntimeException'」エラーが表示される場合は,新しい型をシステムの型ライブラリに統合する必要があります。というのも,型情報は,ランタイム時と,C++コードを生成する際にも必要となるからです。このための一番簡単な方法は,作成した「XXX.urd」ファイルをシステムの型ライブラリにマージすることです。システムの型ライブラリはapplicat.rdbと呼ばれ,プログラムディレクトリにあります。型ライブラリをマージするには,ツールregmergeを使用する必要があります。これはビルド環境にあるはずです。applicat.rdbの型情報はすべて予約領域「UCR」に保存されます。独自に作成した型はこの予約領域にもマージする必要があります。regmergeを使用して次のことを行います。
$ regmerge applicat.rdb /UCR yourtypes.urd
レジストリファイル(=型ライブラリ)の内容を見る便利なツールも別にあります。
$ regview applicat.rdb /UCR/com/sun/star/uno
これはモジュールcom.sun.star.unoの型すべてを表示します。または:
$ regview applicat.rdb /UCR/com/sun/star/uno/XInterface
これはcom.sun.star.uno.XInterfaceの型情報を表示します。コード生成に関して追加情報があります。cppumakerはあらゆる型情報を必要とします。というのも,cppumakerは指定された型とあらゆる依存関係を生成するからです。依存関係にある型は再帰的に生成されるため,作成したコンポーネントをビルドするために必要なC++型宣言すべてを入手できることになります。
ここでapplicat.rdbを使用する必要があります。(regmergeの後では)ここには(オフィスに付属するものと作成した新しい)型がすべて含まれます。regmergeコマンドは最初のファイルだけを変更し,他のものは読み込み専用で開く,ということに注意してください。
regviewを使用して,regmergeが本当に実行されたか,作成した新しい型が含まれているかを確認します。例えば,次のように行います。
$ regview applicat.rdb /UCR/com/sun/star/uno/RuntimeException
これにより通常のRuntimeExceptionについての出力が得られます。
$ regview applicat.rdb /UCR/your/new/types
これにより作成した新しい型に関する出力が得られます(もちろんyour/new/typesをidl内の新しい型のモジュール・型名にしてください)。
その後,次のコマンドで現在の作業ディレクトリの下にC++ヘッダを生成します。
$ cppumaker -O. -Tyour/new/types -BUCR applicat.rdb
これが実行できない場合,少なくとも次のコマンドは実行できるはずです。
$ cppumaker -O. -Tcom/sun/star/uno/RuntimeException -BUCR applicat.rdb
このページのトップへ「symbol "component_getImplementationEnvironment" could not be found」の意味は?
作成したDLLを次のようにregcompで登録しようとして
$ regcomp -register -r applicat.rdb -c foo.dll
次のエラーが表示された場合:
register component "foo.dll" in registry "applicat.rdb" failed!
ERROR: component could not be registered: symbol "component_getImplementationEnvironment"
could not be found in "foo.dll"
.cxxファイルであらゆるクラスの外側で関数を定義したことを確認してみてください。次のようにします。
extern "C"
void SAL_CALL component_getImplementationEnvironment(
const sal_Char ** ppEnvTypeName,
uno_Environment ** ppEnv )
{
*ppEnvTypeName = CPPU_CURRENT_LANGUAGE_BINDING_NAME;
}
モジュール定義ファイル(DEFファイル)を使用していない場合は,関数定義の前でSAL_DLLEXPORTマクロを使用できます。このマクロは__declspec(dllexport)に展開されます。Win32プラットフォームでは,次のコマンドを使用してエクスポートを確認します。
$ dumpbin /EXPORTS foo.dll
これでも作成したDLLの登録を実行できない場合は,パスが正しいか,foo.dllがリンクされているライブラリがすべてそのパス経由でアクセス可能かを確認します。Win32プラットフォームでは,Developer Studio 6と一緒に配布されているツールが使用できます。これはdependという名前で,ライブラリインポートと欠けているライブラリ(赤で表示)を示すものです。それでもダメな場合は,共有ライブラリコンポーネントローダのwriteRegistryInfo()関数をデバッグする必要があります。ローダは,oo/udk/stocディレクトリにチェックアウトされるCVSモジュールstocの中にあります。stocディレクトリ内には,ローダがsource/loaderディレクトリにビルドされています。ビルドされたライブラリはcpld.dllという名前です。
このページのトップへregmergeで型ライブラリに追加したものをアンマージする方法は?
regmergeは既存のキーを上書きします。既存のキーを削除するツールがあると便利ではあるのですが,現在では存在しません。
このページのトップへサービス記述は型ライブラリには保存されません。これは,サービスに関するリフレクティブ情報はランタイム時には必要ではないからです。サービス記述はモデリングのためだけに存在しています。
IDLコンパイラの起動時に特別なオプション(-C)をつけると,サービス記述とコメントを含んだ型ライブラリを生成できます。これは通常のオフィスビルドでは使用されません。というのも,これによりファイルサイズがおよそ2倍になるからです。
このページのトップへ人によっては,既存のものをコピーして多少変更する,という方法で行っています。これは,もちろん,お勧めの方法ではありませんが,現在のところ機能はします。現在は独自のツールはありませんが,マイクロソフトコンパイラに付属するguidgen.exeを使用することができます。
しかしながら,guidは現在は使用されていません。これが存在するのは歴史的な理由から(以前のUNOコンポーネントモデルではこれが必要でした)であり,将来のUNO-COMブリッジのために必要かもしれない,ということで残してあります。その場合はユニークな識別子が必要となるかもしれないためです。
このページのトップへオフィスをリスニングモードに設定するにはどうしたらいいですか?
2通りの方法があります。
- オフィスに追加パラメータをつけて起動します。
soffice -accept=socket,host=0,port=2002;urp;StarOffice.ServiceManager
(unixシェルでは「;」をクォート(引用)するのを忘れないでください) - 「-accept=」を除いた同じ文字列を設定ファイルに記述します。
次のファイルを編集して,
<office-install>/share/config/registry/instance/org/openoffice/Setup.xml
次のタグを
<ooSetupConnectionURL cfg:type="string"/>
次のものと置き換えます。
<ooSetupConnectionURL cfg:type="string">socket,host=0,port=2002;urp;StarOffice.ServiceManager</ooSetupConnectionURL>
この変更はネットワークインストール全体に影響を及ぼし,簡単に深刻なセキュリティ上の問題の原因となる,ということに留意してください。また,host=0というパラメータを使用することで,オフィスはすべてのネットワークインターフェースでネットワークアクセスを受け付ける,ということにも注意してください。スクリプトによるオフィス操作を同一マシンからのみにしたいのであれば,0の代わりにlocalhostにするほうが明らかによいでしょう。
もしそれを(ネットワークインストールで)特定のユーザ用だけに設定したいのであれば,ユーザ固有の設定ディレクトリ中の相当箇所を変更する必要があります。
パラメータとして,例えば,次のものを使用してください。
uno:socket,host=localhost,port=2002;urp;StarOffice.NamingService
このページのトップへ他のマシンで動いているOpenOffice.orgにリモート接続する方法は?
OpenOffice.orgに接続する場合は,Uno URLを提示します。これにより指定したUnoオブジェクトを異なるプロセスに配置することができます。Uno URLは4つの部分で構成されています。
- 定記号列『uno』
- 接続仕様(オプションパラメータはキー/値のペア)
- プロトコル仕様(オプションパラメータはキー/値のペア)
- 配置するオブジェクトの名前
これらの4つの部分は文字列としてつながります。
uno:[接続],params;[プロトコル],params;[オブジェクト名]
Uno URLの例:
uno:socket,host=localhost,port=2002;urp;StarOffice.ServiceManager
Uno URLの詳しい情報は,http://udk.openoffice.org/common/man/spec/uno-url.htmlを参照してください。
uno-urlに似た文字列は受諾プロセス,例えばオフィスを設定するために使用されます。次のコマンドでオフィスを起動することができます。
soffice "-accept=socket,host=0,port=2002;urp;"
この文字列はuno-urlほど厳密には指定されておらず,他のプログラムはそれぞれ独自のフォーマットを定義できる,ということに留意してください(例:odkに付属するunoツールは異なるフォーマットを想定しています)。ソケット接続部の特筆すべき点は,『host=0』が使用できる,ということです。この指定は,現在のマシンで提供されているあらゆるネットワークインターフェース(localhostを含む)で接続を受け付けることを意味します。『host=0』部分はリソースに接続するためには使用できません。
さらに,オブジェクト名を特定する必要もありません。というのも,オフィスはどちらにしても複数オブジェクト(StarOffice.NamingService,StarOffice.ServiceManager,[新しい]StarOffice.ComponentContext)をエクスポートするからです。
このページのトップへUnoUrlResolverによって,uno-urlで指示されたサービス名に対応したリモートオブジェクト,特にStarOffice.ServiceManager,を取得します。そうすれば,サービスマネージャのXNamingServiceインターフェースを使ってサービスマネージャの'registeredObject'(登録されたオブジェクト)をgetRegisteredObjectによって取得し,XMultiServiceFactoryのqueryInterface()が使えるようにします。リモートのOpenOfficeプロセスは,ネーミングサービス参照が戻される前にスタートアッププロセスを完了している,ということを覚えておいてください。これはすべてのサービスを確実に利用するために必要になります。お分かりの通り,ネーミングサービスはサービスマネージャのためのコンテナにしかすぎません。これは融通を利かせるためです。というのも,将来のバージョンではサービスマネージャだけではなくより多くのオブジェクトをエクスポートするであろうからです。uno-urlを他のプロセスへのエントリーポイントだと理解してください。その後は,すべてのものは通常のUNOコール経由で扱われることになります。おそらく将来のバージョンでは,オブジェクトを追加・削除するためのネーミングサービス能力も取り除くことになるでしょう。明らかにリモートプロセスでは何の意味もないからです。
このページのトップへリモートブリッジが廃棄された場合,どうやってイベント通知を受けることができますか?
XComponentは,自分が廃棄されそうになると,自分のイベントリスナに通知します。残念ながら,UnoUrlResolverオブジェクトへの参照は廃棄イベント通知を受け取るには十分ではありません。少なくとも,XComponentインタフェースのために問い合わせのできるコネクタとブリッジファクトリサービスが必要です(詳細はjurtディレクトリのcom.sun.star.comp.urlresolver.UnoUrlResolverを参照してください)。問い合わせで得られた参照先は,廃棄イベントリスナを追加するために次のように使用できます。
このページのトップへString connection = "socket,host=localhost,port=2002";
String protocol = "urp";
Object connector = _xMultiServiceFactory.createInstance("com.sun.star.connection.Connector");
XConnector connector_xConnector = (XConnector)UnoRuntime.queryInterface(XConnector.class, connector);
XConnection xConnection = connector_xConnector.connect(connection);
xBridge = xBridgeFactory.createBridge(connection + ";" + protocol, protocol, xConnection, null);
XComponent component = (XComponent)UnoRuntime.queryInterface(XComponent.class, component);
component.addEventListener(...);
udkプロジェクトに関するドキュメントはhttp://udk.openoffice.orgで見ることができ,次のCVSコマンドを使用してチェックアウトできます。
$ cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www
生成されるC++モジュール参照ドキュメントは必要ないのであれば,次のコマンドをスクリプトまたはバッチファイルに保存してコマンドシェルから実行する方がいいかもしれません。
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/common
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/cpp/man
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/java
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/images
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/bylaws.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/documentation_structure.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/faq.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/index.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/project_discuss.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/project_issues.html
cvs -d :pserver:anoncvs@anoncvs.openoffice.org:/cvs -z3 co oo/udk/www/project_navbar.html
UNOセキュリティモデルに関する詳細情報はどこにありますか?
http://udk.openoffice.org/common/man/draft/uno_security.htmlを辿ってみてください。このドラフトの主な目的は,既存のセキュリティ実装のラッパーとなる(wrap)包括的なAPIを提供することにありますが,ドラフトはjavaセキュリティおよびセマンティックスに基づいています。赤でマークされているもの(例:リモート透過性)は議論が必要なものです。
このページのトップへUNO CORBAブリッジに関する詳細情報はどこにありますか?
UNOとCORBAのブリッジは些細な問題ではありません。というのも,どちらのコンポーネントモデルも異なる基本コンセプトに基づいているからです。そのため,実装を始める前に,どのようにしてこの基本的な差異を扱うのか,ということを書き出したいと思っています。詳しい情報はhttp://udk.openoffice.org/common/man/concept/uno_corba.htmlを辿ってみてください。ドキュメントには,現在は,対処する必要のある側面がいくつかしか含まれていません。ドキュメントはこの数週間で急速に充実する予定です。この件に関するコミュニティーからのフィードバックを歓迎します。主な目標は,GNOME(http://www.gnome.org)とコミュニケーションを行うために必要な機能をすべてサポートしたCORBAブリッジを得ることです。GNOMEで使用されているコンポーネントモデルはBONOBOで,これはORBIT(http://www.labs.redhat.com/orbit/)に基づいて構築されています。ORBITはオープンソースのCORBA ORB(オブジェクトリクエストブローカ)です。CORBA-UNOブリッジは,例えば,OpenOffice.orgをGNOMEスクリプト言語で操作することを可能にします。第2の目標は,「包括的な」CORBA-UNOブリッジを開発することです。これにより任意のORBとのコミュニケーションが可能となります。これによりOpenOffice.orgをシームレスにあらゆるCORBA環境に統合させることが可能となります。
このページのトップへhttp://udk.openoffice.org/common/man/draft/soap.htmlを参照してください。
このページのトップへOpenOffice.orgとBonoboの統合に関する詳細情報はどこにありますか?
「OpenOffice.org - Bonobo統合」に関する簡単な概略はhttp://whiteboard.openoffice.org/bonobo/にあります。このプロジェクトの動機や目的は,ここに多少書いてあります。いくつかのコードがCVSにチェックインしてあり,OpenOffice.orgがNautilusのようなコンテナ用のBonoboサーバとなることが可能になっています。アイデアやコード,またどのようにしてOpenOffice.orgとGNOMEをコンポーネント技術レベルでより密接にするか,という貢献を歓迎します。
このページのトップへこのFAQはdev@udk.openoffice.orgメーリングリストにポストされた質疑応答で構成されています。
管理者:Jörg Brunsmann(joerg_brunsmann@yahoo.de)
最終更新日:2002年5月1日(水)
この文書の更新履歴
- 2003 Feb. 27 日本語訳作成
原文:http://udk.openoffice.org/faq.html