Hatena::Grouperlang

檜山正幸のErlang未確認情報 RSSフィード

 | 

2009-01-16 (金)

helloをちゃんと作る (8) applicationモジュール

| 13:27

「アプリケーションコントローラとコードサーバー」で示した方法で、「helloをちゃんと作る (7) appファイルを準備」で作っておいたアプリケーション仕様タームをコントローラにロードしておく。

#> application:loaded_applications().
[{kernel,"ERTS  CXC 138 10","2.12.4"},
 {hello,"hello application","1.0"},
 {stdlib,"ERTS  CXC 138 10","1.15.4"}]
#> application:which_applications().
[{stdlib,"ERTS  CXC 138 10","1.15.4"},
 {kernel,"ERTS  CXC 138 10","2.12.4"}]

application:which_applications() は、現在(登録されているだけではなくて)実際に走っているアプリケーションを列挙する。

アプリケーションコントローラからhelloを起動するには、起動用のモジュールhello_appが必要。

%% -*- coding: utf-8 -*-

%% @doc helloアプリケーションのapplicationコールバックモジュール.
-module(hello_app).

-behaviour(application).
-export([start/2, stop/1]).

%% @spec (StartType, StartArgs) -> {ok, Pid} | {ok, Pid, State} | {error, Reason}
%% where
%%   StartType = normal | {takeover,Node} | {failover,Node}
%%   Node = node()
%%   StartArgs = term()
%%   Pid = pid()
%%   State = term()
%% @doc helloアプリケーションのトップ・スーパーバイザを起動する.
start(_Type, _StartArgs) ->
  io:fwrite("hello_app:start(~p, ~p) : Starting the hello app.~n", 
            [_Type, _StartArgs]),
  hello_sup:start_link().

%% @spec stop(State::term()) -> ok
%% @doc helloアプリケーション終了後の処理(特になし).
stop(_State) ->
  io:fwrite("hello_app:stop(~p) : The hello app stopped.~n", 
            [_State]),
  ok.

次の点には注意。

  1. start/2で、OTP監視ツリーのルート=トップ・スーパーバイザを起動しなくてはならない。
  2. stop/1 は終了処理を実行しない。 終了処理は、アプリケーションマスターとトップスーパーバイザが協力して行うので、コールバックモジュールでは何もしない。stopは事後処理を行う。引数の意味や受け渡し(リレー)方法はマニュアルを。

めでたくOTPオフィシャル・アプリケーションとなったhelloを起動するには:

#> application:start(hello).
hello_app:start(normal, none) : Starting the hello app.
sup init: Start supervisor (<0.94.0>)
server init: Start hello_server (<0.95.0>)
ok
#> application:which_applications().
[{hello,"hello application","1.0"},
 {stdlib,"ERTS  CXC 138 10","1.15.4"},
 {kernel,"ERTS  CXC 138 10","2.12.4"}]
#> 

終了は:

#> application:stop(hello).         
hello_app:stop([]) : The hello app stopped.

=INFO REPORT==== 16-Jan-2009::13:23:16 ===
    application: hello
    exited: stopped
    type: temporary
ok
#> application:which_applications().
[{stdlib,"ERTS  CXC 138 10","1.15.4"},
 {kernel,"ERTS  CXC 138 10","2.12.4"}]
#> 

あとは、いくつかの注意、配備方法、カスタマイズとか。

HanifiHanifi2012/08/22 11:29You're a real deep thinker. Thanks for shirnag.

pygfyhupjxlpygfyhupjxl2012/08/23 11:12As6z7f <a href="http://cowginndvfpg.com/">cowginndvfpg</a>

llocxwllocxw2012/08/23 23:29XEFmcR , [url=http://dogvxngagqhp.com/]dogvxngagqhp[/url], [link=http://nmsockevbivx.com/]nmsockevbivx[/link], http://ofyztelvpity.com/

krkbcsrnikrkbcsrni2012/08/24 20:45XCGiSf <a href="http://vgiwbhyixirk.com/">vgiwbhyixirk</a>

 |