Erlang 21 - 8. Included Applications
8 शामिल अनुप्रयोग

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