summaryrefslogtreecommitdiff
path: root/TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp')
-rw-r--r--TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp305
1 files changed, 305 insertions, 0 deletions
diff --git a/TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp b/TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp
new file mode 100644
index 00000000000..b04f594cc91
--- /dev/null
+++ b/TAO/CIAO/DAnCE/RepositoryManager/Repository_Manager.cpp
@@ -0,0 +1,305 @@
+// $Id$
+
+#include "RepositoryManager_Impl.h"
+#include "Update_Plan.h"
+#include "ExecutionManager/ExecutionManagerC.h"
+#include "Config_Handlers/DnC_Dump.h"
+#include "NodeManager/NodeManagerC.h"
+#include "ace/OS_NS_stdio.h"
+#include "ace/streams.h"
+#include "ace/Auto_Ptr.h"
+using namespace std;
+
+const char * exec_ior = "file://exec_mgr.ior";
+const char * node_daemon_ior = 0;
+
+static void
+usage (const ACE_TCHAR* program)
+{
+ ACE_ERROR ((LM_ERROR,
+ ACE_TEXT ("Usage: %s -p <URI> -d <URI> -k <EX_IOR> \
+ -t <NODE_MANAGER_IOR> \n")
+ ACE_TEXT (" <URI>: URI identifying the package\n"),
+ program));
+}
+
+int
+ACE_TMAIN (int argc, ACE_TCHAR *argv[])
+{
+ // Initialize orb
+ CORBA::ORB_var orb =
+ CORBA::ORB_init (argc,
+ argv,
+ ""
+ ACE_ENV_ARG_PARAMETER);
+ ACE_CHECK_RETURN (-1);
+
+ // top level package URL
+ char* package_url = 0;
+
+ // deployment plan URL
+ char* plan_url = 0;
+
+ ACE_Get_Arg_Opt<char> get_opt (argc, argv, ACE_TEXT ("p:d:k:t:"));
+ int c;
+
+ while ((c = get_opt ()) != EOF)
+ {
+ switch (c)
+ {
+ case 'p':
+ package_url = get_opt.opt_arg ();
+ break;
+ case 'd':
+ plan_url = get_opt.opt_arg ();
+ break;
+ case 'k':
+ exec_ior = get_opt.opt_arg ();
+ break;
+ case 't':
+ node_daemon_ior = get_opt.opt_arg ();
+ break;
+ default:
+ usage(argv[0]);
+ return -1;
+ }
+ }
+
+ if (package_url == 0) {
+ usage(argv[0]);
+ return -1;
+ }
+
+ if (plan_url == 0) {
+ usage(argv[0]);
+ return -1;
+ }
+
+ try
+ {
+ xercesc::XMLPlatformUtils::Initialize();
+ }
+
+ catch (const XMLException& xml_e)
+ {
+ char* message = XMLString::transcode (xml_e.getMessage());
+ ACE_Auto_Basic_Array_Ptr<char> cleanup_message (message);
+ ACE_DEBUG ((LM_DEBUG, "Error during initialization : %s\n", message));
+ return 1;
+ }
+ try
+ {
+ // get a reference to the parser.
+ auto_ptr<DOMBuilder> plan_parser (
+ CIAO::Config_Handler::Utils::create_parser ()
+ );
+
+ CIAO::Config_Handler::Config_Error_Handler handler;
+ plan_parser->setErrorHandler(&handler);
+
+ auto_ptr<DOMBuilder> tpd_parser (
+ CIAO::Config_Handler::Utils::create_parser ()
+ );
+
+ CIAO::Config_Handler::Config_Error_Handler tpd_handler;
+ tpd_parser->setErrorHandler(&tpd_handler);
+
+ // use the parser to parse the deployment plan URL and create
+ // a DOM document.
+ DOMDocument* plan_doc = plan_parser->parseURI (plan_url);
+
+ if (handler.getErrors())
+ {
+ return 1;
+ }
+
+ //DOMDocument* tpd_doc = tpd_parser->parseURI (package_url);
+
+ //ACE_UNUSED_ARG (tpd_doc);
+
+ if (tpd_handler.getErrors())
+ {
+ return 1;
+ }
+
+ if (plan_doc == NULL)
+ {
+ ACE_DEBUG ((LM_DEBUG, "Null DOM Document obtained, \
+ May be the URL is wrong!!\n"));
+ throw CIAO::Null_Dom_Document ();
+ }
+
+ // free up DOMBuilder. DOMBuilder also deletes the DOMDocument memory.
+ //auto_ptr<DOMBuilder> cleanup_parser (parser);
+
+ // call the Deployment Plan handler to parse the XML descriptor.
+ CIAO::Config_Handler::Plan_Handler plan_handler (
+ plan_doc,
+ DOMNodeFilter::SHOW_ELEMENT | DOMNodeFilter::SHOW_TEXT
+ );
+
+ Deployment::DeploymentPlan plan;
+ plan_handler.process_plan (plan);
+
+ // call the PackageConfiguration handler to parse the XML descriptor.
+ Deployment::PackageConfiguration* pc;
+
+ CIAO::RepositoryManager_Impl *rep_impl = 0;
+ ACE_NEW_RETURN (rep_impl,
+ CIAO::RepositoryManager_Impl (),
+ -1);
+ PortableServer::ServantBase_var owner_transfer (rep_impl);
+
+ rep_impl->installPackage ("PC", package_url);
+ pc = rep_impl->findPackageByName ("PC");
+ //Deployment::DnC_Dump::dump (*pc);
+
+ CIAO::REF_MAP ref_map;
+ CIAO::REF_MAP primary_ref_map;
+
+ // traverse the PackageConfiguration IDL data structure and
+ // update the deployment plan IDL data structure.
+ CIAO::traverse_package (pc, plan, ref_map, primary_ref_map);
+
+ //Deployment::DnC_Dump::dump (plan);
+
+ // Pass the parsed plan to the Execution Manager to start the
+ // Deployment Process.
+
+ CORBA::Object_var obj = orb->string_to_object (exec_ior
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ CIAO::ExecutionManagerDaemon_var exec_mgr =
+ CIAO::ExecutionManagerDaemon::_narrow (obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (exec_mgr.in ()))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Executor: nil Execution Manager reference, \
+ narrow failed\n"));
+ return 1;
+
+ }
+
+ CIAO::NodeManager_var node_mgr;
+ if (node_daemon_ior != 0)
+ {
+ CORBA::Object_var node_mgr_obj =
+ orb->string_to_object (node_daemon_ior
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ node_mgr =
+ CIAO::NodeManager::_narrow (node_mgr_obj.in ()
+ ACE_ENV_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+
+ if (CORBA::is_nil (node_mgr.in ()))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Executor: nil Node Manager reference, \
+ narrow failed\n"));
+ return 1;
+ }
+ }
+
+ ACE_DEBUG ((LM_DEBUG, "Executor: Obtained Execution Manager ref \n"));
+ Deployment::DomainApplicationManager_var dapp_mgr =
+ exec_mgr->preparePlan (plan, 1);
+
+ if (CORBA::is_nil (dapp_mgr.in ()))
+ {
+ ACE_DEBUG ((LM_DEBUG,
+ "Executor:preparePlan call failed:nil \
+ DomainApplicationManager reference\n"));
+ return 1;
+ }
+ ACE_DEBUG ((LM_DEBUG,
+ "Executor: Obtained DomainApplication Manager ref \n"));
+
+ // Create a dummy set of properties and start the
+ // Launching of applications
+ Deployment::Properties_var properties;
+ ACE_NEW_RETURN (properties,
+ Deployment::Properties,
+ 1);
+ ACE_DEBUG ((LM_DEBUG, "Executor: start Launch application....."));
+
+ // Do not start the Application immediately
+ int start = 0;
+ dapp_mgr->startLaunch (properties.in (), start);
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ // Call finish Launch to complete the connections
+ ACE_DEBUG ((LM_DEBUG, "Executor: finish Launch application....."));
+ dapp_mgr->finishLaunch (start);
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ // Call start to activate components
+ ACE_DEBUG ((LM_DEBUG, "Executor: start activating components..."));
+ dapp_mgr->start ();
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ ACE_DEBUG ((LM_DEBUG, "Executor: Application Deployed successfully \n"));
+ ACE_DEBUG ((LM_DEBUG, "Press <Enter> to tear down application \n"));
+
+ char dummy [256];
+ cin.getline (dummy, 256);
+ // Tear down the assembly
+
+ ACE_DEBUG ((LM_DEBUG, "Executor: destroy the application....."));
+ dapp_mgr->destroyApplication ();
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ ACE_DEBUG ((LM_DEBUG, "Executor: destroy the manager....."));
+ exec_mgr->destroyManager (dapp_mgr.in ());
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ if (node_daemon_ior != 0)
+ {
+ ACE_DEBUG ((LM_DEBUG, "shutting down node manager \n"));
+ exec_mgr->shutdown (); // shut down execution manager.
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+
+ ACE_DEBUG ((LM_DEBUG, "shutting down node manager \n"));
+ node_mgr->shutdown (); // shut down the node manager.
+ ACE_DEBUG ((LM_DEBUG, "[success]\n"));
+ }
+
+ orb->destroy (ACE_ENV_SINGLE_ARG_PARAMETER);
+ ACE_TRY_CHECK;
+ }
+ catch (CORBA::Exception& ex)
+ {
+ ACE_PRINT_EXCEPTION (ex, "Caught CORBA Exception: ");
+ return -1;
+ }
+ catch (const DOMException& e)
+ {
+ const unsigned int maxChars = 2047;
+ XMLCh errText[maxChars + 1];
+
+ ACE_ERROR ((LM_ERROR, "\nException occured while parsing %s: \
+ \n",plan_url));
+ ACE_ERROR ((LM_ERROR, "DOMException code: %d\n ", e.code));
+ if (DOMImplementation::loadDOMExceptionMsg (e.code, errText, maxChars))
+ {
+ char* message = XMLString::transcode (errText);
+ ACE_Auto_Basic_Array_Ptr<char> cleanup_message (message);
+ ACE_ERROR ((LM_ERROR, "Message is: %s\n", message));
+ }
+ //ACE_PRINT_EXCEPTION ("Caught DOM Exception: ");
+ ACE_ERROR ((LM_ERROR, "Caught DOM exception\n"));
+ return -1;
+ }
+ catch (...)
+ {
+ ACE_ERROR ((LM_ERROR, "Caught unknown exception\n"));
+ return -1;
+ }
+
+ return 0;
+}