Exemple #1
0
	HRESULT getParamsFromXMLConfigFile(short mode, std::wstring * appexe, std::wstring * params)
	{
		::CoInitialize(NULL);
		MSXML::IXMLDOMDocumentPtr m_plDomDocument;
		MSXML::IXMLDOMElementPtr m_pDocRoot;

		HRESULT hr = m_plDomDocument.CreateInstance(MSXML::CLSID_DOMDocument);
		if (hr==S_OK)
		{		
			_bstr_t bstrFileName = _T("JavaService.xml");
			variant_t vResult;
			vResult = m_plDomDocument->load(bstrFileName);
			if (((bool)vResult) == TRUE) // success!
			{
				if (mode==STARTUP)
				{
					// now that the document is loaded, we need to initialize the root pointer
					m_pDocRoot = m_plDomDocument->documentElement;
					MSXML::IXMLDOMNodePtr jdkRoot = m_pDocRoot->selectSingleNode("//startup/jdk/javahome");
					MSXML::IXMLDOMNodePtr jvmmode = m_pDocRoot->selectSingleNode("//startup/jdk/jvmmode");
					MSXML::IXMLDOMNodePtr jvmclasspath = m_pDocRoot->selectSingleNode("//startup/jdk/classpath");
					MSXML::IXMLDOMNodePtr endorsedpath = m_pDocRoot->selectSingleNode("//startup/jdk/endorsedpath");				
					MSXML::IXMLDOMNodePtr syshost = m_pDocRoot->selectSingleNode("//startup/jdk/syshost");
					MSXML::IXMLDOMNodePtr minheap = m_pDocRoot->selectSingleNode("//startup/jdk/initmemory");
					MSXML::IXMLDOMNodePtr maxheap = m_pDocRoot->selectSingleNode("//startup/jdk/maxmemory");
					MSXML::IXMLDOMNodePtr newsize = m_pDocRoot->selectSingleNode("//startup/jdk/NewSize");
					MSXML::IXMLDOMNodePtr maxnewsize = m_pDocRoot->selectSingleNode("//startup/jdk/MaxNewSize");
					MSXML::IXMLDOMNodePtr survivorratio = m_pDocRoot->selectSingleNode("//startup/jdk/survivorratio");				
					MSXML::IXMLDOMNodePtr permsize = m_pDocRoot->selectSingleNode("//startup/jdk/permsize");
					MSXML::IXMLDOMNodePtr gcInterval = m_pDocRoot->selectSingleNode("//startup/jdk/gcInterval");
					MSXML::IXMLDOMNodePtr threadstacksize = m_pDocRoot->selectSingleNode("//startup/jdk/threadstacksize");
					MSXML::IXMLDOMNodePtr progname = m_pDocRoot->selectSingleNode("//startup/app/progname");				
					MSXML::IXMLDOMNodePtr appclass = m_pDocRoot->selectSingleNode("//startup/app/class");
					MSXML::IXMLDOMNodePtr classrunparams = m_pDocRoot->selectSingleNode("//startup/app/classrunparams");
					MSXML::IXMLDOMNodePtr extrajvmparams = m_pDocRoot->selectSingleNode("//startup/app/extrajvmparams");


					BSTR bjdkRoot;
					hr = jdkRoot->get_text(&bjdkRoot); 
					if (hr==S_OK) 
					{
						*appexe = _bstr_t(bjdkRoot) + _T("\\java.exe");

						BSTR bjvmmode;				
						BSTR bjvmclasspath;
						BSTR bendorsedpath;
						BSTR bsyshost;
						BSTR bminheap;
						BSTR bmaxheap;
						BSTR bnewsize;
						BSTR bmaxnewsize;
						BSTR bsurvivorratio;
						BSTR bpermsize;
						BSTR bgcInterval;
						BSTR bthreadstacksize;
						BSTR bprogname;
						BSTR bappclass;
						BSTR bclassrunparams;
						BSTR bextrajvmparams;

						hr = jvmmode->get_text(&bjvmmode) & 
							jvmclasspath->get_text(&bjvmclasspath) & 
							endorsedpath->get_text(&bendorsedpath) &
							syshost->get_text(&bsyshost) & 
							minheap->get_text(&bminheap) & 
							maxheap->get_text(&bmaxheap) & 
							newsize->get_text(&bnewsize) & 
							maxnewsize->get_text(&bmaxnewsize) & 
							survivorratio->get_text(&bsurvivorratio) &
							permsize->get_text(&bpermsize) & 
							gcInterval->get_text(&bgcInterval) &
							threadstacksize->get_text(&bthreadstacksize) &
							progname->get_text(&bprogname) & 
							appclass->get_text(&bappclass) & 
							classrunparams->get_text(&bclassrunparams) &
							extrajvmparams->get_text(&bextrajvmparams);  
						if (hr==S_OK)
						{		
							*params = _T("-") + _bstr_t(bjvmmode) + _T(" -Dprogram.name=") + _bstr_t(bprogname) 
								+ _T(" -Dsys.host=") + _bstr_t(bsyshost)
								+ _T(" -Xms") + _bstr_t(bminheap) + _T(" -Xmx") + _bstr_t(bmaxheap) 
								+ _T(" -XX:NewSize=") + _bstr_t(bnewsize) + _T(" -XX:MaxNewSize=") + _bstr_t(bmaxnewsize) 
								+ _T(" -XX:SurvivorRatio=") + _bstr_t(bsurvivorratio) 
								+ _T(" -XX:MaxPermSize=") + _bstr_t(bpermsize) 
								+ _T(" -Xss") + _bstr_t(bthreadstacksize)
								+ _T(" -Dsun.rmi.dgc.server.gcInterval=") + _bstr_t(bgcInterval) 
								+ _T(" -Djava.endorsed.dirs=") + _bstr_t(bendorsedpath) 
								+ _T(" ") + _bstr_t(bextrajvmparams) 
								+ _T(" -classpath ") + _bstr_t(bjvmclasspath) 
								+ _T(" ") + _bstr_t(bappclass)
								+ _T(" ") + _bstr_t(bclassrunparams);
						} else {
							LogEvent(_T("Failed to load application params from configuration file"));
						}
					} else {
						LogEvent(_T("Failed to load JDK setting from configuration file"));
					}
				} else {
					// Mode must be STOPPING. Now that the document is loaded, we need to initialize the root pointer
					m_pDocRoot = m_plDomDocument->documentElement;
					MSXML::IXMLDOMNodePtr jdkRoot = m_pDocRoot->selectSingleNode("//shutdown/jdk/javahome");
					
					MSXML::IXMLDOMNodePtr jvmclasspath = m_pDocRoot->selectSingleNode("//shutdown/jdk/classpath");
					MSXML::IXMLDOMNodePtr progname = m_pDocRoot->selectSingleNode("//shutdown/app/progname");				
					MSXML::IXMLDOMNodePtr appclass = m_pDocRoot->selectSingleNode("//shutdown/app/class");					
					MSXML::IXMLDOMNodePtr extrajvmparams = m_pDocRoot->selectSingleNode("//shutdown/app/extrajvmparams");

					BSTR bjdkRoot;
					hr = jdkRoot->get_text(&bjdkRoot); 
					if (hr==S_OK) 
					{
						*appexe = _bstr_t(bjdkRoot) + _T("\\java.exe");

						
						BSTR bjvmclasspath;						
						BSTR bprogname;
						BSTR bappclass;						
						BSTR bextrajvmparams;

						hr = jvmclasspath->get_text(&bjvmclasspath) & 							
							progname->get_text(&bprogname) & 							
							extrajvmparams->get_text(&bextrajvmparams) &
							appclass->get_text(&bappclass);  
						if (hr==S_OK)
						{		
							*params = _T(" -Dprogram.name=") + _bstr_t(bprogname) 								
								+ _T(" ") + _bstr_t(bextrajvmparams) 
								+ _T(" -classpath ") + _bstr_t(bjvmclasspath) 								
								+ _T(" ") + _bstr_t(bappclass);
								
						} else {
							LogEvent(_T("Failed to load application params from configuration file"));
						}
					} else {
						LogEvent(_T("Failed to load JDK setting from configuration file"));
					}
				}
			}
			else
			{
				LogEvent(_T("Failed to load configuration file"));
				return E_FAIL;
			}
		} else {
			LogEvent(_T("Failed to MSXML library."));
		}

		return hr;
	}