📄 jmpiprovidermanager.cpp
字号:
//%2006//////////////////////////////////////////////////////////////////////////// Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development// Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation, The Open Group.// Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;// IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; VERITAS Software Corporation; The Open Group.// Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;// EMC Corporation; Symantec Corporation; The Open Group.//// Permission is hereby granted, free of charge, to any person obtaining a copy// of this software and associated documentation files (the "Software"), to// deal in the Software without restriction, including without limitation the// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or// sell copies of the Software, and to permit persons to whom the Software is// furnished to do so, subject to the following conditions://// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED// "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT// LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR// PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT// HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN// ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.////==============================================================================////%/////////////////////////////////////////////////////////////////////////////#include "JMPIProviderManager.h"#include "JMPIImpl.h"#include <Pegasus/Common/CIMMessage.h>#include <Pegasus/Common/OperationContext.h>#include <Pegasus/Common/Tracer.h>#include <Pegasus/Common/StatisticalData.h>#include <Pegasus/Common/Logger.h>#include <Pegasus/Common/MessageLoader.h> //l10n#include <Pegasus/Common/Constants.h>#include <Pegasus/Common/FileSystem.h>#include <Pegasus/Common/ArrayInternal.h>#include <Pegasus/Config/ConfigManager.h>#include <Pegasus/ProviderManager2/ProviderName.h>#include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>#include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>PEGASUS_USING_STD;PEGASUS_NAMESPACE_BEGINint JMPIProviderManager::trace=0;#ifdef PEGASUS_DEBUG#define DDD(x) if (JMPIProviderManager::trace) x;#else#define DDD(x)#endif// request->localOnly is replaced with JMPI_LOCALONLY for getInstance () and enumerateInstances ()#define JMPI_LOCALONLY false/* Fix for 4092 */// request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS for getInstance (),// setInstance (), enumerateInstances (), associators (), and references ()#define JMPI_INCLUDE_QUALIFIERS false#include "Convert.h"void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc){ // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes // javap -s -p JMPI_TestPropertyTypes static const char *methodNames[][3] = { // CIMProvider // cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java {"snia 2.0","initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"}, {"snia 2.0","cleanup","()V"}, // InstanceProvider // cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"}, {"pegasus 2.4","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"}, /* Begin Fix for 4189 */ {"pegasus 2.5","enumerateInstances","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;"}, /* End Fix for 4189 */ {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"}, {"pegasus 2.4","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;"}, {"pegasus 2.5","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"}, {"snia 2.0","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"}, {"pegasus 2.4","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"}, /* Begin Fix for 4238 */ {"pegasus 2.5","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"}, /* End Fix for 4238 */ {"snia 2.0","createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"}, {"snia 2.0","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"}, {"pegasus 2.4","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"}, {"snia 2.0","deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"}, {"snia 2.0","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"}, {"pegasus 2.4","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"}, {"pegasus 2.5","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"}, // MethodProvider // cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java {"snia 2.0","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"}, {"pegasus 2.4","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;"}, // PropertyProvider // cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/PropertyProvider.java {"snia 2.0","getPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"}, {"snia 2.0","setPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"}, // AssociatorProvider // cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/AssociatorProvider.java {"snia 2.0","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"}, {"pegasus 2.4","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"}, {"snia 2.0","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"}, {"pegasus 2.4","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"}, {"snia 2.0","references","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"}, {"pegasus 2.4","references","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"}, {"snia 2.0","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"}, {"pegasus 2.4","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"}, // CIMProviderRouter // cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java // EventProvider // cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java // src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java {"snia 2.0","activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"}, {"snia 2.0","deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"}, // IndicationHandler // cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java // ProviderAdapter // cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java // JMPI_TestPropertyTypes {"JMPI_TestPropertyTypes","findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"}, {"JMPI_TestPropertyTypes","testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"} }; if (!env) { DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl)); return; } if (!jc) { DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl)); return; } for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++) { jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]); DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", "<<methodNames[i][1]<<", id = "<<PEGASUS_STD(hex)<<(long)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl)); env->ExceptionClear(); } env->ExceptionClear();}voiddebugIntrospectJavaObject (JNIEnv *env, jobject jInst){ jclass jInstClass = env->GetObjectClass(jInst); jclass jInstSuperClass = env->GetSuperclass(jInstClass); jmethodID jmidGetDeclaredMethods = env->GetMethodID(jInstClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); if (!jmidGetDeclaredMethods) { env->ExceptionClear(); jmidGetDeclaredMethods = env->GetMethodID(jInstSuperClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;"); } if (jmidGetDeclaredMethods) { jobjectArray jarrayDeclaredMethods = (jobjectArray)env->CallObjectMethod(jInstClass, jmidGetDeclaredMethods); if (jarrayDeclaredMethods) { for (int i = 0, iLen = env->GetArrayLength (jarrayDeclaredMethods); i < iLen; i++) { JMPIjvm::checkException(env); jobject jDeclaredMethod = env->GetObjectArrayElement (jarrayDeclaredMethods, i); jclass jDeclaredMethodClass = env->GetObjectClass (jDeclaredMethod); JMPIjvm::checkException(env); jmethodID jmidToString = env->GetMethodID (jDeclaredMethodClass, "toString", "()Ljava/lang/String;"); jstring jstringResult = (jstring)env->CallObjectMethod (jDeclaredMethod, jmidToString); const char *pszResult = env->GetStringUTFChars(jstringResult, 0); PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: "<<pszResult<<PEGASUS_STD(endl); env->ReleaseStringUTFChars (jstringResult, pszResult); } } } env->ExceptionClear();}voiddebugDumpJavaObject (JNIEnv *env, jobject jInst){ jclass jInstClass = env->GetObjectClass(jInst); jclass jInstSuperClass = env->GetSuperclass(jInstClass); jmethodID jmidToString1 = env->GetMethodID(jInstClass, "toString", "()Ljava/lang/String;"); jmethodID jmidToString2 = env->GetMethodID(jInstSuperClass, "toString", "()Ljava/lang/String;"); if (!jmidToString1 || !jmidToString2) { env->ExceptionClear(); return; } jstring jstringResult1 = (jstring)env->CallObjectMethod(jInstClass, jmidToString1); jstring jstringResult2 = (jstring)env->CallObjectMethod(jInstSuperClass, jmidToString2); jstring jstringResult3 = (jstring)env->CallObjectMethod(jInst, jmidToString1); const char *pszResult1 = env->GetStringUTFChars(jstringResult1, 0); const char *pszResult2 = env->GetStringUTFChars(jstringResult2, 0); const char *pszResult3 = env->GetStringUTFChars(jstringResult3, 0); jmethodID jmidCInst = env->GetMethodID(env->GetObjectClass(jInst),JMPIjvm::jv.instanceMethodNames[22].methodName, JMPIjvm::jv.instanceMethodNames[22].signature); PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: jInstClass = "<<jInstClass<<", jInstSuperClass = "<<jInstSuperClass<<", jClassShouldBe = "<<JMPIjvm::jv.classRefs[18]<<", jmidCInst = "<<jmidCInst<<PEGASUS_STD(endl); PEGASUS_STD(cout)<<"pszResult1 = "<<pszResult1<<PEGASUS_STD(endl); PEGASUS_STD(cout)<<"pszResult2 = "<<pszResult2<<PEGASUS_STD(endl); PEGASUS_STD(cout)<<"pszResult3 = "<<pszResult3<<PEGASUS_STD(endl); env->ReleaseStringUTFChars (jstringResult1, pszResult1); env->ReleaseStringUTFChars (jstringResult2, pszResult2); env->ReleaseStringUTFChars (jstringResult3, pszResult3); env->ExceptionClear();}bool JMPIProviderManager::getInterfaceType (ProviderIdContainer pidc, String& interfaceType, String& interfaceVersion){///CIMInstance ciProvider = pidc.getProvider (); CIMInstance ciProviderModule = pidc.getModule (); Uint32 idx; bool fRet = true;///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProvider = "<<ciProvider.getPath ().toString ()<<PEGASUS_STD(endl);///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProviderModule = "<<ciProviderModule.getPath ().toString ()<<PEGASUS_STD(endl); idx = ciProviderModule.findProperty ("InterfaceType"); if (idx != PEG_NOT_FOUND) { CIMValue itValue; itValue = ciProviderModule.getProperty (idx).getValue (); itValue.get (interfaceType); DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceType = "<<interfaceType<<PEGASUS_STD(endl)); } else { fRet = false; } idx = ciProviderModule.findProperty ("InterfaceVersion"); if (idx != PEG_NOT_FOUND) { CIMValue itValue; itValue = ciProviderModule.getProperty (idx).getValue (); itValue.get (interfaceVersion); DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceVersion = "<<interfaceVersion<<PEGASUS_STD(endl)); } else { fRet = false; } return fRet;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -