Erlang 21 - 8. Included Applications

8 शामिल अनुप्रयोग




erlang

8 शामिल अनुप्रयोग

8.1 परिचय

एक आवेदन में अन्य अनुप्रयोग शामिल हो सकते हैं । एक शामिल एप्लिकेशन की अपनी एप्लिकेशन निर्देशिका और .app फ़ाइल होती है, लेकिन इसे किसी अन्य एप्लिकेशन के पर्यवेक्षक ट्री के हिस्से के रूप में प्रारंभ किया जाता है।

एक आवेदन केवल एक अन्य आवेदन द्वारा शामिल किया जा सकता है।

एक शामिल एप्लिकेशन में अन्य एप्लिकेशन शामिल हो सकते हैं।

ऐसा अनुप्रयोग जो किसी अन्य अनुप्रयोग द्वारा शामिल नहीं किया जाता है, प्राथमिक अनुप्रयोग कहलाता है।

चित्र 8.1: प्राथमिक अनुप्रयोग और सम्मिलित अनुप्रयोग

एप्लिकेशन नियंत्रक स्वचालित रूप से प्राथमिक अनुप्रयोग लोड करते समय किसी भी शामिल एप्लिकेशन को लोड करता है, लेकिन उन्हें शुरू नहीं करता है। इसके बजाय, सम्मिलित अनुप्रयोग के शीर्ष पर्यवेक्षक को पर्यवेक्षक द्वारा सम्मिलित आवेदन में शुरू किया जाना चाहिए।

इसका मतलब यह है कि जब चल रहा है, एक सम्मिलित अनुप्रयोग वास्तव में प्राथमिक अनुप्रयोग का हिस्सा है, और एक सम्मिलित अनुप्रयोग में एक प्रक्रिया खुद को प्राथमिक अनुप्रयोग से संबंधित मानती है।

8.2 निर्दिष्ट अनुप्रयोग शामिल हैं

शामिल करने के लिए कौन से एप्लिकेशन को .app फ़ाइल में .app कुंजी द्वारा परिभाषित किया गया है:

{application, prim_app,
 [{description, "Tree application"},
  {vsn, "1"},
  {modules, [prim_app_cb, prim_app_sup, prim_app_server]},
  {registered, [prim_app_server]},
  {included_applications, [incl_app]},
  {applications, [kernel, stdlib, sasl]},
  {mod, {prim_app_cb,[]}},
  {env, [{file, "/usr/local/log"}]}
 ]}.

8.3 स्टार्टअप के दौरान प्रक्रियाओं को सिंक्रनाइज़ करना

सम्मिलित अनुप्रयोग के पर्यवेक्षक वृक्ष को सम्मिलित अनुप्रयोग के पर्यवेक्षक वृक्ष के हिस्से के रूप में शुरू किया जाता है। यदि सम्मिलित और सम्मिलित अनुप्रयोगों में प्रक्रियाओं के बीच तालमेल की आवश्यकता होती है, तो इसे स्टार्ट चरणों का उपयोग करके प्राप्त किया जा सकता है।

स्टार्ट चरणों को start_phases {Phase,PhaseArgs} , जहां Phase एक परमाणु है और PhaseArgs एक टर्म है {Phase,PhaseArgs} की सूची के रूप में .app फाइल में start_phases कुंजी द्वारा परिभाषित किया गया है।

शामिल एप्लिकेशन की mod कुंजी का मान {application_starter,[Module,StartArgs]} सेट होना चाहिए, जहां Module सामान्य रूप से एप्लिकेशन कॉलबैक मॉड्यूल है। StartArgs एक शब्द है जिसे कॉलबैक फ़ंक्शन के तर्क के रूप में प्रदान किया जाता है Module:start/2 :

{application, prim_app,
 [{description, "Tree application"},
  {vsn, "1"},
  {modules, [prim_app_cb, prim_app_sup, prim_app_server]},
  {registered, [prim_app_server]},
  {included_applications, [incl_app]},
  {start_phases, [{init,[]}, {go,[]}]},
  {applications, [kernel, stdlib, sasl]},
  {mod, {application_starter,[prim_app_cb,[]]}},
  {env, [{file, "/usr/local/log"}]}
 ]}.

{application, incl_app,
 [{description, "Included application"},
  {vsn, "1"},
  {modules, [incl_app_cb, incl_app_sup, incl_app_server]},
  {registered, []},
  {start_phases, [{go,[]}]},
  {applications, [kernel, stdlib, sasl]},
  {mod, {incl_app_cb,[]}}
 ]}.

शामिल अनुप्रयोगों के साथ एक प्राथमिक अनुप्रयोग शुरू करते समय, प्राथमिक अनुप्रयोग को सामान्य तरीके से शुरू किया जाता है, जो है:

  • एप्लिकेशन कंट्रोलर एप्लिकेशन के लिए एप्लिकेशन मास्टर बनाता है
  • एप्लिकेशन मास्टर Module:start(normal, StartArgs) कॉल करता है Module:start(normal, StartArgs) शीर्ष पर्यवेक्षक को शुरू करने के लिए Module:start(normal, StartArgs)

फिर, प्राथमिक अनुप्रयोग के लिए और प्रत्येक में टॉप-डाउन, लेफ्ट-टू-राइट ऑर्डर में एप्लिकेशन शामिल होता है, एप्लिकेशन मास्टर कॉल करता है Module:start_phase(Phase, Type, PhaseArgs) उस क्रम में प्राथमिक एप्लिकेशन के लिए परिभाषित प्रत्येक चरण के लिए Module:start_phase(Phase, Type, PhaseArgs) । यदि किसी सम्मिलित अनुप्रयोग के लिए किसी चरण को परिभाषित नहीं किया जाता है, तो इस चरण और अनुप्रयोग के लिए फ़ंक्शन को नहीं बुलाया जाता है।

निम्न आवश्यकताएँ शामिल अनुप्रयोग के लिए .app फ़ाइल पर लागू होती हैं:

  • {mod, {Module,StartArgs}} विकल्प को शामिल किया जाना चाहिए। इस विकल्प का उपयोग एप्लिकेशन के कॉलबैक मॉड्यूल Module को खोजने के लिए किया जाता है। StartArgs को नजरअंदाज कर दिया जाता है, क्योंकि Module:start/2 को केवल प्राथमिक अनुप्रयोग के लिए कहा जाता है।
  • यदि शामिल एप्लिकेशन में ही शामिल किए गए एप्लिकेशन शामिल हैं, इसके बजाय {mod, {application_starter, [Module,StartArgs]}} विकल्प शामिल होना चाहिए।
  • {start_phases, [{Phase,PhaseArgs}]} विकल्प को शामिल किया जाना चाहिए, और निर्दिष्ट चरणों का सेट प्राथमिक अनुप्रयोग के लिए निर्दिष्ट चरणों के सेट का सबसेट होना चाहिए।

जब prim_app रूप में prim_app शुरू किया जाता है, तो एप्लिकेशन कंट्रोलर application:start(prim_app) से पहले निम्नलिखित कॉलबैक फ़ंक्शन को कॉल करता है application:start(prim_app) एक मान देता है:

application:start(prim_app)
 => prim_app_cb:start(normal, [])
 => prim_app_cb:start_phase(init, normal, [])
 => prim_app_cb:start_phase(go, normal, [])
 => incl_app_cb:start_phase(go, normal, [])
ok