version 1.78, 2008/01/30 12:06:31
|
version 1.79, 2008/03/17 08:45:37
|
|
|
#include <Pegasus/Common/CIMObjectPath.h> | #include <Pegasus/Common/CIMObjectPath.h> |
#include <Pegasus/Common/CIMProperty.h> | #include <Pegasus/Common/CIMProperty.h> |
#include <Pegasus/Common/OperationContext.h> | #include <Pegasus/Common/OperationContext.h> |
|
#include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Provider/CIMOMHandle.h> | #include <Pegasus/Provider/CIMOMHandle.h> |
#include <Pegasus/Client/CIMClient.h> | #include <Pegasus/Client/CIMClient.h> |
#include <Pegasus/ProviderManager2/JMPI/JMPIProviderManager.h> | #include <Pegasus/ProviderManager2/JMPI/JMPIProviderManager.h> |
|
|
| |
JavaVM *JMPIjvm::jvm=NULL; | JavaVM *JMPIjvm::jvm=NULL; |
JvmVector JMPIjvm::jv; | JvmVector JMPIjvm::jv; |
int JMPIjvm::trace=0; |
|
|
|
#ifdef PEGASUS_DEBUG |
|
#define DDD(x) if (JMPIjvm::trace) x; |
|
#else |
|
#define DDD(x) |
|
#endif |
|
| |
#include "Convert.h" | #include "Convert.h" |
| |
|
|
| |
jclass JMPIjvm::getGlobalClassRef(JNIEnv *env, const char* name) | jclass JMPIjvm::getGlobalClassRef(JNIEnv *env, const char* name) |
{ | { |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIjvm::getGlobalClassRef"); |
|
|
jclass localRefCls = env->FindClass(name); | jclass localRefCls = env->FindClass(name); |
| |
if (localRefCls == NULL) | if (localRefCls == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"No local Class reference found. (localRefCls==NULL)"); |
|
PEG_METHOD_EXIT(); |
return JNI_FALSE; | return JNI_FALSE; |
|
} |
|
|
| |
jclass globalRefCls = (jclass) env->NewGlobalRef(localRefCls); | jclass globalRefCls = (jclass) env->NewGlobalRef(localRefCls); |
| |
|
|
jmidToString); | jmidToString); |
const char *pszResult = env->GetStringUTFChars(jstringResult, 0); | const char *pszResult = env->GetStringUTFChars(jstringResult, 0); |
| |
DDD(cout <<"--- JMPIjvm::getGlobalClassRef: globalRefCls = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)globalRefCls |
"globalRefCls = %X, name = %s, pszResult = %s", |
<<dec<<", name = "<<name |
(long)globalRefCls,name,pszResult)); |
<<", pszResult = "<<pszResult |
|
<<endl); |
|
| |
env->ReleaseStringUTFChars (jstringResult, pszResult); | env->ReleaseStringUTFChars (jstringResult, pszResult); |
#else | #else |
DDD(cout<<"--- JMPIjvm::getGlobalClassRef: globalRefCls = " |
|
<<hex<<(long)globalRefCls |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<dec<<", name = "<<name |
"globalRefCls = %X, name = %s",(long)globalRefCls,name)); |
<<endl); |
|
#endif | #endif |
| |
env->DeleteLocalRef(localRefCls); | env->DeleteLocalRef(localRefCls); |
| |
|
PEG_METHOD_EXIT(); |
return globalRefCls; | return globalRefCls; |
} | } |
| |
|
|
| |
int JMPIjvm::cacheIDs(JNIEnv *env) | int JMPIjvm::cacheIDs(JNIEnv *env) |
{ | { |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIjvm::cacheIDs"); |
|
|
if (methodInitDone == 1) | if (methodInitDone == 1) |
|
{ |
|
PEG_METHOD_EXIT(); |
return JNI_TRUE; | return JNI_TRUE; |
|
} |
|
|
if (methodInitDone == -1) | if (methodInitDone == -1) |
|
{ |
|
PEG_METHOD_EXIT(); |
return JNI_FALSE; | return JNI_FALSE; |
|
} |
DDD(cout<<"--- JMPIjvm::cacheIDs(): enter"<<endl); |
|
| |
methodInitDone = -1; | methodInitDone = -1; |
| |
|
|
{ | { |
if ((classRefs[i] = getGlobalClassRef(env,classNames[i])) == NULL) | if ((classRefs[i] = getGlobalClassRef(env,classNames[i])) == NULL) |
{ | { |
DDD(cout<<"--- JMPIjvm::cacheIDs(): Error: " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Count not find global class ref for " |
"Error: Count not find global class ref for %s",classNames[i])); |
<<classNames[i] |
|
<<endl); |
|
| |
|
PEG_METHOD_EXIT(); |
return JNI_FALSE; | return JNI_FALSE; |
} | } |
} | } |
|
|
instanceMethodNames[j].signature); | instanceMethodNames[j].signature); |
if (instanceMethodIDs[j] == NULL) | if (instanceMethodIDs[j] == NULL) |
{ | { |
DDD(cout<<"--- JMPIjvm::cacheIDs(): " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Error could not get method id for " |
"Error: Could not get instance method id for %s:%s", |
<<classNames[instanceMethodNames[j].clsIndex] |
classNames[instanceMethodNames[j].clsIndex], |
<<": "<<instanceMethodNames[j].methodName |
instanceMethodNames[j].methodName)); |
<<endl); |
|
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
} | } |
|
|
| |
if (staticMethodIDs[k] == NULL) | if (staticMethodIDs[k] == NULL) |
{ | { |
DDD(cout<<"--- JMPIjvm::cacheIDs(): " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Error could not get method id for " |
"Error: Could not get static method id for %s:%s", |
<<classNames[staticMethodNames[k].clsIndex] |
classNames[staticMethodNames[k].clsIndex], |
<<": "<<staticMethodNames[k].methodName |
staticMethodNames[k].methodName)); |
<<endl); |
|
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
} | } |
| |
DDD(cout<<"--- JMPIjvm::cacheIDs(): exit"<<endl); |
|
|
|
jv.env = env; | jv.env = env; |
jv.classRefs = classRefs; | jv.classRefs = classRefs; |
jv.instMethodIDs = instanceMethodIDs; | jv.instMethodIDs = instanceMethodIDs; |
|
|
| |
methodInitDone = 1; | methodInitDone = 1; |
| |
|
PEG_METHOD_EXIT(); |
return JNI_TRUE; | return JNI_TRUE; |
} | } |
| |
|
|
| |
int JMPIjvm::destroyJVM () | int JMPIjvm::destroyJVM () |
{ | { |
DDD(cerr<<"--- JPIjvm::destroyJVM()"<<endl); |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JPIjvm::destroyJVM"); |
| |
#ifdef JAVA_DESTROY_VM_WORKS | #ifdef JAVA_DESTROY_VM_WORKS |
if (jvm!= NULL) | if (jvm!= NULL) |
|
|
| |
jvm = NULL; | jvm = NULL; |
| |
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
#endif | #endif |
| |
|
PEG_METHOD_EXIT(); |
return -1; | return -1; |
} | } |
| |
|
|
| |
int JMPIjvm::initJVM () | int JMPIjvm::initJVM () |
{ | { |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JPIjvm::initJVM"); |
|
|
AutoMutex lock (_initMutex); | AutoMutex lock (_initMutex); |
| |
if (jvm != NULL) | if (jvm != NULL) |
|
|
}; | }; |
std::ostringstream oss; | std::ostringstream oss; |
| |
#ifdef PEGASUS_DEBUG |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
if (getenv("PEGASUS_JMPI_TRACE")) |
"Start to initialize the JVM."); |
JMPIjvm::trace = 1; |
|
else |
|
JMPIjvm::trace = 0; |
|
#else |
|
JMPIjvm::trace = 0; |
|
#endif |
|
|
|
DDD(cout << "--- JMPIjvm::initJVM()" << endl); |
|
| |
jv.initRc = 0; | jv.initRc = 0; |
| |
|
|
{ | { |
jv.initRc = 1; | jv.initRc = 1; |
| |
DDD(cerr << "--- JMPIjvm::initJVM(): " |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
"No CLASSPATH environment variable found" |
"No CLASSPATH environment variable found."); |
<< endl); |
|
|
PEG_METHOD_EXIT(); |
| |
throw PEGASUS_CIM_EXCEPTION_L( | throw PEGASUS_CIM_EXCEPTION_L( |
CIM_ERR_FAILED, | CIM_ERR_FAILED, |
|
|
stringValue=stringValues.substr(posStart,posEnd-posStart+1); | stringValue=stringValues.substr(posStart,posEnd-posStart+1); |
} | } |
| |
DDD(cout<<"--- JMPIjvm::initJVM(): fCommaFound = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
<<fCommaFound << ", posStart = " |
"fCommaFound = %d, posStart = %d, " |
<<posStart << ", posComma = "<< posComma |
"posComma = %d, posEnd = %d", |
<< ", posEnd = " << posEnd |
fCommaFound,posStart,posComma,posEnd)); |
<< "" << endl); |
|
| |
maxoption++; | maxoption++; |
| |
|
|
| |
JNIoptions.append (oss.str ()); | JNIoptions.append (oss.str ()); |
| |
DDD(cout << "--- JMPIjvm::initJVM(): " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
<< pEnvOption->pszEnvName |
"%s found! Specifying \"%s\"", |
<< " found! Specifying \"" |
pEnvOption->pszEnvName, (const char*)oss.str().c_str())); |
<< oss.str () << "\"" |
|
<< endl); |
|
} | } |
} | } |
else | else |
|
|
| |
JNIoptions.append (oss.str ()); | JNIoptions.append (oss.str ()); |
| |
DDD(cout << "--- JMPIjvm::initJVM(): " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< pEnvOption->pszEnvName |
"%s found! Specifying \"%s\"", |
<< " found! Specifying \"" |
pEnvOption->pszEnvName, (const char*)oss.str().c_str())); |
<< oss.str() << "\"" |
|
<< endl); |
|
} | } |
} | } |
} | } |
|
|
{ | { |
jv.initRc = 1; | jv.initRc = 1; |
| |
DDD(cerr << "--- JMPIjvm::initJVM(): Could not allocate " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<< maxoption << " structures of size " |
"Could not allocate %d structures of size %d.", |
<< sizeof (JavaVMOption) << endl); |
maxoption,sizeof (JavaVMOption))); |
| |
|
PEG_METHOD_EXIT(); |
return -1; | return -1; |
} | } |
| |
|
|
{ | { |
poptions[i].optionString = (char *)JNIoptions[i].c_str (); | poptions[i].optionString = (char *)JNIoptions[i].c_str (); |
| |
DDD(cout << "--- JMPIjvm::initJVM(): Setting option " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
<< i << " to \"" << poptions[i].optionString |
"Setting option %d to \"%s\".", |
<< "\"" << endl); |
i ,poptions[i].optionString)); |
} | } |
| |
vm_args.version = JNI_VERSION_1_2; | vm_args.version = JNI_VERSION_1_2; |
|
|
{ | { |
jv.initRc = 1; | jv.initRc = 1; |
| |
DDD(cerr << "--- JMPIjvm::initJVM(): Can not create Java VM" |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
<<endl); |
"Can not create Java VM !"); |
| |
|
PEG_METHOD_EXIT(); |
return -1; | return -1; |
} | } |
| |
|
|
jvm = NULL; | jvm = NULL; |
#endif | #endif |
| |
|
PEG_METHOD_EXIT(); |
return -1; | return -1; |
} | } |
| |
jv.initRc = 1; | jv.initRc = 1; |
jv.jvm = jvm; | jv.jvm = jvm; |
| |
|
PEG_METHOD_EXIT(); |
return res; | return res; |
} | } |
| |
|
|
const char *pszProviderName, | const char *pszProviderName, |
jclass *pjClass) | jclass *pjClass) |
{ | { |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIjvm::getProvider"); |
|
|
jobject jProviderInstance = 0; | jobject jProviderInstance = 0; |
jclass jClassLoaded = 0; | jclass jClassLoaded = 0; |
jmethodID jId = 0; | jmethodID jId = 0; |
jobject jProviderInstanceLocal = 0; | jobject jProviderInstanceLocal = 0; |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jarName = "<<jarName |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<", className = "<<className |
"jarName = %s, className = %s, pszProviderName = %s, pjClass = %X", |
<<", pszProviderName = "<<pszProviderName |
jarName.getCString(),className.getCString(), |
<<", pjClass = " |
pszProviderName,(long)pjClass)); |
<<hex<<(long)pjClass |
|
<<dec<<endl); |
|
| |
// CASE #1 | // CASE #1 |
// className has been loaded previously. | // className has been loaded previously. |
|
|
_objectTable.lookup (className, jProviderInstance); | _objectTable.lookup (className, jProviderInstance); |
_classTable.lookup (className, jClassLoaded); | _classTable.lookup (className, jClassLoaded); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jProviderInstance = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jProviderInstance |
"jProviderInstance = %X, jClassLoaded = %X", |
<<", jClassLoaded = " |
(long)jProviderInstance,(long)jClassLoaded)); |
<<(long)jClassLoaded<<dec |
|
<<endl); |
|
| |
if ( jProviderInstance | if ( jProviderInstance |
&& jClassLoaded | && jClassLoaded |
|
|
{ | { |
*pjClass = jClassLoaded; | *pjClass = jClassLoaded; |
} | } |
|
PEG_METHOD_EXIT(); |
return jProviderInstance; | return jProviderInstance; |
} | } |
| |
|
|
jClassLoaded = getGlobalClassRef (env, | jClassLoaded = getGlobalClassRef (env, |
(const char*)className.getCString ()); | (const char*)className.getCString ()); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jClassLoaded = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jClassLoaded |
"jClassLoaded = %X",(long)jClassLoaded)); |
<<dec<<endl); |
|
| |
if (env->ExceptionCheck ()) | if (env->ExceptionCheck ()) |
{ | { |
|
|
fixedClassName = className; | fixedClassName = className; |
} | } |
| |
DDD(cerr<<"--- JMPIjvm::getProvider: fixedClassName = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<fixedClassName<<endl); |
"fixedClassName = %s",fixedClassName.getCString())); |
| |
jJarName = env->NewStringUTF((const char*)jarName.getCString()); | jJarName = env->NewStringUTF((const char*)jarName.getCString()); |
jClassName = env->NewStringUTF((const char*)fixedClassName.getCString()); | jClassName = env->NewStringUTF((const char*)fixedClassName.getCString()); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jJarName = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jJarName<<dec |
"jJarName = %X, jClassName = %X", |
<<endl); |
(long)jJarName,(long)jClassName)); |
DDD(cout<<"--- JMPIjvm::getProvider: jClassName = " |
|
<<hex<<(long)jClassName |
|
<<dec |
|
<<endl); |
|
| |
jClassLoadedLocal = (jclass)env->CallStaticObjectMethod( | jClassLoadedLocal = (jclass)env->CallStaticObjectMethod( |
JMPIjvm::jv.JarClassLoaderClassRef, | JMPIjvm::jv.JarClassLoaderClassRef, |
|
|
jJarName, | jJarName, |
jClassName); | jClassName); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jClassLoadedLocal = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jClassLoadedLocal |
"jClassLoadedLocal = %X",(long)jClassLoadedLocal)); |
<<dec |
|
<<endl); |
|
| |
if (env->ExceptionCheck ()) | if (env->ExceptionCheck ()) |
{ | { |
DDD (env->ExceptionDescribe ()); |
env->ExceptionDescribe(); |
| |
DDD(cerr<<"--- Unable to instantiate provider " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<pszProviderName<<endl); |
"Unable to instantiate provider %s: " |
|
"Can not load Java class %s from jar %s.", |
|
pszProviderName, |
|
(const char*)fixedClassName.getCString(), |
|
(const char*)jarName.getCString())); |
| |
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
| |
jClassLoaded = (jclass)env->NewGlobalRef (jClassLoadedLocal); | jClassLoaded = (jclass)env->NewGlobalRef (jClassLoadedLocal); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jClassLoaded = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jClassLoaded<<dec |
"jClassLoaded = %X",(long)jClassLoaded)); |
<<endl); |
|
| |
env->DeleteLocalRef (jClassLoadedLocal); | env->DeleteLocalRef (jClassLoadedLocal); |
} | } |
|
|
| |
if (!jClassLoaded) | if (!jClassLoaded) |
{ | { |
DDD(cerr<<"--- Unable to instantiate provider " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<pszProviderName<<endl); |
"Unable to instantiate provider %s: " |
|
"Can not load Java class.",pszProviderName)); |
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
| |
jId = env->GetMethodID (jClassLoaded, |
jId = env->GetMethodID (jClassLoaded,"<init>","()V"); |
"<init>", |
|
"()V"); |
|
| |
DDD(cout<<"--- JMPIjvm::getProvider: jId = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jId<<dec |
"GetMethodID() jID = %X ",(long)jId)); |
<<endl); |
|
| |
jProviderInstanceLocal = env->NewObject (jClassLoaded, | jProviderInstanceLocal = env->NewObject (jClassLoaded, |
jId); | jId); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jProviderInstanceLocal = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jProviderInstanceLocal<<dec |
"NewObject() jProviderInstanceLocal = %X ", |
<<endl); |
(long)jProviderInstanceLocal)); |
| |
if (!jProviderInstanceLocal) | if (!jProviderInstanceLocal) |
{ | { |
DDD(cerr<<"--- Unable to instantiate provider " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<pszProviderName<<endl); |
"Unable to instantiate provider %s: " |
|
"No new Java object of provider.",pszProviderName)); |
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
| |
jProviderInstance = (jobject)env->NewGlobalRef (jProviderInstanceLocal); | jProviderInstance = (jobject)env->NewGlobalRef (jProviderInstanceLocal); |
| |
DDD(cout<<"--- JMPIjvm::getProvider: jProviderInstance = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)jProviderInstance<<dec<<endl); |
"NewGlobalRef() jProviderInstance = %X ", |
|
(long)jProviderInstance)); |
| |
if (!jProviderInstance) | if (!jProviderInstance) |
{ | { |
DDD(cerr<<"--- Unable to instantiate provider " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<pszProviderName<<endl); |
"Unable to instantiate provider %s: " |
|
"No global reference to provider object.",pszProviderName)); |
|
PEG_METHOD_EXIT(); |
return 0; | return 0; |
} | } |
| |
_classTable.insert (className, jClassLoaded); | _classTable.insert (className, jClassLoaded); |
_objectTable.insert (className, jProviderInstance); | _objectTable.insert (className, jProviderInstance); |
| |
|
PEG_METHOD_EXIT(); |
return jProviderInstance; | return jProviderInstance; |
} | } |
| |
|
|
jobject gProv = NULL; | jobject gProv = NULL; |
jclass scls = NULL; | jclass scls = NULL; |
| |
DDD(cout<<"--- JMPIjvm::getProvider: cn = "<<cn<<", cls = " |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIjvm::getProvider"); |
<<cls<<endl); |
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"cn = %s, cls = %X",cn,(long)cls)); |
| |
_objectTable.lookup(cln,gProv); | _objectTable.lookup(cln,gProv); |
_classTable.lookup(cln,scls); | _classTable.lookup(cln,scls); |
DDD(cout<<"--- JMPIjvm::getProvider: gProv = " |
|
<<hex<<(long)gProv<<", scls = "<<(long)scls |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<dec<<endl); |
"gProv = %X, scls = %X",(long)gProv,(long)scls)); |
| |
if (gProv) | if (gProv) |
{ | { |
|
|
scls = getGlobalClassRef(env,cn); | scls = getGlobalClassRef(env,cn); |
if (env->ExceptionCheck()) | if (env->ExceptionCheck()) |
{ | { |
DDD(cerr<<"--- JMPIjvm::getProvider: Provider " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<cn<<" not found"<<endl); |
"Provider %s not found: No global reference.",cn)); |
DDD(env->ExceptionDescribe()); |
PEG_METHOD_EXIT(); |
|
|
return NULL; | return NULL; |
} | } |
*cls = scls; | *cls = scls; |
| |
if (scls) | if (scls) |
{ | { |
DDD(cout<<"--- JMPIjvm::getProvider: scls = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)scls |
"Inserting global reference %X into class table.",scls)); |
<<dec<<endl); |
|
_classTable.insert(cln,scls); | _classTable.insert(cln,scls); |
} | } |
| |
|
|
gProv = (jobject)env->NewGlobalRef(lProv); | gProv = (jobject)env->NewGlobalRef(lProv); |
if (env->ExceptionCheck()) | if (env->ExceptionCheck()) |
{ | { |
DDD(cerr<<"--- Unable to instantiate provider "<<cn |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<endl); |
"Unable to instantiate provider %s.",cn)); |
|
PEG_METHOD_EXIT(); |
return NULL; | return NULL; |
} | } |
| |
if (gProv) | if (gProv) |
{ | { |
DDD(cout<<"--- JMPIjvm::getProvider: gProv = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<<hex<<(long)gProv |
"Inserting provider reference %X into object table.",gProv)); |
<<dec<<endl); |
|
_objectTable.insert(cln,gProv); | _objectTable.insert(cln,gProv); |
} | } |
| |
|
PEG_METHOD_EXIT(); |
return gProv; | return gProv; |
} | } |
| |
|
|
jobjectArray stackTrace = 0; | jobjectArray stackTrace = 0; |
String rc; | String rc; |
| |
DDD (cerr << "getExceptionInfo: err = " |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"getExceptionInfo"); |
<< hex |
|
<< (jlong)err |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< dec |
"err = %X ",(jlong)err)); |
<< endl); |
|
| |
if (!err) | if (!err) |
|
{ |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
|
} |
|
|
| |
stackTrace = (jobjectArray)env->CallObjectMethod( | stackTrace = (jobjectArray)env->CallObjectMethod( |
err, | err, |
JMPIjvm::jv.ThrowableGetStackTrace); | JMPIjvm::jv.ThrowableGetStackTrace); |
| |
DDD (cerr << "getExceptionInfo: stackTrace = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"stackTrace = %X ",(jlong)stackTrace)); |
<< (jlong)stackTrace |
|
<< dec |
|
<< endl); |
|
| |
if (!stackTrace) | if (!stackTrace) |
|
{ |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
|
} |
| |
DDD (cerr << "getExceptionInfo: stackTrace length = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< env->GetArrayLength (stackTrace) |
"stackTrace length = %d",(jlong)env->GetArrayLength(stackTrace))); |
<< endl); |
|
| |
jobject jFirstST = 0; | jobject jFirstST = 0; |
jstring jClass = 0; | jstring jClass = 0; |
|
|
| |
jFirstST = env->GetObjectArrayElement (stackTrace, 0); | jFirstST = env->GetObjectArrayElement (stackTrace, 0); |
| |
DDD (cerr << "getExceptionInfo: jFirstST = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"jFirstST = %X",(jlong)jFirstST)); |
<< (jlong)jFirstST |
|
<< dec |
|
<< endl); |
|
| |
if (!jFirstST) | if (!jFirstST) |
|
{ |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
|
} |
| |
jClass = (jstring)env->CallObjectMethod( | jClass = (jstring)env->CallObjectMethod( |
jFirstST, | jFirstST, |
|
|
jFirstST, | jFirstST, |
JMPIjvm::jv.StackTraceElementGetLineNumber); | JMPIjvm::jv.StackTraceElementGetLineNumber); |
| |
DDD (cerr << "getExceptionInfo: jClass = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"jClass = %X, jFile = %X, jMethod = %X, jLine = %X", |
<< (jlong)jClass |
(jlong)jClass,(jlong)jFile,(jlong)jMethod,jLine)); |
<< ", jFile = " |
|
<< (jlong)jFile |
|
<< ", jMethod = " |
|
<< (jlong)jMethod |
|
<< ", jLine = " |
|
<< jLine |
|
<< dec |
|
<< endl); |
|
| |
const char *pszClass = 0; | const char *pszClass = 0; |
const char *pszFile = 0; | const char *pszFile = 0; |
|
|
env->ReleaseStringUTFChars (jMethod, pszMethod); | env->ReleaseStringUTFChars (jMethod, pszMethod); |
} | } |
| |
DDD (cerr << "getExceptionInfo: oss = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< oss.str () |
"oss = %s",(const char*)oss.str().c_str())); |
<< endl); |
|
| |
rc = oss.str ().c_str (); | rc = oss.str ().c_str (); |
| |
|
|
jthrowable err = env->ExceptionOccurred (); | jthrowable err = env->ExceptionOccurred (); |
String rc; | String rc; |
| |
DDD (cerr << "getExceptionInfo: err = " |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"getExceptionInfo"); |
<< hex |
|
<< (jlong)err |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< dec |
"err = %X ",(jlong)err)); |
<< endl); |
|
| |
if (!err) | if (!err) |
|
{ |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
|
} |
|
|
| |
// ByteArrayOutputStream baos = new ByteArrayOutputStream (); | // ByteArrayOutputStream baos = new ByteArrayOutputStream (); |
// PrintStream ps = new PrintStream (baos); | // PrintStream ps = new PrintStream (baos); |
|
|
jBAOS = env->NewObject (JMPIjvm::jv.ByteArrayOutputStreamClassRef, | jBAOS = env->NewObject (JMPIjvm::jv.ByteArrayOutputStreamClassRef, |
JMPIjvm::jv.ByteArrayOutputStreamNew); | JMPIjvm::jv.ByteArrayOutputStreamNew); |
| |
DDD (cerr << "getExceptionInfo: jBAOS = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"jBAOS = %X ",(jlong)jBAOS)); |
<< (jlong)jBAOS |
|
<< dec |
|
<< endl); |
|
| |
if (!jBAOS) | if (!jBAOS) |
{ | { |
DDD(env->ExceptionDescribe ()); |
env->ExceptionDescribe (); |
| |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
} | } |
| |
|
|
JMPIjvm::jv.PrintStreamNewOb, | JMPIjvm::jv.PrintStreamNewOb, |
jBAOS); | jBAOS); |
| |
DDD (cerr << "getExceptionInfo: jPS = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"jPS = %X ",(jlong)jPS)); |
<< (jlong)jPS |
|
<< dec |
|
<< endl); |
|
| |
if (!jPS) | if (!jPS) |
|
{ |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
|
} |
| |
env->CallVoidMethod (err, | env->CallVoidMethod (err, |
JMPIjvm::jv.ThrowablePrintStackTrace, | JMPIjvm::jv.ThrowablePrintStackTrace, |
|
|
jBAOS, | jBAOS, |
JMPIjvm::jv.ByteArrayOutputStreamToString); | JMPIjvm::jv.ByteArrayOutputStreamToString); |
| |
DDD (cerr << "getExceptionInfo: jST = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< hex |
"jST = %X ",(jlong)jST)); |
<< (jlong)jST |
|
<< dec |
|
<< endl); |
|
| |
const char *pszST = 0; | const char *pszST = 0; |
| |
|
|
| |
if (pszST) | if (pszST) |
{ | { |
DDD (cerr << "getExceptionInfo: pszST = " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< pszST |
"pszST = %s ",pszST)); |
<< endl); |
|
| |
rc = pszST; | rc = pszST; |
| |
env->ReleaseStringUTFChars (jST, pszST); | env->ReleaseStringUTFChars (jST, pszST); |
} | } |
| |
|
PEG_METHOD_EXIT(); |
return rc; | return rc; |
} | } |
| |
|
|
| |
void JMPIjvm::checkException (JNIEnv *env) | void JMPIjvm::checkException (JNIEnv *env) |
{ | { |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIjvm::checkException"); |
|
|
if (!env->ExceptionCheck ()) | if (!env->ExceptionCheck ()) |
|
{ |
|
PEG_METHOD_EXIT(); |
return; | return; |
|
} |
| |
jstring jMsg = NULL, | jstring jMsg = NULL, |
jId = NULL; | jId = NULL; |
|
|
String id; | String id; |
jthrowable err = env->ExceptionOccurred (); | jthrowable err = env->ExceptionOccurred (); |
| |
///DDD (cerr << "JMPIjvm::checkException: err = " |
// PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
/// << hex |
// "err = %X ",(jlong)err)); |
/// << (jlong)err |
|
/// << dec |
|
/// << endl); |
|
| |
if (!err) | if (!err) |
|
{ |
|
PEG_METHOD_EXIT(); |
return; | return; |
|
} |
| |
DDD(cerr<<"--- Provider caused an exception!" |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<endl); |
"Provider caused an exception!"); |
| |
DDD(env->ExceptionDescribe ()); |
env->ExceptionDescribe (); |
| |
if (env->IsInstanceOf (err, JMPIjvm::jv.CIMExceptionClassRef)) | if (env->IsInstanceOf (err, JMPIjvm::jv.CIMExceptionClassRef)) |
{ | { |
|
|
env->ReleaseStringUTFChars (jMsg, cp); | env->ReleaseStringUTFChars (jMsg, cp); |
} | } |
| |
DDD(cerr<<"--- throwing Pegasus exception: " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
<<code<<" "<<id<<" ("<<msg<<")" |
"throwing Pegasus exception: %d %s (%s)", |
<<endl); |
code,(const char*)id.getCString(),(const char*)msg.getCString())); |
| |
|
PEG_METHOD_EXIT(); |
throw CIMException ((CIMStatusCode)code, id+" ("+msg+")"); | throw CIMException ((CIMStatusCode)code, id+" ("+msg+")"); |
} | } |
else | else |
|
|
| |
env->ExceptionClear (); | env->ExceptionClear (); |
| |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Java caused an exception: %s",(const char*)info.getCString())); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
throw PEGASUS_CIM_EXCEPTION_L( | throw PEGASUS_CIM_EXCEPTION_L( |
CIM_ERR_FAILED, | CIM_ERR_FAILED, |
MessageLoaderParms( | MessageLoaderParms( |
|
|
| |
for (Uint32 i = 0; i < keyNames.size (); i++) | for (Uint32 i = 0; i < keyNames.size (); i++) |
{ | { |
DDD(cout << "finding key " << keyNames[i].getString () << endl); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"finding key %s ", |
|
(const char*)keyNames[i].getString().getCString())); |
| |
for (Uint32 j = 0; j < ci->getPropertyCount (); j++) | for (Uint32 j = 0; j < ci->getPropertyCount (); j++) |
{ | { |
|
|
| |
if (cp.getName () == keyNames[i]) | if (cp.getName () == keyNames[i]) |
{ | { |
DDD(cout << "adding key (" << j << ") " |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
<< keyNames[i].getString () << endl); |
"adding key (%d) %s ", |
|
(const char*)keyNames[i].getString().getCString())); |
| |
CIMProperty *cpRef = new CIMProperty (cp); | CIMProperty *cpRef = new CIMProperty (cp); |
jlong jCpRef = DEBUG_ConvertCToJava (CIMProperty*, jlong, cpRef); | jlong jCpRef = DEBUG_ConvertCToJava (CIMProperty*, jlong, cpRef); |
|
|
CIMObjectPath ref (ind->getPath ()); | CIMObjectPath ref (ind->getPath ()); |
| |
ref.setNameSpace (ns); | ref.setNameSpace (ns); |
DDD(cerr<<"--- Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent () ref = " |
|
<<ref.toString ()<<endl); |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
DDD(cerr<<"--- Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent () ind = " |
"Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent(): ref = %s", |
<<ind->getPath ().toString ()<<endl); |
(const char*)ref.toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
|
"Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent(): ind = %s", |
|
(const char*)ind->getPath().toString().getCString())); |
| |
ind->setPath (ref); | ind->setPath (ref); |
| |
DDD(cerr<<"--- Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent () ind = " |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
<<ind->getPath ().toString ()<<endl); |
"Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent(): ind = %s", |
|
(const char*)ind->getPath().toString().getCString())); |
| |
JMPIProviderManager::indProvRecord *prec = NULL; | JMPIProviderManager::indProvRecord *prec = NULL; |
String sPathString = ind->getPath ().toString (); | String sPathString = ind->getPath ().toString (); |
|
|
AutoMutex lock (JMPIProviderManager::mutexProvTab); | AutoMutex lock (JMPIProviderManager::mutexProvTab); |
| |
fResult = JMPIProviderManager::provTab.lookup (name, prec); | fResult = JMPIProviderManager::provTab.lookup (name, prec); |
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
DDD(cerr<<"--- Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent" |
"Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent(): " |
" () fResult = " |
"fResult = %d, name = %s", |
<<fResult<<", name = "<<name<<endl); |
fResult,(const char*)name.getCString())); |
} | } |
| |
if (fResult) | if (fResult) |
|
|
} | } |
else | else |
{ | { |
DDD (cerr<<"--- Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent" |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL2, |
" () provider name \"" |
"Java_org_pegasus_jmpi_CIMOMHandle__1deliverEvent(): " |
<<name<<"\" not found"<<endl); |
"provider name \"%s\" not found", |
|
(const char*)name.getCString())); |
} | } |
} | } |
| |
|
|
String query (pszQuery); | String query (pszQuery); |
| |
wql_stmt = new WQLSelectStatement (queryLanguage, query); | wql_stmt = new WQLSelectStatement (queryLanguage, query); |
DDD (cout<<"--- Java_org_pegasus_jmpi_SelectExp__1newSelectExp: wql_stmt = " |
|
<<hex<< (long)wql_stmt<<dec<<endl); |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
|
"Java_org_pegasus_jmpi_SelectExp__1newSelectExp: wql_stmt = %X", |
|
(long)wql_stmt)); |
| |
try | try |
{ | { |
|
|
} | } |
catch (const Exception &e) | catch (const Exception &e) |
{ | { |
cerr << "Java_org_pegasus_jmpi_SelectExp__1newSelectExp: Caught: " |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
<< e.getMessage () << endl; |
"Java_org_pegasus_jmpi_SelectExp__1newSelectExp: Caught: %s", |
|
(const char*)e.getMessage().getCString())); |
} | } |
| |
jEnv->ReleaseStringUTFChars (jQuery, pszQuery); | jEnv->ReleaseStringUTFChars (jQuery, pszQuery); |