summaryrefslogtreecommitdiff
path: root/fml/doc/ja/tutorial/internals/bootloader.sgml
diff options
context:
space:
mode:
Diffstat (limited to 'fml/doc/ja/tutorial/internals/bootloader.sgml')
-rw-r--r--fml/doc/ja/tutorial/internals/bootloader.sgml153
1 files changed, 153 insertions, 0 deletions
diff --git a/fml/doc/ja/tutorial/internals/bootloader.sgml b/fml/doc/ja/tutorial/internals/bootloader.sgml
new file mode 100644
index 00000000..9d5e10b0
--- /dev/null
+++ b/fml/doc/ja/tutorial/internals/bootloader.sgml
@@ -0,0 +1,153 @@
+<!--
+ $FML: bootloader.sgml,v 1.2 2001/04/24 06:51:59 fukachan Exp $
+-->
+
+<chapter id="bootloader">
+
+<title> バージョン依存性を解決するための fml ブートローダ </title>
+
+<para>
+
+fml 5.0 にはインストールされている fml のバージョン依存性を考慮するた
+めに、実行時には本章で述べるようなブートストラップの過程があります。
+
+<programlisting>
+boot していくイメージ
+
+libexec/loader ->
+ FML::Process::Switch ->
+ FML::Process::Flow ->
+ FML::Process::それぞれのプログラムのモジュール
+</programlisting>
+</para>
+
+
+<sect1>
+<title> 例: 配送の場合 </title>
+
+<para>
+loader から次々と呼ばれていく様子は、例えば配送処理の場合、次のよう
+になる。
+
+<programlisting>
+libexec/loader は FML::Process::Switch をロードし、
+FML::Process::Distribute を実行すると決める。
+
+FML::Process::Flow::ProcessStart() は引数として
+FML::Process::Distribute を渡され、
+FML::Process::Distribute を実行していく。
+</programlisting>
+</para>
+</sect1>
+
+
+<sect1>
+<title> FML::Process:: クラスの階層構造 </title>
+
+<para>
+<programlisting>
+FML::Process::Distribute >-|
+FML::Process::Command >-|-- FML::Process::Kernel
+FML::Process::Mead >-| |
+ |-use-a FML::Parse
+ |-use-a FML::Config
+ |-use-a FML::Log
+ |-use-a ... その他 ...
+</programlisting>
+
+=&gt;
+<ulink url="../../../fml/lib/FML/Process/programs.ja.html">
+FML::Process::それぞれのプログラムのモジュールについて
+</ulink>
+
+</para>
+</sect1>
+
+
+<sect1>
+<title> ブートしていく順番について </title>
+
+<itemizedlist>
+
+ <listitem>
+ <para>
+ libexec/loader (wrapper)
+ Bootstrap() を実行する。
+ fml.pl などはこの loader へのシンボリックリンクです。
+ /usr/local/libexec/fml/ を参照して下さい。
+ </para>
+ </listitem>
+
+ <listitem>
+ <itemizedlist>
+ <listitem>
+ <para>
+ /etc/fml/main.cf を読み込む。
+ 読み込むと fml のバージョンが分かる。
+ default_config.cf はバージョン依存であるので、
+ ここでまずバージョンを評価しなければいけないことに注意。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ ( fml.pl を例にとると)
+ @ARGV を評価し、
+ どのMLの config.cf 群をロードすればいいのかを準備する。
+ 変数の評価と展開には libexec/Standalone.pm を用います。
+
+ これはあまりよくないような気がします。
+ libexec/ を @INC に加えないといけないこと、
+ libexec/loader と libexec/Standalone.pm の2つが
+ 入れ換えないといけないものになってしまうので。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ 次に
+ FML::Process::Switch
+ ( バージョン依存 )ファイルを
+ ロードします。
+ </para>
+
+ <itemizedlist>
+ <listitem>
+ <para>
+ Bootstrap2() および ProcessSwitch() を実行し、
+ 配送用、コマンドモード用などの各
+ プログラム/プロセスなどへ制御を移します(分岐する)。
+ この時は $0 から自分の名前を知り、
+ どのプロセスへ分岐すればいいのかを判断しています。
+ </para>
+ </listitem>
+
+ <listitem>
+ <para>
+ (ポリモーフィズムの例)
+ モジュールをダイナミックバインディングし、
+ 該当するプロセスオブジェクトを生成する。
+ そして、プロセスをスタートさせます。
+
+ FML::Process::Flow の中に、
+ どのように fml プロセスを実行するかが
+ 定義されています。
+<programlisting>
+$process = new FML::Process::なにか;
+$process->prepare($args);
+$process->run($args);
+$process->finish($args);
+</programlisting>
+ のように実行されています。
+ 各プロセスは、それぞれについて適当な関数を
+ 用意してください。
+ </para>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+ </itemizedlist>
+ </listitem>
+</itemizedlist>
+</sect1>
+
+</chapter>