version 1.13, 2004/07/05 15:47:25
|
version 1.80, 2009/12/15 11:39:40
|
|
|
//%2003//////////////////////////////////////////////////////////////////////// |
//%LICENSE//////////////////////////////////////////////////////////////// |
// | // |
// Copyright (c) 2000, 2001, 2002 BMC Software, Hewlett-Packard Development |
// Licensed to The Open Group (TOG) under one or more contributor license |
// Company, L. P., IBM Corp., The Open Group, Tivoli Systems. |
// agreements. Refer to the OpenPegasusNOTICE.txt file distributed with |
// Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L. P.; |
// this work for additional information regarding copyright ownership. |
// IBM Corp.; EMC Corporation, The Open Group. |
// Each contributor licenses this file to you under the OpenPegasus Open |
|
// Source License; you may not use this file except in compliance with the |
|
// License. |
// | // |
// Permission is hereby granted, free of charge, to any person obtaining a copy |
// Permission is hereby granted, free of charge, to any person obtaining a |
// of this software and associated documentation files (the "Software"), to |
// copy of this software and associated documentation files (the "Software"), |
// deal in the Software without restriction, including without limitation the |
// to deal in the Software without restriction, including without limitation |
// rights to use, copy, modify, merge, publish, distribute, sublicense, and/or |
// the rights to use, copy, modify, merge, publish, distribute, sublicense, |
// sell copies of the Software, and to permit persons to whom the Software is |
// and/or sell copies of the Software, and to permit persons to whom the |
// furnished to do so, subject to the following conditions: |
// Software is furnished to do so, subject to the following conditions: |
// | // |
// THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN |
// The above copyright notice and this permission notice shall be included |
// ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED |
// in all copies or substantial portions of the Software. |
// "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. |
|
// | // |
//============================================================================== |
// 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. |
// | // |
// Author: Adrian Schuur, schuur@de.ibm.com |
////////////////////////////////////////////////////////////////////////// |
// |
|
// Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135 |
|
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
|
|
#include "JMPIProviderManager.h" | #include "JMPIProviderManager.h" |
| |
#include "JMPIImpl.h" | #include "JMPIImpl.h" |
| |
#include <Pegasus/Common/CIMMessage.h> | #include <Pegasus/Common/CIMMessage.h> |
#include <Pegasus/Common/OperationContext.h> | #include <Pegasus/Common/OperationContext.h> |
#include <Pegasus/Common/Destroyer.h> |
|
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/StatisticalData.h> | #include <Pegasus/Common/StatisticalData.h> |
#include <Pegasus/Common/Logger.h> |
|
#include <Pegasus/Common/MessageLoader.h> //l10n | #include <Pegasus/Common/MessageLoader.h> //l10n |
#include <Pegasus/Common/Constants.h> | #include <Pegasus/Common/Constants.h> |
|
#include <Pegasus/Common/FileSystem.h> |
|
#include <Pegasus/Common/ArrayInternal.h> |
| |
#include <Pegasus/Config/ConfigManager.h> | #include <Pegasus/Config/ConfigManager.h> |
| |
#include <Pegasus/ProviderManager2/ProviderName.h> | #include <Pegasus/ProviderManager2/ProviderName.h> |
#include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h> | #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h> |
#include <Pegasus/ProviderManager2/ProviderManagerService.h> |
#include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h> |
|
|
#include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h> |
|
|
|
| |
PEGASUS_USING_STD; | PEGASUS_USING_STD; |
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
int _jmpi_trace=0; |
// 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" |
|
|
|
|
|
// |
|
// The following tests were added to allow the provider to supply a |
|
// CIMObjectPath in the response. Before this, the path was always |
|
// rebuild by the response functions from the instance. This resulted |
|
// in cases where the key properties were not in the returned instance |
|
// (ex. excluded by the property list) so that the path could not be built. |
|
// The preferred behavior is for the provider to build the path on response. |
|
// However, to cover existing providers the alternate of allowing the |
|
// ProviderManager has been kept if the path in the instance is not considered |
|
// to exist. |
|
// PLEASE: provider writers build/set a proper path into returned objects |
|
// See bug 8062 |
|
|
|
/* |
|
local function to implement the CIMObjectPath required for a response |
|
object. |
|
If there is a path defined in the instance, we simply return this path. |
|
If not, we use the class to build a path from the instance. |
|
Note that we are depending on some value in the keybindings to determine |
|
if we have a path. |
|
*/ |
|
|
|
void _fixCIMObjectPath(CIMInstance* instance, CIMClass& cls) |
|
{ |
|
CIMObjectPath op = instance->getPath(); |
|
const Array<CIMKeyBinding> kb = op.getKeyBindings(); |
|
if (kb.size() == 0) |
|
{ |
|
CIMObjectPath iop = instance->buildPath(cls); |
|
/* Fix for 4237*/ |
|
iop.setNameSpace(op.getNameSpace()); |
|
instance->setPath(iop); |
|
} |
|
} |
|
|
|
void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::debugPrintMethodPointers"); |
|
|
|
static const char *methodNames[][3] = { |
|
// CIMProvider |
|
{"snia 2.0", |
|
"initialize", |
|
"(Lorg/pegasus/jmpi/CIMOMHandle;)V"}, |
|
{"snia 2.0", |
|
"cleanup", |
|
"()V"}, |
|
// InstanceProvider |
|
{"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 |
|
{"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 |
|
{"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 |
|
{"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 |
|
// EventProvider |
|
{"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 |
|
// ProviderAdapter |
|
// JMPI_TestPropertyTypes |
|
{"JMPI_TestPropertyTypes", |
|
"findObjectPath", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;)I"}, |
|
{"JMPI_TestPropertyTypes", |
|
"testPropertyTypesValue", |
|
"(Lorg/pegasus/jmpi/CIMInstance;)V"} |
|
}; |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"No JNI environment specified. (JNIEnv==NULL)"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
if (!jc) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"No Java class specified. (jc==NULL)"); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++) |
|
{ |
|
jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Method: %s, %s, id = %p", |
|
methodNames[i][0],methodNames[i][1],id)); |
|
|
|
env->ExceptionClear(); |
|
} |
|
|
|
env->ExceptionClear(); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
void debugIntrospectJavaObject (JNIEnv *env, jobject jInst) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::debugIntrospectJavaObject"); |
|
|
|
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); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"Introspect java object: %s",pszResult)); |
|
|
|
env->ReleaseStringUTFChars (jstringResult, pszResult); |
|
} |
|
} |
|
} |
|
|
|
env->ExceptionClear(); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
void debugDumpJavaObject (JNIEnv *env, jobject jInst) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::debugDumpJavaObject"); |
|
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) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"No class or super class description."); |
|
env->ExceptionClear(); |
|
PEG_METHOD_EXIT(); |
|
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); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"Dumping class %p:\n " |
|
" jInstSuperClass = %p\n" |
|
" jClassShouldBe = %p\n" |
|
" jmidCInst = %p\n" |
|
" pszResult1 = %s\n" |
|
" pszResult2 = %s\n" |
|
" pszResult3 = %s", |
|
jInstClass,jInstSuperClass,JMPIjvm::jv.classRefs[18],jmidCInst, |
|
pszResult1,pszResult2,pszResult3 )); |
|
|
|
env->ReleaseStringUTFChars (jstringResult1, pszResult1); |
|
env->ReleaseStringUTFChars (jstringResult2, pszResult2); |
|
env->ReleaseStringUTFChars (jstringResult3, pszResult3); |
|
|
|
env->ExceptionClear(); |
|
PEG_METHOD_EXIT(); |
|
return; |
|
} |
|
|
|
bool JMPIProviderManager::getInterfaceType( |
|
ProviderIdContainer pidc, |
|
String& interfaceType, |
|
String& interfaceVersion) |
|
{ |
|
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::getInterfaceType"); |
|
|
|
CIMInstance ciProviderModule = pidc.getModule (); |
|
Uint32 idx; |
|
bool fRet = true; |
|
|
|
idx = ciProviderModule.findProperty ("InterfaceType"); |
|
|
|
if (idx != PEG_NOT_FOUND) |
|
{ |
|
CIMValue itValue; |
|
|
|
itValue = ciProviderModule.getProperty (idx).getValue (); |
|
|
|
itValue.get (interfaceType); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"interfaceType = %s",(const char*)interfaceType.getCString())); |
|
} |
|
else |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"inferfaceType not found."); |
|
fRet = false; |
|
} |
|
|
|
idx = ciProviderModule.findProperty ("InterfaceVersion"); |
|
|
|
if (idx != PEG_NOT_FOUND) |
|
{ |
|
CIMValue itValue; |
|
|
|
itValue = ciProviderModule.getProperty (idx).getValue (); |
|
|
|
itValue.get (interfaceVersion); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"interfaceVersion = %s",(const char*)interfaceVersion.getCString())); |
|
} |
|
else |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"inferfaceVersion not found."); |
|
fRet = false; |
|
} |
|
PEG_METHOD_EXIT(); |
|
return fRet; |
|
} |
|
|
|
bool JMPIProviderManager::interfaceIsUsed (JNIEnv *env, |
|
jobject jObject, |
|
String searchInterfaceName) |
|
{ |
|
jobjectArray jInterfaces = 0; |
|
jsize jInterfacesLength = 0; |
|
bool fFound = false; |
|
|
|
if (!jObject) |
|
{ |
|
return false; |
|
} |
|
|
|
jInterfaces = (jobjectArray)env->CallObjectMethod( |
|
env->GetObjectClass (jObject), |
|
JMPIjvm::jv.ClassGetInterfaces); |
|
|
|
if (!jInterfaces) |
|
{ |
|
return false; |
|
} |
|
|
|
jInterfacesLength = env->GetArrayLength (jInterfaces); |
|
|
|
for (jsize i = 0; !fFound && i < jInterfacesLength; i++) |
|
{ |
|
jobject jInterface = env->GetObjectArrayElement (jInterfaces, i); |
|
|
|
if (jInterface) |
|
{ |
|
jstring jInterfaceName = (jstring)env->CallObjectMethod( |
|
jInterface, |
|
JMPIjvm::jv.ClassGetName); |
|
|
|
if (jInterfaceName) |
|
{ |
|
const char *pszInterfaceName = env->GetStringUTFChars( |
|
jInterfaceName, |
|
0); |
|
String interfaceName = pszInterfaceName; |
|
|
|
if (String::equal (interfaceName, searchInterfaceName)) |
|
{ |
|
fFound = true; |
|
} |
|
|
|
env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName); |
|
} |
|
} |
|
} |
| |
#define DDD(x) if (_jmpi_trace) x; |
return fFound; |
|
} |
| |
JMPIProviderManager::IndProvTab JMPIProviderManager::provTab; | JMPIProviderManager::IndProvTab JMPIProviderManager::provTab; |
|
Mutex JMPIProviderManager::mutexProvTab; |
JMPIProviderManager::IndSelectTab JMPIProviderManager::selxTab; | JMPIProviderManager::IndSelectTab JMPIProviderManager::selxTab; |
|
Mutex JMPIProviderManager::mutexSelxTab; |
JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg; | JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg; |
|
Mutex JMPIProviderManager::mutexProvReg; |
| |
JMPIProviderManager::JMPIProviderManager(Mode m) |
JMPIProviderManager::JMPIProviderManager() |
{ | { |
mode=m; |
_subscriptionInitComplete = false; |
if (getenv("JMPI_TRACE")) _jmpi_trace=1; |
|
else _jmpi_trace=0; |
|
} | } |
| |
JMPIProviderManager::~JMPIProviderManager(void) | JMPIProviderManager::~JMPIProviderManager(void) |
|
|
Boolean JMPIProviderManager::insertProvider(const ProviderName & name, | Boolean JMPIProviderManager::insertProvider(const ProviderName & name, |
const String &ns, const String &cn) | const String &ns, const String &cn) |
{ | { |
String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString()); |
PEG_METHOD_ENTER( TRC_PROVIDERMANAGER, |
return provReg.insert(key,name); |
"JMPIProviderManager::insertProvider"); |
|
|
|
String key(ns + String("::") + cn); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"insertProvider: %s",(const char*)key.getCString())); |
|
|
|
Boolean ret = false; |
|
|
|
{ |
|
AutoMutex lock (mutexProvReg); |
|
|
|
ret = provReg.insert(key,name); |
} | } |
| |
|
PEG_METHOD_EXIT(); |
|
return ret; |
|
} |
| |
Message * JMPIProviderManager::processMessage(Message * request) throw() | Message * JMPIProviderManager::processMessage(Message * request) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
"JMPIProviderManager::processMessage()"); | "JMPIProviderManager::processMessage()"); |
| |
Message * response = 0; | Message * response = 0; |
|
|
{ | { |
case CIM_GET_INSTANCE_REQUEST_MESSAGE: | case CIM_GET_INSTANCE_REQUEST_MESSAGE: |
response = handleGetInstanceRequest(request); | response = handleGetInstanceRequest(request); |
|
|
break; | break; |
|
|
case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE: | case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE: |
response = handleEnumerateInstancesRequest(request); | response = handleEnumerateInstancesRequest(request); |
|
|
break; | break; |
|
|
case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE: | case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE: |
response = handleEnumerateInstanceNamesRequest(request); | response = handleEnumerateInstanceNamesRequest(request); |
|
|
break; | break; |
|
|
case CIM_CREATE_INSTANCE_REQUEST_MESSAGE: | case CIM_CREATE_INSTANCE_REQUEST_MESSAGE: |
response = handleCreateInstanceRequest(request); | response = handleCreateInstanceRequest(request); |
|
|
break; | break; |
|
|
case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE: | case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE: |
response = handleModifyInstanceRequest(request); | response = handleModifyInstanceRequest(request); |
|
|
break; | break; |
|
|
case CIM_DELETE_INSTANCE_REQUEST_MESSAGE: | case CIM_DELETE_INSTANCE_REQUEST_MESSAGE: |
response = handleDeleteInstanceRequest(request); | response = handleDeleteInstanceRequest(request); |
|
break; |
| |
|
case CIM_EXEC_QUERY_REQUEST_MESSAGE: |
|
response = handleExecQueryRequest(request); |
break; | break; |
/* case CIM_EXEC_QUERY_REQUEST_MESSAGE: |
|
response = handleExecuteQueryRequest(request); |
|
| |
*/ break; |
|
case CIM_ASSOCIATORS_REQUEST_MESSAGE: | case CIM_ASSOCIATORS_REQUEST_MESSAGE: |
response = handleAssociatorsRequest(request); | response = handleAssociatorsRequest(request); |
|
|
break; | break; |
|
|
case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE: | case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE: |
response = handleAssociatorNamesRequest(request); | response = handleAssociatorNamesRequest(request); |
|
|
break; | break; |
|
|
case CIM_REFERENCES_REQUEST_MESSAGE: | case CIM_REFERENCES_REQUEST_MESSAGE: |
response = handleReferencesRequest(request); | response = handleReferencesRequest(request); |
|
|
break; | break; |
|
|
case CIM_REFERENCE_NAMES_REQUEST_MESSAGE: | case CIM_REFERENCE_NAMES_REQUEST_MESSAGE: |
response = handleReferenceNamesRequest(request); | response = handleReferenceNamesRequest(request); |
|
break; |
| |
|
case CIM_GET_PROPERTY_REQUEST_MESSAGE: |
|
response = handleGetPropertyRequest(request); |
break; | break; |
|
|
|
case CIM_SET_PROPERTY_REQUEST_MESSAGE: |
|
response = handleSetPropertyRequest(request); |
|
break; |
|
|
case CIM_INVOKE_METHOD_REQUEST_MESSAGE: | case CIM_INVOKE_METHOD_REQUEST_MESSAGE: |
response = handleInvokeMethodRequest(request); | response = handleInvokeMethodRequest(request); |
|
|
break; | break; |
|
|
case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE: | case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE: |
response = handleCreateSubscriptionRequest(request); | response = handleCreateSubscriptionRequest(request); |
|
|
break; | break; |
|
|
/* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE: | /* case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE: |
response = handleModifySubscriptionRequest(request); | response = handleModifySubscriptionRequest(request); |
break; | break; |
*/ | */ |
case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE: | case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE: |
response = handleDeleteSubscriptionRequest(request); | response = handleDeleteSubscriptionRequest(request); |
|
|
break; | break; |
case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE: |
|
response = handleEnableIndicationsRequest(request); |
|
| |
break; |
|
case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE: |
|
response = handleDisableIndicationsRequest(request); |
|
|
|
break; |
|
/* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: | /* case CIM_EXPORT_INDICATION_REQUEST_MESSAGE: |
response = handleExportIndicationRequest(request); | response = handleExportIndicationRequest(request); |
break; | break; |
*/ | */ |
case CIM_DISABLE_MODULE_REQUEST_MESSAGE: | case CIM_DISABLE_MODULE_REQUEST_MESSAGE: |
response = handleDisableModuleRequest(request); | response = handleDisableModuleRequest(request); |
|
|
break; | break; |
|
|
case CIM_ENABLE_MODULE_REQUEST_MESSAGE: | case CIM_ENABLE_MODULE_REQUEST_MESSAGE: |
response = handleEnableModuleRequest(request); | response = handleEnableModuleRequest(request); |
|
|
break; | break; |
|
|
case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: | case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: |
response = handleStopAllProvidersRequest(request); | response = handleStopAllProvidersRequest(request); |
|
break; |
| |
|
case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE: |
|
response = handleSubscriptionInitCompleteRequest (request); |
break; | break; |
case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE: |
|
response = handleInitializeProviderRequest(request); |
|
| |
|
case CIM_INDICATION_SERVICE_DISABLED_REQUEST_MESSAGE: |
|
response = handleIndicationServiceDisabledRequest (request); |
break; | break; |
|
|
default: | default: |
cout<<"*** Unsupported Request ??"<<request->getType()<<endl; |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
asm("int $3"); |
"Unsupported Request %d", |
response = handleUnsupportedRequest(request); |
request->getType() |
|
)); |
| |
|
response = handleUnsupportedRequest(request); |
break; | break; |
} | } |
| |
|
|
#define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL) | #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL) |
| |
| |
#define HandlerIntroBase(type,type1,message,request,response,handler,respType) \ |
#define HandlerIntroBase(type,type1,message,request,response,handler) \ |
CIM##type##RequestMessage * request = \ | CIM##type##RequestMessage * request = \ |
dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \ |
dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *> \ |
|
(message)); \ |
PEGASUS_ASSERT(request != 0); \ | PEGASUS_ASSERT(request != 0); \ |
CIM##type##ResponseMessage * response = \ | CIM##type##ResponseMessage * response = \ |
new CIM##type##ResponseMessage( \ |
dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \ |
request->messageId, \ |
|
CIMException(), \ |
|
request->queueIds.copyAndPop() \ |
|
respType \ |
|
PEGASUS_ASSERT(response != 0); \ | PEGASUS_ASSERT(response != 0); \ |
response->setKey(request->getKey()); \ |
type1##ResponseHandler handler(request, response, _responseChunkCallback); |
response->setHttpMethod(request->getHttpMethod()); \ |
|
type1##ResponseHandler handler(request, response); |
|
|
|
#define VOIDINTRO ); |
|
#define NOVOIDINTRO(type) ,type); |
|
#define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName ); |
|
|
|
|
|
#define HandlerIntroVoid(type,message,request,response,handler) \ |
|
HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO) |
|
|
|
#define HandlerIntroMethod(type,message,request,response,handler) \ |
|
HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO) |
|
| |
#define HandlerIntroInd(type,message,request,response,handler) \ | #define HandlerIntroInd(type,message,request,response,handler) \ |
HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO) |
HandlerIntroBase(type,Operation,message,request,response,handler) |
| |
#define HandlerIntroInit(type,message,request,response,handler) \ | #define HandlerIntroInit(type,message,request,response,handler) \ |
HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO) |
HandlerIntroBase(type,Operation,message,request,response,handler) |
| |
#define HandlerIntro(type,message,request,response,handler,respType) \ |
#define HandlerIntro(type,message,request,response,handler) \ |
HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType)) |
HandlerIntroBase(type,type,message,request,response,handler) |
| |
#define HandlerCatch(handler) \ | #define HandlerCatch(handler) \ |
catch(CIMException & e) \ | catch(CIMException & e) \ |
{ PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \ |
{ PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"CIMException: %s", \ |
"Exception: " + e.getMessage()); \ |
(const char*)e.getMessage().getCString())); \ |
handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \ |
handler.setStatus(e.getCode(), e.getContentLanguages(), \ |
|
e.getMessage()); \ |
} \ | } \ |
catch(Exception & e) \ | catch(Exception & e) \ |
{ PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \ |
{ PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"Exception: %s", \ |
"Exception: " + e.getMessage()); \ |
(const char*)e.getMessage().getCString())); \ |
handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \ |
handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), \ |
|
e.getMessage()); \ |
} \ | } \ |
catch(...) \ | catch(...) \ |
{ PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \ |
{ PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \ |
"Exception: Unknown"); \ | "Exception: Unknown"); \ |
handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \ | handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \ |
} | } |
| |
static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list) | static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list) |
{ | { |
Uint32 s=list.size(); |
|
jobjectArray pl=NULL; | jobjectArray pl=NULL; |
if (s) { |
if (!list.isNull()) |
|
{ |
|
Uint32 s=list.size(); |
jstring initial=env->NewString(NULL,0); | jstring initial=env->NewString(NULL,0); |
pl=env->NewObjectArray(s,jv->StringClassRef,initial); |
pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial); |
for (Uint32 i=0; i<s; i++) { |
for (Uint32 i=0; i<s; i++) |
|
{ |
env->SetObjectArrayElement | env->SetObjectArrayElement |
(pl,i,env->NewStringUTF(list[i].getString().getCString())); | (pl,i,env->NewStringUTF(list[i].getString().getCString())); |
} | } |
|
|
return pl; | return pl; |
} | } |
| |
Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleGetInstanceRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
"JMPIProviderManager::handleGetInstanceRequest"); | "JMPIProviderManager::handleGetInstanceRequest"); |
| |
HandlerIntro(GetInstance,message,request,response,handler,CIMInstance()); |
HandlerIntro(GetInstance,message,request,response,handler); |
| |
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMINSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2 |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { |
try |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
{ |
"JMPIProviderManager::handleGetInstanceRequest - Host name: $0 Name space: $1 Class name: $2", |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
System::getHostName(), |
"handleGetInstanceRequest: " |
request->nameSpace.getString(), |
"name space = %s class name = %s", |
request->instanceName.getClassName().getString()); |
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( |
CIMObjectPath *objectPath = new CIMObjectPath( |
System::getHostName(), | System::getHostName(), |
request->nameSpace, | request->nameSpace, |
request->instanceName.getClassName(), | request->instanceName.getClassName(), |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(), |
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
|
name.getPhysicalName(), |
name.getLogicalName()); | name.getLogicalName()); |
OperationContext context; | OperationContext context; |
| |
|
context.insert( |
|
request->operationContext.get(IdentityContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
|
// forward request | // forward request |
JMPIProvider & pr=ph.GetProvider(); | JMPIProvider & pr=ph.GetProvider(); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
PEG_TRACE(( TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
"Calling provider.getInstance: " + pr.getName()); |
"handleGetInstanceRequest:Calling provider instance: %s" , |
|
(const char*)pr.getName().getCString())); |
| |
DDD(cerr<<"--- JMPIProviderManager::getInstance"<<endl); |
JvmVector *jv = 0; |
| |
JvmVector *jv; |
env = JMPIjvm::attachThread(&jv); |
JNIEnv *env=JMPIjvm::attachThread(&jv); |
|
JMPIjvm::checkException(env); |
|
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); |
|
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
if (!env) |
request->instanceName.getClassName(), |
{ |
false,true,true,CIMPropertyList()); |
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
JMPIjvm::checkException(env); |
"handleGetInstanceRequest:" |
jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls); |
"Could not initialize the JVM (Java Virtual Machine) " |
JMPIjvm::checkException(env); |
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); | JMPIProvider::pm_service_op_lock op_lock(&pr); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance", |
jmethodID id = NULL; |
"(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"); |
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
| |
if (id==NULL) { |
if (interfaceType == "JMPI") |
env->ExceptionClear(); |
{ |
id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance", |
id = env->GetMethodID( |
"(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)" |
(jclass)pr.jProviderClass, |
|
"getInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;Z)" |
"Lorg/pegasus/jmpi/CIMInstance;"); | "Lorg/pegasus/jmpi/CIMInstance;"); |
JMPIjvm::checkException(env); |
|
mode24=true; |
if (id != NULL) |
pl=getList(jv,env,request->propertyList); |
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER."); |
} | } |
JMPIjvm::checkException(env); |
|
| |
STAT_GETSTARTTIME; |
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
| |
jobject inst=NULL; |
id = env->GetMethodID( |
if (mode24) inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
(jclass)pr.jProviderClass, |
request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc); |
"getInstance", |
else inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc,true); |
"(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[" |
|
"Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)" |
|
"Lorg/pegasus/jmpi/CIMInstance;"); |
| |
STAT_PMS_PROVIDEREND; |
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMINSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: " |
|
"Found METHOD_CIMINSTANCEPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"getInstance", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)" |
|
"Lorg/pegasus/jmpi/CIMInstance;"); |
| |
JMPIjvm::checkException(env); |
if (id != NULL) |
handler.processing(); |
{ |
if (inst) { |
eMethodFound = METHOD_INSTANCEPROVIDER2; |
CIMInstance *ci=((CIMInstance*)env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst)); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
handler.deliver(*ci); |
"handleGetInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER2."); |
} | } |
handler.complete(); |
/* Fix for 4238 */ |
} | } |
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: No method provider found!"); |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
} | } |
| |
Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw() |
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
case METHOD_CIMINSTANCEPROVIDER: |
"JMPIProviderManager::handleEnumerateInstanceRequest"); |
{ |
|
jlong jopRef=DEBUG_ConvertCToJava(CIMObjectPath*,jlong,objectPath); |
|
jobject jop=env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jopRef); |
| |
HandlerIntro(EnumerateInstances,message,request,response, |
JMPIjvm::checkException(env); |
handler,Array<CIMInstance>()); |
|
JNIEnv *env=NULL; |
|
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { |
CIMClass cls; |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0 Name space: $1 Class name: $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
request->className.getString()); |
|
| |
// make target object path |
try |
CIMObjectPath objectPath( |
{ |
System::getHostName(), |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
request->nameSpace, |
"handleGetInstanceRequest: " |
request->className); |
"enter(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
| |
// resolve provider name |
AutoMutex lock (pr._cimomMutex); |
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
| |
// get cached or load new provider module |
cls = pr._cimom_handle->getClass( |
JMPIProvider::OpProviderHolder ph = |
context, |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), |
request->nameSpace, |
String::EMPTY); |
request->instanceName.getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetInstanceRequest: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
| |
// convert arguments |
} |
OperationContext context; |
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
PEG_METHOD_EXIT(); |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
throw; |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
} |
| |
CIMPropertyList propertyList(request->propertyList); |
CIMClass *pcls = new CIMClass (cls); |
| |
// forward request |
JMPIjvm::checkException(env); |
JMPIProvider & pr=ph.GetProvider(); |
|
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jlong jcimClassRef = DEBUG_ConvertCToJava( |
"Calling provider.enumerateInstances: " + pr.getName()); |
CIMClass*, |
|
jlong, |
|
pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
| |
DDD(cerr<<"--- JMPIProviderManager::enumerateInstances"<<endl); |
JMPIjvm::checkException(env); |
| |
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
| |
JvmVector *jv; |
StatProviderTimeMeasurement providerTime(response); |
env=JMPIjvm::attachThread(&jv); |
|
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider, |
jv->CIMObjectPathNewI,(jint)&objectPath); |
id, |
JMPIjvm::checkException(env); |
jop, |
|
JMPI_LOCALONLY, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList, |
|
jcimClass); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
|
request->className, |
|
false,true,true,CIMPropertyList()); |
|
JMPIjvm::checkException(env); |
|
jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
handler.processing(); |
| |
STAT_GETSTARTTIME; |
if (jciRet) { |
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
handler.complete(); |
|
break; |
|
} |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances", |
/* Fix for 4238 */ |
"(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"); |
case METHOD_INSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jopRef); |
| |
if (id==NULL) { |
|
env->ExceptionClear(); |
|
id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstances", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
mode24=true; |
|
pl=getList(jv,env,request->propertyList); |
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetInstanceRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass( |
|
context, |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetInstanceRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: " |
|
"Caught CIMExcetion (METHOD_INSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
PEG_METHOD_EXIT(); |
|
throw; |
} | } |
JMPIjvm::checkException(env); |
|
| |
if (!mode24) { |
CIMClass *pcls = new CIMClass (cls); |
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,false,jCc,true); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
| |
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jop, |
|
jcimClass, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
handler.deliver(inst); |
if (joc) |
|
{ |
|
env->CallVoidMethod( |
|
joc, |
|
JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
} | } |
|
|
|
handler.processing(); |
|
|
|
if (jciRet) { |
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
handler.deliver(*ciRet); |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
} | } |
|
/* Fix for 4238 */ |
|
|
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ,jopRef); |
| |
else { |
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
|
request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetInstanceRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass( |
|
context, |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetInstanceRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: " |
|
"Caught CIMExcetion (METHOD_INSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
| |
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jInst=env->GetObjectArrayElement(jAr,i); |
|
|
jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
// Modified for Bugzilla# 3679 |
|
jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jop, |
|
jcimClass, |
|
JMPI_LOCALONLY); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
handler.deliver(inst); |
handler.processing(); |
} |
|
|
if (jciRet) { |
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
handler.deliver(*ciRet); |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleGetInstanceRequest: Unknown method provider!"); |
|
break; |
|
} |
} | } |
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
|
|
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleEnumerateInstancesRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleEnumerateInstanceRequest"); |
| |
HandlerIntro(EnumerateInstanceNames,message,request,response, |
HandlerIntro(EnumerateInstances,message,request,response,handler); |
handler,Array<CIMObjectPath>()); |
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMINSTANCEPROVIDER, |
|
METHOD_CIMINSTANCEPROVIDER2, |
|
METHOD_INSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { |
try |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
{ |
"JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0 Name space: $1 Class name: $2", |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
System::getHostName(), |
"handleEnumerateInstanceRequest: " |
request->nameSpace.getString(), |
"name space = %s class name = %s", |
request->className.getString()); |
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( |
CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(), |
System::getHostName(), |
|
request->nameSpace, | request->nameSpace, |
request->className); | request->className); |
| |
|
|
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = |
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName()); |
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
context.insert( |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
request->operationContext.get(IdentityContainer::NAME)); |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
| |
|
// forward request |
JMPIProvider & pr=ph.GetProvider(); | JMPIProvider & pr=ph.GetProvider(); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
"Calling provider.enumerateInstanceNames: " + pr.getName()); |
"handleEnumerateInstanceRequest: " |
|
"Calling provider: %s", (const char*)pr.getName().getCString())); |
| |
DDD(cerr<<"--- JMPIProviderManager::enumerateInstanceNames"<<endl); |
JvmVector *jv = 0; |
| |
|
|
JvmVector *jv; |
|
env=JMPIjvm::attachThread(&jv); | env=JMPIjvm::attachThread(&jv); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
if (!env) |
jv->CIMObjectPathNewI,(jint)&objectPath); |
{ |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
PEG_METHOD_EXIT(); |
request->className, |
|
false,true,true,CIMPropertyList()); |
throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED, |
JMPIjvm::checkException(env); |
MessageLoaderParms( |
jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls); |
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
JMPIjvm::checkException(env); |
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); | JMPIProvider::pm_service_op_lock op_lock(&pr); |
| |
STAT_GETSTARTTIME; |
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get (ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances", |
if (interfaceType == "JMPI") |
"(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"); |
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumInstances", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Z" |
|
"Lorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"); |
| |
if (id==NULL) { |
if (id != NULL) |
env->ExceptionClear(); |
{ |
id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstanceNames", |
eMethodFound = METHOD_INSTANCEPROVIDER; |
"(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)" |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"[Lorg/pegasus/jmpi/CIMObjectPath;"); |
"handleEnumerateInstances: Found METHOD_INSTANCEPROVIDER."); |
JMPIjvm::checkException(env); |
|
mode24=true; |
|
} | } |
JMPIjvm::checkException(env); |
|
| |
if (!mode24) { |
if (id == NULL) |
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,true,jCc); |
{ |
JMPIjvm::checkException(env); |
env->ExceptionClear(); |
| |
STAT_PMS_PROVIDEREND; |
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumerateInstances", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[" |
|
"Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[" |
|
"Lorg/pegasus/jmpi/CIMInstance;"); |
| |
handler.processing(); |
if (id != NULL) |
if (jVec) { |
{ |
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
eMethodFound = METHOD_CIMINSTANCEPROVIDER; |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
"handleEnumerateInstances: " |
JMPIjvm::checkException(env); |
"Found METHOD_CIMINSTANCEPROVIDER."); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
|
JMPIjvm::checkException(env); |
|
handler.deliver(*cop); |
|
} | } |
} | } |
handler.complete(); |
|
} | } |
else { |
else if (interfaceType == "JMPIExperimental") |
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc); |
{ |
JMPIjvm::checkException(env); |
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
STAT_PMS_PROVIDEREND; |
"enumerateInstances", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)" |
|
"Ljava/util/Vector;"); |
| |
handler.processing(); |
if (id != NULL) |
if (jAr) { |
{ |
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
eMethodFound = METHOD_INSTANCEPROVIDER2; |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jobject jCop=env->GetObjectArrayElement(jAr,i); |
"handleEnumerateInstances: " |
JMPIjvm::checkException(env); |
"Found METHOD_INSTANCEPROVIDER2."); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
|
JMPIjvm::checkException(env); |
|
handler.deliver(*cop); |
|
} | } |
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumerateInstances", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;ZZ[" |
|
"Ljava/lang/String;)[" |
|
"Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMINSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"Found METHOD_CIMINSTANCEPROVIDER2."); |
} | } |
handler.complete(); |
|
} | } |
} | } |
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstances: No method provider found!"); |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); |
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
} | } |
| |
Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw() |
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
case METHOD_CIMINSTANCEPROVIDER: |
"JMPIProviderManager::handleCreateInstanceRequest"); |
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
HandlerIntro(CreateInstance,message,request,response, |
JMPIjvm::checkException(env); |
handler,CIMObjectPath()); |
|
JNIEnv *env=NULL; |
|
try { |
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"JMPIProviderManager::handleCreateInstanceRequest - Host name: $0 Name space: $1 Class name: $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
request->newInstance.getPath().getClassName().getString()); |
|
| |
// make target object path |
CIMClass cls; |
CIMObjectPath objectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->newInstance.getPath().getClassName(), |
|
request->newInstance.getPath().getKeyBindings()); |
|
| |
// resolve provider name |
try |
ProviderName name = _resolveProviderName( |
{ |
request->operationContext.get(ProviderIdContainer::NAME)); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"enter(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
// get cached or load new provider module |
AutoMutex lock (pr._cimomMutex); |
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), |
|
String::EMPTY); |
|
| |
// convert arguments |
cls = pr._cimom_handle->getClass(context, |
OperationContext context; |
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
} |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
catch (CIMException e) |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstances: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
// forward request |
PEG_METHOD_EXIT(); |
JMPIProvider & pr=ph.GetProvider(); |
throw; |
|
} |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
CIMClass *pcls = new CIMClass (cls); |
"Calling provider.createInstance: " + |
|
ph.GetProvider().getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::createInstances"<<endl); |
JMPIjvm::checkException(env); |
| |
JvmVector *jv; |
jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
env=JMPIjvm::attachThread(&jv); |
jobject jcc = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jccRef); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jInst=env->NewObject(jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewI,(jint)&request->newInstance); |
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
JMPI_LOCALONLY, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList, |
|
jcc); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
| |
STAT_GETSTARTTIME; |
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"createInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jobject jCop=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jInst); |
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
/* Fix for 4237 */ |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"enter: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"exit: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstances: " |
|
"Caught CIMExcetion " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
STAT_PMS_PROVIDEREND; |
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
| |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
handler.processing(); |
|
if (jCop) { |
handler.deliver(*ciRet); |
CIMObjectPath cop=*((CIMObjectPath*)env->CallIntMethod(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
} |
handler.deliver(cop); |
|
} | } |
handler.complete(); | handler.complete(); |
|
break; |
} | } |
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
case METHOD_CIMINSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
PEG_METHOD_EXIT(); |
JMPIjvm::checkException(env); |
| |
return(response); |
CIMClass cls; |
} |
|
| |
Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw() |
try |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"JMPIProviderManager::handleModifyInstanceRequest"); |
"handleEnumerateInstances: " |
|
"enter(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
HandlerIntroVoid(ModifyInstance,message,request,response,handler); |
AutoMutex lock (pr._cimomMutex); |
JNIEnv *env=NULL; |
|
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
|
|
try { |
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"DefaultProviderManager::handleModifyInstanceRequest - Host name: $0 Name space: $1 Class name: $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
request->modifiedInstance.getPath().getClassName().getString()); |
|
| |
// make target object path |
cls = pr._cimom_handle->getClass(context, |
CIMObjectPath objectPath( |
|
System::getHostName(), |
|
request->nameSpace, | request->nameSpace, |
request->modifiedInstance.getPath ().getClassName(), |
request->className, |
request->modifiedInstance.getPath ().getKeyBindings()); |
false, |
|
true, |
// resolve provider name |
true, |
ProviderName name = _resolveProviderName( |
CIMPropertyList()); |
request->operationContext.get(ProviderIdContainer::NAME)); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstances: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstances: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
// get cached or load new provider module |
PEG_METHOD_EXIT(); |
JMPIProvider::OpProviderHolder ph = |
throw; |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
} |
| |
// convert arguments |
CIMClass *pcls = new CIMClass (cls); |
OperationContext context; |
|
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
JMPIjvm::checkException(env); |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
| |
CIMPropertyList propertyList(request->propertyList); |
jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
jobject jcc = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jccRef); |
| |
// forward request |
JMPIjvm::checkException(env); |
JMPIProvider & pr=ph.GetProvider(); |
|
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
"Calling provider.modifyInstance: " + pr.getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::modifyInstance"<<endl); |
StatProviderTimeMeasurement providerTime(response); |
| |
JvmVector *jv; |
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
env=JMPIjvm::attachThread(&jv); |
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jcc, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); |
|
jobject jInst=env->NewObject(jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewI,(jint)&request->modifiedInstance); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
if (joc) |
|
{ |
STAT_GETSTARTTIME; |
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"); |
|
| |
if (id==NULL) { |
|
env->ExceptionClear(); |
|
id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
mode24=true; |
|
pl=getList(jv,env,request->propertyList); |
|
} | } |
JMPIjvm::checkException(env); |
|
| |
if (!mode24) env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst); |
handler.processing(); |
else env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst,pl); |
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
| |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
JMPIjvm::detachThread(); |
|
} |
|
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
PEG_METHOD_EXIT(); |
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
| |
return(response); |
/* Fix for 4237 */ |
} |
CIMClass cls; |
| |
Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw() |
try |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"JMPIProviderManager::handleDeleteInstanceRequest"); |
"handleEnumerateInstancesRequest: " |
|
"enter: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
| |
HandlerIntroVoid(DeleteInstance,message,request,response, |
AutoMutex lock (pr._cimomMutex); |
handler); |
|
JNIEnv *env=NULL; |
|
try { |
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"DefaultProviderManager::handleDeleteInstanceRequest - Host name: $0 Name space: $1 Class name: $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
request->instanceName.getClassName().getString()); |
|
| |
// make target object path |
cls = pr._cimom_handle->getClass(context, |
CIMObjectPath objectPath( |
|
System::getHostName(), |
|
request->nameSpace, | request->nameSpace, |
request->instanceName.getClassName(), |
ciRet->getClassName(), |
request->instanceName.getKeyBindings()); |
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"exit: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: " |
|
"Caught CIMExcetion " |
|
"cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
// resolve provider name |
PEG_METHOD_EXIT(); |
ProviderName name = _resolveProviderName( |
throw; |
request->operationContext.get(ProviderIdContainer::NAME)); |
} |
| |
// get cached or load new provider module |
JMPIjvm::checkException(env); |
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
|
| |
// convert arguments |
handler.deliver(*ciRet); |
OperationContext context; |
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
/* Fix for 4189 */ |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
case METHOD_INSTANCEPROVIDER2: |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
// forward request |
JMPIjvm::checkException(env); |
JMPIProvider & pr=ph.GetProvider(); |
|
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
CIMClass cls; |
"Calling provider.deleteInstance: " + pr.getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::modifyInstance"<<endl); |
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
JvmVector *jv; |
AutoMutex lock (pr._cimomMutex); |
env=JMPIjvm::attachThread(&jv); |
|
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
cls = pr._cimom_handle->getClass (context, |
jv->CIMObjectPathNewI,(jint)&objectPath); |
request->nameSpace, |
JMPIjvm::checkException(env); |
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
STAT_GETSTARTTIME; |
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deleteInstance", |
CIMClass *pcls = new CIMClass (cls); |
"(Lorg/pegasus/jmpi/CIMObjectPath;)V"); |
|
JMPIjvm::checkException(env); |
|
| |
env->CallVoidMethod((jobject)pr.jProvider,id,jRef); |
JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
jobject jcc = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jccRef); |
| |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
JMPIjvm::detachThread(); |
|
} |
|
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
PEG_METHOD_EXIT(); |
|
| |
return(response); |
StatProviderTimeMeasurement providerTime(response); |
} |
|
| |
|
jobject jVec = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jcc, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
| |
Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw() |
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
"JMPIProviderManager::handleAssociatorsRequest"); |
|
| |
HandlerIntro(Associators,message,request,response, |
JMPIjvm::checkException(env); |
handler,Array<CIMObject>()); |
} |
JNIEnv *env=NULL; |
|
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { |
handler.processing(); |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
if (jVec) { |
"JMPIProviderManager::handleAssociatorsRequest - Host name: $0 Name space: $1 Class name: $2", |
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
System::getHostName(), |
i<m; |
request->nameSpace.getString(), |
i++) |
request->objectName.getClassName().getString()); |
{ |
|
JMPIjvm::checkException(env); |
| |
// make target object path |
jobject jciRet = env->CallObjectMethod( |
CIMObjectPath objectPath( |
jVec, |
System::getHostName(), |
JMPIjvm::jv.VectorElementAt, |
request->nameSpace, |
i); |
request->objectName.getClassName()); |
|
| |
objectPath.setKeyBindings(request->objectName.getKeyBindings()); |
JMPIjvm::checkException(env); |
| |
CIMObjectPath assocPath( |
jlong jciRetRef = env->CallLongMethod( |
System::getHostName(), |
jciRet, |
request->nameSpace, |
JMPIjvm::jv.CIMInstanceCInst); |
request->assocClass.getString()); |
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
| |
// resolve provider name |
/* Fix for 4237 */ |
ProviderName name = _resolveProviderName( |
CIMClass cls; |
request->operationContext.get(ProviderIdContainer::NAME)); |
|
| |
// get cached or load new provider module |
try |
JMPIProvider::OpProviderHolder ph = |
{ |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"enter: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
| |
// convert arguments |
AutoMutex lock (pr._cimomMutex); |
OperationContext context; |
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"exit: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: " |
|
"Caught CIMExcetion " |
|
"cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
PEG_METHOD_EXIT(); |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
throw; |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
} |
| |
// forward request |
_fixCIMObjectPath(ciRet, cls); |
JMPIProvider & pr=ph.GetProvider(); |
|
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
JMPIjvm::checkException(env); |
"Calling provider.associators: " + pr.getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::associators"<< |
handler.deliver(*ciRet); |
" role: >"<<request->role<<"< aCls "<< |
} |
request->assocClass<<endl); |
} |
|
handler.complete(); |
|
break; |
|
} |
|
/* Fix for 4189 */ |
| |
JvmVector *jv; |
case METHOD_INSTANCEPROVIDER: |
env=JMPIjvm::attachThread(&jv); |
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jstring rClass=env->NewStringUTF(request->resultClass.getString().getCString()); |
CIMClass cls; |
jstring rRole=env->NewStringUTF(request->role.getCString()); |
|
jstring resRole=env->NewStringUTF(request->resultRole.getCString()); |
|
JMPIjvm::checkException(env); |
|
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
STAT_GETSTARTTIME; |
AutoMutex lock (pr._cimomMutex); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"associators", |
cls = pr._cimom_handle->getClass(context, |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;" |
request->nameSpace, |
"Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"); |
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
if (id==NULL) { |
PEG_METHOD_EXIT(); |
env->ExceptionClear(); |
throw; |
id=env->GetMethodID((jclass)pr.jProviderClass,"associators", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;" |
|
"Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"); |
|
JMPIjvm::checkException(env); |
|
mode24=true; |
|
} | } |
JMPIjvm::checkException(env); |
|
| |
pl=getList(jv,env,request->propertyList); |
CIMClass *pcls = new CIMClass (cls); |
| |
if (!mode24) { |
|
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
|
rClass,rRole,resRole,false,false,pl); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
jlong jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
jobject jcc = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jccRef); |
| |
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
|
JMPIjvm::checkException(env); |
|
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
StatProviderTimeMeasurement providerTime(response); |
inst.getClassName(),false,true,true,CIMPropertyList()); |
|
const CIMObjectPath& op=inst.getPath(); |
|
CIMObjectPath iop=inst.buildPath(cls); |
|
iop.setNameSpace(op.getNameSpace()); |
|
inst.setPath(iop); |
|
| |
handler.deliver(inst); |
// Modified for Bugzilla# 3679 |
} |
jobject jVec = env->CallObjectMethod((jobject)pr.jProvider, |
} |
id, |
} |
jcop, |
|
request->deepInheritance, |
|
jcc, |
|
JMPI_LOCALONLY); |
| |
else { |
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
|
rClass,rRole,resRole,false,false,pl); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
|
|
|
handler.processing(); | handler.processing(); |
if (jAr) { |
if (jVec) { |
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
JMPIjvm::checkException(env); |
i<m; |
jobject jInst=env->GetObjectArrayElement(jAr,i); |
i++) |
|
{ |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
jlong jciRetRef = env->CallLongMethod( |
inst.getClassName(),false,true,true,CIMPropertyList()); |
jciRet, |
const CIMObjectPath& op=inst.getPath(); |
JMPIjvm::jv.CIMInstanceCInst); |
CIMObjectPath iop=inst.buildPath(cls); |
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
iop.setNameSpace(op.getNameSpace()); |
jlong, |
inst.setPath(iop); |
CIMInstance*, |
|
jciRetRef); |
|
|
|
/* Fix for 4237 */ |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"enter: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstancesRequest: " |
|
"exit: cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: " |
|
"Caught CIMExcetion " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
handler.deliver(inst); |
PEG_METHOD_EXIT(); |
|
throw; |
} | } |
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
} | } |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstancesRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
| |
|
|
return(response); | return(response); |
} | } |
| |
|
Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest( |
|
const Message * message) throw() |
Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw() |
|
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_METHOD_ENTER( |
"JMPIProviderManager::handleAssociatorNamesRequest"); |
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleEnumerateInstanceNamesRequest"); |
HandlerIntro(AssociatorNames,message,request,response, |
|
handler,Array<CIMObjectPath>()); |
HandlerIntro(EnumerateInstanceNames,message,request,response, handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMINSTANCEPROVIDER, |
|
METHOD_CIMINSTANCEPROVIDER2, |
|
METHOD_INSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { | try { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0 Name space: $1 Class name: $2", |
"handleEnumerateInstanceNamesRequest: " |
System::getHostName(), |
"name space = %s class name = %s", |
request->nameSpace.getString(), |
(const char*)request->nameSpace.getString().getCString(), |
request->objectName.getClassName().getString()); |
(const char*)request->className.getString().getCString())); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( |
CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(), |
System::getHostName(), |
|
request->nameSpace, |
|
request->objectName.getClassName()); |
|
|
|
objectPath.setKeyBindings(request->objectName.getKeyBindings()); |
|
|
|
CIMObjectPath assocPath( |
|
System::getHostName(), |
|
request->nameSpace, | request->nameSpace, |
request->assocClass.getString()); |
request->className); |
| |
// resolve provider name | // resolve provider name |
ProviderName name = _resolveProviderName( | ProviderName name = _resolveProviderName( |
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = |
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
name.getPhysicalName(), |
|
name.getLogicalName()); |
| |
// convert arguments | // convert arguments |
OperationContext context; | OperationContext context; |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
context.insert( |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
request->operationContext.get(IdentityContainer::NAME)); |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
| |
// forward request |
|
JMPIProvider & pr=ph.GetProvider(); | JMPIProvider & pr=ph.GetProvider(); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
"Calling provider.associatorNames: " + pr.getName()); |
"handleEnumerateInstanceNamesRequest: " |
|
"Calling provider: %s",(const char*)pr.getName().getCString())); |
| |
DDD(cerr<<"--- JMPIProviderManager::associatorNames"<< |
JvmVector *jv = 0; |
" role: >"<<request->role<<"< aCls "<< |
|
request->assocClass<<endl); |
|
| |
JvmVector *jv; |
|
env=JMPIjvm::attachThread(&jv); | env=JMPIjvm::attachThread(&jv); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
if (!env) |
jv->CIMObjectPathNewI,(jint)&objectPath); |
{ |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
| |
jstring rClass=env->NewStringUTF(request->resultClass.getString().getCString()); |
PEG_METHOD_EXIT(); |
jstring rRole=env->NewStringUTF(request->role.getCString()); |
|
jstring resRole=env->NewStringUTF(request->resultRole.getCString()); |
throw PEGASUS_CIM_EXCEPTION_L( |
JMPIjvm::checkException(env); |
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); | JMPIProvider::pm_service_op_lock op_lock(&pr); |
| |
STAT_GETSTARTTIME; |
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"associatorNames", |
if (interfaceType == "JMPI") |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;" |
{ |
"Ljava/lang/String;)Ljava/util/Vector;"); |
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumInstances", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"); |
| |
if (id==NULL) { |
if (id != NULL) |
env->ExceptionClear(); |
{ |
id=env->GetMethodID((jclass)pr.jProviderClass,"associatorNames", |
eMethodFound = METHOD_INSTANCEPROVIDER; |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;" |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
"Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"); |
"handleEnumerateInstanceNamesRequest: " |
JMPIjvm::checkException(env); |
"Found METHOD_INSTANCEPROVIDER."); |
mode24=true; |
|
} | } |
JMPIjvm::checkException(env); |
|
| |
if (!mode24) { |
if (id == NULL) |
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
{ |
rClass,rRole,resRole); |
env->ExceptionClear(); |
JMPIjvm::checkException(env); |
|
| |
STAT_PMS_PROVIDEREND; |
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumerateInstanceNames", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;)[" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;"); |
| |
handler.processing(); |
if (id != NULL) |
if (jVec) { |
{ |
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
eMethodFound = METHOD_CIMINSTANCEPROVIDER; |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
"handleEnumerateInstanceNamesRequest: " |
JMPIjvm::checkException(env); |
"Found METHOD_CIMINSTANCEPROVIDER."); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
|
JMPIjvm::checkException(env); |
|
handler.deliver(*cop); |
|
} | } |
} | } |
handler.complete(); |
|
} | } |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumerateInstanceNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"); |
| |
else { |
if (id != NULL) |
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
{ |
rClass,rRole,resRole); |
eMethodFound = METHOD_INSTANCEPROVIDER2; |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Found METHOD_INSTANCEPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
| |
STAT_PMS_PROVIDEREND; |
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"enumerateInstanceNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;)" |
|
"[Lorg/pegasus/jmpi/CIMObjectPath;"); |
| |
handler.processing(); |
if (id != NULL) |
if (jAr) { |
{ |
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
eMethodFound = METHOD_CIMINSTANCEPROVIDER2; |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
jobject jCop=env->GetObjectArrayElement(jAr,i); |
"handleEnumerateInstanceNamesRequest: " |
JMPIjvm::checkException(env); |
"Found METHOD_CIMINSTANCEPROVIDER2."); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
|
JMPIjvm::checkException(env); |
|
handler.deliver(*cop); |
|
} |
|
} | } |
handler.complete(); |
|
} | } |
} | } |
HandlerCatch(handler); |
|
| |
if (env) JMPIjvm::detachThread(); |
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"No method provider found!"); |
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); |
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
} | } |
| |
|
JMPIjvm::checkException(env); |
| |
Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw() |
switch (eMethodFound) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
case METHOD_CIMINSTANCEPROVIDER: |
"JMPIProviderManager::handleReferencesRequest"); |
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
HandlerIntro(References,message,request,response, |
JMPIjvm::checkException(env); |
handler,Array<CIMObject>()); |
|
JNIEnv *env=NULL; |
|
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { |
CIMClass cls; |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"DefaultProviderManager::handleReferencesRequest - Host name: $0 Name space: $1 Class name: $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
request->objectName.getClassName().getString()); |
|
| |
// make target object path |
try |
CIMObjectPath objectPath( |
{ |
System::getHostName(), |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
request->nameSpace, |
"handleEnumerateInstanceNamesRequest: " |
request->objectName.getClassName()); |
"enter(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
objectPath.setKeyBindings(request->objectName.getKeyBindings()); |
AutoMutex lock (pr._cimomMutex); |
| |
CIMObjectPath resultPath( |
cls = pr._cimom_handle->getClass(context, |
System::getHostName(), |
|
request->nameSpace, | request->nameSpace, |
request->resultClass.getString()); |
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
| |
// resolve provider name |
} |
ProviderName name = _resolveProviderName( |
catch (CIMException e) |
request->operationContext.get(ProviderIdContainer::NAME)); |
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
// get cached or load new provider module |
PEG_METHOD_EXIT(); |
JMPIProvider::OpProviderHolder ph = |
throw; |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
} |
| |
// convert arguments |
CIMClass *pcls = new CIMClass (cls); |
OperationContext context; |
|
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
JMPIjvm::checkException(env); |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
| |
// forward request |
jlong jcimClassRef = DEBUG_ConvertCToJava( |
JMPIProvider & pr=ph.GetProvider(); |
CIMClass*, |
|
jlong, |
|
pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
JMPIjvm::checkException(env); |
"Calling provider.references: " + pr.getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::references"<<" role: >"<<request->role<<"< aCls "<< |
StatProviderTimeMeasurement providerTime(response); |
request->resultClass<<endl); |
|
| |
JvmVector *jv; |
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
env=JMPIjvm::attachThread(&jv); |
(jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jcimClass); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jstring rRole=env->NewStringUTF(request->role.getCString()); |
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
| |
STAT_GETSTARTTIME; |
JMPIjvm::checkException(env); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"references", |
jlong jcopRetRef = env->CallLongMethod( |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
jcopRet, |
"ZZ[Ljava/lang/String;)Ljava/util/Vector;"); |
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
| |
if (id==NULL) { |
|
env->ExceptionClear(); |
|
id=env->GetMethodID((jclass)pr.jProviderClass,"references", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
mode24=true; |
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
} | } |
JMPIjvm::checkException(env); |
|
| |
pl=getList(jv,env,request->propertyList); |
case METHOD_CIMINSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
if (!mode24) { |
|
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
|
rRole,false,false,pl); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"enter(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
| |
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
|
|
jlong jcimClassRef = DEBUG_ConvertCToJava(CIMClass*, jlong, pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jcimClass); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
if (joc) |
inst.getClassName(),false,true,true,CIMPropertyList()); |
{ |
const CIMObjectPath& op=inst.getPath(); |
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
CIMObjectPath iop=inst.buildPath(cls); |
|
iop.setNameSpace(op.getNameSpace()); |
JMPIjvm::checkException(env); |
inst.setPath(iop); |
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
| |
handler.deliver(inst); |
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
} | } |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_INSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
} | } |
| |
else { |
CIMClass *pcls = new CIMClass (cls); |
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef, |
|
rRole,false,false,pl); |
JMPIjvm::checkException(env); |
|
|
|
jlong jcimClassRef = DEBUG_ConvertCToJava( |
|
CIMClass*, |
|
jlong, |
|
pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jVec = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jcimClass); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
| |
handler.processing(); | handler.processing(); |
if (jAr) { |
if (jVec) { |
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jInst=env->GetObjectArrayElement(jAr,i); |
|
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst)); |
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace, |
handler.deliver(*copRet); |
inst.getClassName(),false,true,true,CIMPropertyList()); |
} |
const CIMObjectPath& op=inst.getPath(); |
} |
CIMObjectPath iop=inst.buildPath(cls); |
handler.complete(); |
iop.setNameSpace(op.getNameSpace()); |
break; |
inst.setPath(iop); |
} |
|
|
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
| |
handler.deliver(inst); |
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcimClassRef = DEBUG_ConvertCToJava( |
|
CIMClass*, |
|
jlong, |
|
pcls); |
|
jobject jcimClass = env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcimClassRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jVec = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
true, |
|
jcimClass); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
} | } |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
} | } |
| |
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleEnumerateInstanceNamesRequest: " |
|
"Unknown method provider!"); |
|
break; |
|
} |
|
} |
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
| |
|
|
return(response); | return(response); |
} | } |
| |
|
Message * JMPIProviderManager::handleCreateInstanceRequest( |
Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw() |
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_METHOD_ENTER( |
"JMPIProviderManager::handleReferenceNamesRequest"); |
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleCreateInstanceRequest"); |
|
|
|
HandlerIntro(CreateInstance,message,request,response,handler); |
| |
HandlerIntro(ReferenceNames,message,request,response, |
typedef enum { |
handler,Array<CIMObjectPath>()); |
METHOD_UNKNOWN = 0, |
|
METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER |
|
METHOD_INSTANCEPROVIDER2 // same as METHOD_CIMINSTANCEPROVIDER2 |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
Boolean mode24=false; |
|
CIMPropertyList propertyList; |
|
jobjectArray pl=NULL; |
|
| |
try { | try { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
"JMPIProviderManager::handleReferenceNamesRequest - Host name: $0 Name space: $1 Class name: $2", |
"handleCreateInstanceRequest: " |
System::getHostName(), |
"name space = %s class name = %s", |
request->nameSpace.getString(), |
(const char*)request->nameSpace.getString().getCString(), |
request->objectName.getClassName().getString()); |
(const char*)request-> |
|
newInstance.getPath().getClassName().getString().getCString() |
|
)); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( |
CIMObjectPath *objectPath = |
System::getHostName(), |
new CIMObjectPath( |
request->nameSpace, |
|
request->objectName.getClassName()); |
|
|
|
objectPath.setKeyBindings(request->objectName.getKeyBindings()); |
|
|
|
CIMObjectPath resultPath( |
|
System::getHostName(), | System::getHostName(), |
request->nameSpace, | request->nameSpace, |
request->resultClass.getString()); |
request->newInstance.getPath().getClassName(), |
|
request->newInstance.getPath().getKeyBindings()); |
| |
// resolve provider name | // resolve provider name |
ProviderName name = _resolveProviderName( | ProviderName name = _resolveProviderName( |
|
|
| |
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = | JMPIProvider::OpProviderHolder ph = |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
providerManager.getProvider( |
|
name.getPhysicalName(), |
// convert arguments |
name.getLogicalName(), |
OperationContext context; |
String::EMPTY); |
|
|
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
|
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
| |
|
// forward request |
JMPIProvider & pr=ph.GetProvider(); | JMPIProvider & pr=ph.GetProvider(); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
"Calling provider.referenceNames: " + pr.getName()); |
"handleCreateInstanceRequest: " |
|
"Calling provider: %s", (const char*)pr.getName().getCString())); |
| |
DDD(cerr<<"--- JMPIProviderManager::referenceNames"<<" role: >"<<request->role<<"< aCls "<< |
JvmVector *jv = 0; |
request->resultClass<<endl); |
|
| |
JvmVector *jv; |
|
env=JMPIjvm::attachThread(&jv); | env=JMPIjvm::attachThread(&jv); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
if (!env) |
jv->CIMObjectPathNewI,(jint)&objectPath); |
{ |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleCreateInstanceRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
| |
jstring rRole=env->NewStringUTF(request->role.getCString()); |
PEG_METHOD_EXIT(); |
JMPIjvm::checkException(env); |
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); | JMPIProvider::pm_service_op_lock op_lock(&pr); |
| |
STAT_GETSTARTTIME; |
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get( |
|
ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"referenceNames", |
if (interfaceType == "JMPI") |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"); |
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"createInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMInstance;)" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;"); |
| |
if (id==NULL) { |
if (id != NULL) |
env->ExceptionClear(); |
{ |
id=env->GetMethodID((jclass)pr.jProviderClass,"referenceNames", |
eMethodFound = METHOD_INSTANCEPROVIDER; |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
JMPIjvm::checkException(env); |
"handleCreateInstanceRequest: " |
mode24=true; |
"Found METHOD_INSTANCEPROVIDER."); |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"createInstance", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMInstance;)" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER2."); |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleCreateInstanceRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
} | } |
JMPIjvm::checkException(env); |
|
| |
if (!mode24) { |
|
jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,rRole); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
switch (eMethodFound) |
|
{ |
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
| |
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) { |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i); |
|
|
CIMInstance *ci = new CIMInstance (request->newInstance); |
|
jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci); |
|
jobject jci = env->NewObject( |
|
jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewJ, |
|
jciRef); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateInstanceRequest: " |
|
"id = %p, jcop = %p, jci = %p", |
|
id,jcop,jci)); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jci); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
handler.deliver(*cop); |
|
} |
handler.processing(); |
|
|
|
if (jcopRet) { |
|
jlong jCopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jCopRetRef); |
|
|
|
handler.deliver(*copRet); |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
} | } |
| |
else { |
case METHOD_INSTANCEPROVIDER2: |
jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,rRole); |
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
CIMInstance *ci = new CIMInstance (request->newInstance); |
|
jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci); |
|
jobject jci = env->NewObject( |
|
jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewJ, |
|
jciRef); |
| |
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jCop=env->GetObjectArrayElement(jAr,i); |
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateInstanceRequest: " |
|
"id = %p, jcop = %p, jci = %p", |
|
id,jcop,jci)); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jci); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod |
|
(jCop,JMPIjvm::jv.CIMObjectPathCInst)); |
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
handler.deliver(*cop); |
|
} | } |
|
|
|
handler.processing(); |
|
|
|
if (jcopRet) { |
|
jlong jCopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jCopRetRef); |
|
|
|
handler.deliver(*copRet); |
} | } |
handler.complete(); | handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleCreateInstanceRequest: Unknown method provider!"); |
|
break; |
|
} |
} | } |
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
|
|
return(response); | return(response); |
} | } |
| |
|
Message * JMPIProviderManager::handleModifyInstanceRequest( |
Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw() |
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
PEG_METHOD_ENTER( |
"JMPIProviderManager::handleInvokeMethodRequest"); |
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleModifyInstanceRequest"); |
| |
HandlerIntroMethod(InvokeMethod,message,request,response, |
HandlerIntro(ModifyInstance,message,request,response,handler); |
handler); |
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMINSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2 |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
Boolean mode24=false; |
|
| |
try { | try { |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
"JMPIProviderManager::handleInvokeMethodRequest - Host name: $0 Name space: $1 Class name: $2", |
"handleModifyInstanceRequest: " |
System::getHostName(), |
"name space = %s class name = %s", |
request->nameSpace.getString(), |
(const char*)request->nameSpace.getString().getCString(), |
request->instanceName.getClassName().getString()); |
(const char*)request->modifiedInstance.getPath().getClassName() |
|
.getString().getCString() |
|
)); |
| |
// make target object path | // make target object path |
CIMObjectPath objectPath( |
CIMObjectPath *objectPath = |
|
new CIMObjectPath( |
System::getHostName(), | System::getHostName(), |
request->nameSpace, | request->nameSpace, |
request->instanceName.getClassName(), |
request->modifiedInstance.getPath().getClassName(), |
request->instanceName.getKeyBindings()); |
request->modifiedInstance.getPath ().getKeyBindings()); |
| |
// resolve provider name | // resolve provider name |
ProviderName name = _resolveProviderName( | ProviderName name = _resolveProviderName( |
request->operationContext.get(ProviderIdContainer::NAME)); | request->operationContext.get(ProviderIdContainer::NAME)); |
| |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleModifyInstanceRequest: " |
|
"provider name physical = %s, logical = %s", |
|
(const char*)name.getPhysicalName().getCString(), |
|
(const char*)name.getLogicalName().getCString() |
|
)); |
|
|
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = | JMPIProvider::OpProviderHolder ph = |
providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY); |
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
| |
// convert arguments |
// forward request |
OperationContext context; |
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleModifyInstanceRequest: " |
|
"Calling provider: %s", (const char*)pr.getName().getCString())); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1, |
|
"handleModifyInstanceRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get( |
|
ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"setInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMInstance;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleModifyInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"setInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Z[Ljava/lang/String)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMINSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleModifyInstanceRequest: " |
|
"Found METHOD_CIMINSTANCEPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"setInstance", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMInstance;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleModifyInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER2."); |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleModifyInstanceRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_INSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
|
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ci = new CIMInstance (request->modifiedInstance); |
|
jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci); |
|
jobject jci = env->NewObject( |
|
jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewJ, |
|
jciRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jci); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
break; |
|
} |
|
|
|
case METHOD_CIMINSTANCEPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ci = new CIMInstance (request->modifiedInstance); |
|
jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci); |
|
jobject jci = env->NewObject( |
|
jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewJ, |
|
jciRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jci, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
break; |
|
} |
|
|
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ci = new CIMInstance (request->modifiedInstance); |
|
jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci); |
|
jobject jci = env->NewObject( |
|
jv->CIMInstanceClassRef, |
|
jv->CIMInstanceNewJ, |
|
jciRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jci); |
|
|
|
JMPIjvm::checkException(env); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleModifyInstanceRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleDeleteInstanceRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleDeleteInstanceRequest"); |
|
|
|
HandlerIntro(DeleteInstance,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER |
|
METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2 |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try { |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleDeleteInstanceRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
request->instanceName.getKeyBindings()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleDeleteInstanceRequest: " |
|
"Calling provider: %s", (const char*)pr.getName().getCString())); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleDeleteInstanceRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID((jclass)pr.jProviderClass, |
|
"deleteInstance", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER."); |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"deleteInstance", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteInstanceRequest: " |
|
"Found METHOD_INSTANCEPROVIDER2."); |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleDeleteInstanceRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_INSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
break; |
|
} |
|
|
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider, |
|
id, |
|
jcop); |
|
|
|
JMPIjvm::checkException(env); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleDeleteInstanceRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleExecQueryRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleExecQueryRequest"); |
|
|
|
HandlerIntro(ExecQuery,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMINSTANCEPROVIDER, |
|
METHOD_CIMINSTANCEPROVIDER2, |
|
METHOD_INSTANCEPROVIDER, |
|
METHOD_INSTANCEPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try { |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleExecQueryRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(), |
|
request->nameSpace, |
|
request->className); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// convert arguments |
|
OperationContext context; |
|
|
|
context.insert( |
|
request->operationContext.get(IdentityContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleExecQueryRequest: " |
|
"Calling provider: %s, queryLanguage: %s, query: %s", |
|
(const char*)pr.getName().getCString(), |
|
(const char*)request->queryLanguage.getCString(), |
|
(const char*)request->query.getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get( |
|
ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"execQuery", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"execQuery", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMINSTANCEPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"Found METHOD_CIMINSTANCEPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"execQuery", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;" |
|
"Ljava/lang/String;)Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_INSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"execQuery", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;" |
|
"Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMINSTANCEPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"Found METHOD_CIMINSTANCEPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMINSTANCEPROVIDER: |
|
{ |
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jqueryLanguage = env->NewStringUTF( |
|
request->queryLanguage.getCString()); |
|
jstring jquery = env->NewStringUTF( |
|
request->query.getCString()); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"enter(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
|
|
jobject jCc=env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jquery, |
|
jqueryLanguage, |
|
jCc); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMINSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jqueryLanguage = env->NewStringUTF( |
|
request->queryLanguage.getCString()); |
|
jstring jquery = env->NewStringUTF( |
|
request->query.getCString()); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"enter(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"exit(METHOD_CIMINSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: " |
|
"Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
|
|
jobject jCc=env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr = (jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jquery, |
|
jqueryLanguage, |
|
jCc); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_INSTANCEPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jqueryLanguage = env->NewStringUTF( |
|
request->queryLanguage.getCString()); |
|
jstring jquery = env->NewStringUTF( |
|
request->query.getCString()); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
|
|
|
jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
|
|
jobject jCc=env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jVec = env->CallObjectMethod ((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jCc, |
|
jquery, |
|
jqueryLanguage); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jVec) |
|
{ |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i < m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: jciRet = %p",jciRet)); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: done!"); |
|
|
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_INSTANCEPROVIDER: |
|
{ |
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jqueryLanguage = env->NewStringUTF( |
|
request->queryLanguage.getCString()); |
|
jstring jquery = env->NewStringUTF( |
|
request->query.getCString()); |
|
|
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"enter(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
request->className, |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleExecQueryRequest: " |
|
"exit(METHOD_INSTANCEPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)request->className.getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: " |
|
"Caught CIMExcetion(METHOD_INSTANCEPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)request->className.getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
CIMClass *pcls = new CIMClass (cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls); |
|
|
|
jobject jCc=env->NewObject( |
|
jv->CIMClassClassRef, |
|
jv->CIMClassNewJ, |
|
jcls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jql = 0; // @BUG - how to convert? |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jVec = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jquery, |
|
jql, |
|
jCc); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleExecQueryRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleAssociatorsRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleAssociatorsRequest"); |
|
|
|
HandlerIntro(Associators,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMASSOCIATORPROVIDER, |
|
METHOD_CIMASSOCIATORPROVIDER2, |
|
METHOD_ASSOCIATORPROVIDER, |
|
METHOD_ASSOCIATORPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleAssociatorsRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
objectName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->objectName.getClassName(), |
|
request->objectName.getKeyBindings()); |
|
CIMObjectPath *assocPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->assocClass.getString()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// convert arguments |
|
OperationContext context; |
|
|
|
context.insert( |
|
request->operationContext.get(IdentityContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleAssociatorsRequest: " |
|
"Calling provider: %s, role: %s, aCls: %s", |
|
(const char*)pr.getName().getCString(), |
|
(const char*)request->role.getCString(), |
|
(const char*)request->assocClass.getString().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get( |
|
ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"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;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associators", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Ljava/lang/String;" |
|
"ZZ[Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associators", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;Ljava/lang/String;" |
|
"Ljava/lang/String;ZZ[Ljava/lang/String;)" |
|
"Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associators", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;Ljava/lang/String;" |
|
"Ljava/lang/String;ZZ[Ljava/lang/String;" |
|
")[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: No method found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF( |
|
request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF( |
|
request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"enter(METHOD_CIMASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"exit(METHOD_CIMASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: " |
|
"Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"enter(METHOD_CIMASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"exit(METHOD_CIMASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: " |
|
"Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"enter(METHOD_ASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass( |
|
context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"exit(METHOD_ASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: " |
|
"Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"enter(METHOD_ASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorsRequest: " |
|
"exit(METHOD_ASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: " |
|
"Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*ciRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorsRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleAssociatorNamesRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleAssociatorNamesRequest"); |
|
|
|
HandlerIntro(AssociatorNames,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMASSOCIATORPROVIDER, |
|
METHOD_CIMASSOCIATORPROVIDER2, |
|
METHOD_ASSOCIATORPROVIDER, |
|
METHOD_ASSOCIATORPROVIDER2 |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleAssociatorNamesRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
objectName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->objectName.getClassName(), |
|
request->objectName.getKeyBindings()); |
|
CIMObjectPath *assocPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->assocClass.getString()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleAssociatorNamesRequest: " |
|
"Calling provider: %s, role: %s, aCls: %s", |
|
(const char*)pr.getName().getCString(), |
|
(const char*)request->role.getCString(), |
|
(const char*)request->assocClass.getString().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorNamesRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associatorNames", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Ljava/lang/String;)" |
|
"Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associatorNames", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associatorNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Ljava/lang/String;)" |
|
"Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"associatorNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;Ljava/lang/String;" |
|
"Ljava/lang/String;)[" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorNames: No method found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
assocPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jResultClass = |
|
env->NewStringUTF( |
|
request->resultClass.getString().getCString()); |
|
jstring jRole = |
|
env->NewStringUTF(request->role.getCString()); |
|
jstring jResultRole = |
|
env->NewStringUTF(request->resultRole.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: assocName = %s ", |
|
(const char*)assocPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultClass = %s ", |
|
(const char*)request->resultClass.getString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleAssociatorNamesRequest: resultRole = %s ", |
|
(const char*)request->resultRole.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jResultClass, |
|
jRole, |
|
jResultRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleAssociatorNamesRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleReferencesRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleReferencesRequest"); |
|
|
|
HandlerIntro(References,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMASSOCIATORPROVIDER, |
|
METHOD_CIMASSOCIATORPROVIDER2, |
|
METHOD_ASSOCIATORPROVIDER, |
|
METHOD_ASSOCIATORPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleReferencesRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
objectName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->objectName.getClassName(), |
|
request->objectName.getKeyBindings()); |
|
CIMObjectPath *resultPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->resultClass.getString()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// convert arguments |
|
OperationContext context; |
|
|
|
context.insert( |
|
request->operationContext.get(IdentityContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert( |
|
request->operationContext.get(ContentLanguageListContainer::NAME)); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleReferencesRequest: " |
|
"Calling provider: %s, role: %s, refCls: %s", |
|
(const char*)pr.getName().getCString(), |
|
(const char*)request->role.getCString(), |
|
(const char*)request->resultClass.getString().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"references", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"ZZ[Ljava/lang/String;)Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"references", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"ZZ[Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"references", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"ZZ[Ljava/lang/String;)Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"references", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;ZZ[Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMInstance;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: assocName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"enter(METHOD_CIMASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"exit(METHOD_CIMASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: " |
|
"Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
_fixCIMObjectPath(ciRet, cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMObject coRet(*ciRet); |
|
handler.deliver(coRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: assocName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"enter(METHOD_CIMASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"exit(METHOD_CIMASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: " |
|
"Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
const CIMObjectPath& op = ciRet->getPath(); |
|
CIMObjectPath iop = ciRet->buildPath(cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
iop.setNameSpace(op.getNameSpace()); |
|
ciRet->setPath(iop); |
|
|
|
CIMObject coRet(*ciRet); |
|
handler.deliver(coRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: assocName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeClassOrigin = false"); |
|
#endif |
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"enter(METHOD_ASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"exit(METHOD_ASSOCIATORPROVIDER): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: " |
|
"Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
const CIMObjectPath& op = ciRet->getPath(); |
|
CIMObjectPath iop = ciRet->buildPath(cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
iop.setNameSpace(op.getNameSpace()); |
|
ciRet->setPath(iop); |
|
|
|
CIMObject coRet(*ciRet); |
|
handler.deliver(coRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobjectArray jPropertyList = getList(jv,env,request->propertyList); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: assocName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: pathName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeQualifiers = false"); |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: includeClassOrigin = false"); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jRole, |
|
JMPI_INCLUDE_QUALIFIERS, |
|
request->includeClassOrigin, |
|
jPropertyList); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jciRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jciRetRef = env->CallLongMethod( |
|
jciRet, |
|
JMPIjvm::jv.CIMInstanceCInst); |
|
CIMInstance *ciRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMInstance*, |
|
jciRetRef); |
|
CIMClass cls; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"enter(METHOD_ASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
AutoMutex lock (pr._cimomMutex); |
|
|
|
cls = pr._cimom_handle->getClass(context, |
|
request->nameSpace, |
|
ciRet->getClassName(), |
|
false, |
|
true, |
|
true, |
|
CIMPropertyList()); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"exit(METHOD_ASSOCIATORPROVIDER2): " |
|
"cimom_handle->getClass(%s).", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString() |
|
)); |
|
|
|
} |
|
catch (CIMException e) |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: " |
|
"Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) " |
|
"during cimom_handle->getClass(%s): %s ", |
|
(const char*)ciRet-> |
|
getClassName().getString().getCString(), |
|
(const char*)e.getMessage().getCString() |
|
)); |
|
|
|
PEG_METHOD_EXIT(); |
|
throw; |
|
} |
|
|
|
const CIMObjectPath& op = ciRet->getPath(); |
|
CIMObjectPath iop = ciRet->buildPath(cls); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
iop.setNameSpace(op.getNameSpace()); |
|
ciRet->setPath(iop); |
|
|
|
CIMObject coRet(*ciRet); |
|
handler.deliver(coRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferencesRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleReferenceNamesRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleReferenceNamesRequest"); |
|
|
|
HandlerIntro(ReferenceNames,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMASSOCIATORPROVIDER, |
|
METHOD_CIMASSOCIATORPROVIDER2, |
|
METHOD_ASSOCIATORPROVIDER, |
|
METHOD_ASSOCIATORPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleReferenceNamesRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
objectName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->objectName.getClassName(), |
|
request->objectName.getKeyBindings()); |
|
CIMObjectPath *resultPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->resultClass.getString()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleReferenceNamesRequest: " |
|
"Calling provider: %s, role: %s, refCls: %s", |
|
(const char*)pr.getName().getCString(), |
|
(const char*)request->role.getCString(), |
|
(const char*)request->resultClass.getString().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferenceNamesRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"referenceNames", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)" |
|
"Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferencesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"referenceNames", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
")[Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"referenceNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
")Ljava/util/Vector;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_ASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: " |
|
"Found METHOD_ASSOCIATORPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"referenceNames", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;)" |
|
"[Lorg/pegasus/jmpi/CIMObjectPath;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMASSOCIATORPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: " |
|
"Found METHOD_CIMASSOCIATORPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferenceNames: No method found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: assocName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jPathName, |
|
jAssociationName, |
|
jRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: assocName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jAr=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jPathName, |
|
jAssociationName, |
|
jRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jAr) { |
|
for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) { |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->GetObjectArrayElement(jAr,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER: |
|
{ |
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: assocName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: pathName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
jAssociationName, |
|
jPathName, |
|
jRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
|
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_ASSOCIATORPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jAssociationNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
resultPath); |
|
jobject jAssociationName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jAssociationNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jPathNameRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jPathName = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jPathNameRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jRole = env->NewStringUTF(request->role.getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
#ifdef PEGASUS_DEBUG |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: assocName = %s ", |
|
(const char*)objectPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: pathName = %s ", |
|
(const char*)resultPath->toString().getCString())); |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleReferenceNamesRequest: role = %s ", |
|
(const char*)request->role.getCString())); |
|
#endif |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobjectArray jVec=(jobjectArray)env->CallObjectMethod( |
|
(jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jAssociationName, |
|
jPathName, |
|
jRole); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
if (jVec) { |
|
for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); |
|
i<m; i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
jobject jcopRet = env->CallObjectMethod( |
|
jVec, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
JMPIjvm::checkException(env); |
|
jlong jcopRetRef = env->CallLongMethod( |
|
jcopRet, |
|
JMPIjvm::jv.CIMObjectPathCInst); |
|
JMPIjvm::checkException(env); |
|
CIMObjectPath *copRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMObjectPath*, |
|
jcopRetRef); |
|
handler.deliver(*copRet); |
|
} |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferenceNamesRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleGetPropertyRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleGetPropertyRequest"); |
|
|
|
HandlerIntro(GetProperty,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_PROPERTYPROVIDER, |
|
METHOD_PROPERTYPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try { |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleGetPropertyRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
request->instanceName.getKeyBindings()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleReferenceNamesRequest: " |
|
"Calling provider: %s", |
|
(const char*)pr.getName().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleReferenceNamesRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"getPropertyValue", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_PROPERTYPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetPropertyRequest: " |
|
"Found METHOD_PROPERTYPROVIDER."); |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"getPropertyValue", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_PROPERTYPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleGetPropertyRequest: " |
|
"Found METHOD_PROPERTYPROVIDER2."); |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleGetPropertyRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_PROPERTYPROVIDER: |
|
{ |
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring joclass = |
|
env->NewStringUTF( |
|
request->instanceName.getClassName().getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jpName = |
|
env->NewStringUTF( |
|
request->propertyName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
joclass, |
|
jpName); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
|
|
if (jvalRet) |
|
{ |
|
jlong jvalRetRef = env->CallLongMethod( |
|
jvalRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jvalRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*valRet); |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_PROPERTYPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring joclass = env->NewStringUTF( |
|
request->instanceName.getClassName().getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jpName = env->NewStringUTF( |
|
request->propertyName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
joclass, |
|
jpName); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
|
|
if (jvalRet) |
|
{ |
|
jlong jvalRetRef = env->CallLongMethod( |
|
jvalRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jvalRetRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliver(*valRet); |
|
} |
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleGetPropertyRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleSetPropertyRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleSetPropertyRequest"); |
|
|
|
HandlerIntro(SetProperty,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_PROPERTYPROVIDER, |
|
METHOD_PROPERTYPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try |
|
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleSetPropertyRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
request->instanceName.getKeyBindings()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
// forward request |
|
JMPIProvider &pr = ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleSetPropertyRequest: " |
|
"Calling provider. setPropertyValue: %s", |
|
(const char*)pr.getName().getCString())); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"setPropertyValue", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_PROPERTYPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleSetPropertyRequest: " |
|
"Found METHOD_PROPERTYPROVIDER."); |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"setPropertyValue", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_PROPERTYPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleSetPropertyRequest: " |
|
"Found METHOD_PROPERTYPROVIDER2."); |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleSetPropertyRequest: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_PROPERTYPROVIDER: |
|
{ |
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring joclass = |
|
env->NewStringUTF( |
|
request->instanceName.getClassName().getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jpName = |
|
env->NewStringUTF( |
|
request->propertyName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMValue *val = new CIMValue (request->newValue); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jvalref = DEBUG_ConvertCToJava(CIMValue*, jlong, val); |
|
jobject jval = env->NewObject( |
|
jv->CIMValueClassRef, |
|
jv->CIMValueNewJ, |
|
jvalref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod ((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
joclass, |
|
jpName, |
|
jval); |
|
|
|
JMPIjvm::checkException(env); |
|
break; |
|
} |
|
|
|
case METHOD_PROPERTYPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopref = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring joclass = |
|
env->NewStringUTF( |
|
request->instanceName.getClassName().getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jpName = |
|
env->NewStringUTF( |
|
request->propertyName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
CIMValue *val = new CIMValue (request->newValue); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jvalref = DEBUG_ConvertCToJava (CIMValue*, jlong, val); |
|
jobject jval = env->NewObject( |
|
jv->CIMValueClassRef, |
|
jv->CIMValueNewJ, |
|
jvalref); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
env->CallVoidMethod ((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
joclass, |
|
jpName, |
|
jval); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleSetPropertyRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
Message * JMPIProviderManager::handleInvokeMethodRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleInvokeMethodRequest"); |
|
|
|
HandlerIntro(InvokeMethod,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_CIMMETHODPROVIDER, |
|
METHOD_CIMMETHODPROVIDER2, |
|
METHOD_METHODPROVIDER, |
|
METHOD_METHODPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try { |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleInvokeMethodRequest: " |
|
"name space = %s class name = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)request-> |
|
instanceName.getClassName().getString().getCString() |
|
)); |
|
|
|
// make target object path |
|
CIMObjectPath *objectPath = new CIMObjectPath( |
|
System::getHostName(), |
|
request->nameSpace, |
|
request->instanceName.getClassName(), |
|
request->instanceName.getKeyBindings()); |
|
|
|
// resolve provider name |
|
ProviderName name = _resolveProviderName( |
|
request->operationContext.get(ProviderIdContainer::NAME)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
|
name.getPhysicalName(), |
|
name.getLogicalName(), |
|
String::EMPTY); |
|
|
|
JMPIProvider &pr=ph.GetProvider(); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleInvokeMethodRequest: " |
|
"Calling provider: %s", |
|
(const char*)pr.getName().getCString() |
|
)); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleInvokeMethodRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"invokeMethod", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/util/Vector;Ljava/util/Vector;)" |
|
"Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_METHODPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleInvokeMethodRequest: " |
|
"Found METHOD_PROPERTYPROVIDER."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"invokeMethod", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"[Lorg/pegasus/jmpi/CIMArgument;" |
|
"[Lorg/pegasus/jmpi/CIMArgument;)" |
|
"Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMMETHODPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleInvokeMethodRequest: " |
|
"Found METHOD_CIMMETHODPROVIDER."); |
|
} |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"invokeMethod", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"Ljava/util/Vector;Ljava/util/Vector;)" |
|
"Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_METHODPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleInvokeMethodRequest: " |
|
"Found METHOD_METHODPROVIDER2."); |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
env->ExceptionClear(); |
|
|
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"invokeMethod", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;" |
|
"Ljava/lang/String;" |
|
"[Lorg/pegasus/jmpi/CIMArgument;[" |
|
"Lorg/pegasus/jmpi/CIMArgument;)" |
|
"Lorg/pegasus/jmpi/CIMValue;"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_CIMMETHODPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleInvokeMethodRequest: " |
|
"Found METHOD_CIMMETHODPROVIDER2."); |
|
} |
|
} |
|
} |
|
|
|
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleInvokeMethod: No method provider found!"); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on " |
|
"InterfaceType.")); |
|
} |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
switch (eMethodFound) |
|
{ |
|
case METHOD_CIMMETHODPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jMethod = |
|
env->NewStringUTF( |
|
request->methodName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
Uint32 m=request->inParameters.size(); |
|
|
|
jobjectArray jArIn=(jobjectArray)env->NewObjectArray( |
|
m, |
|
jv->CIMArgumentClassRef, |
|
NULL); |
|
|
|
for (Uint32 i=0; i<m; i++) { |
|
CIMParamValue *parm = new CIMParamValue(request->inParameters[i]); |
|
jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm); |
|
jobject jArg = env->NewObject( |
|
jv->CIMArgumentClassRef, |
|
jv->CIMArgumentNewJ, |
|
jArgRef); |
|
|
|
env->SetObjectArrayElement(jArIn,i,jArg); |
|
} |
|
|
|
jobjectArray jArOut=(jobjectArray)env->NewObjectArray( |
|
24, |
|
jv->CIMArgumentClassRef, |
|
NULL); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jMethod, |
|
jArIn, |
|
jArOut); |
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
|
|
jlong jValueRetRef = env->CallLongMethod( |
|
jValueRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valueRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jValueRetRef); |
|
|
|
handler.deliver(*valueRet); |
|
|
|
for (int i=0; i<24; i++) { |
|
jobject jArg = env->GetObjectArrayElement(jArOut,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (jArg==NULL) |
|
break; |
|
|
|
jlong jpRef = env->CallLongMethod( |
|
jArg, |
|
JMPIjvm::jv.CIMArgumentCInst); |
|
CIMParamValue *p = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMParamValue*, |
|
jpRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliverParamValue(*p); |
|
} |
|
|
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_CIMMETHODPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jMethod = |
|
env->NewStringUTF(request->methodName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
Uint32 m=request->inParameters.size(); |
|
|
|
jobjectArray jArIn=(jobjectArray)env->NewObjectArray( |
|
m, |
|
jv->CIMArgumentClassRef, |
|
NULL); |
|
|
|
for (Uint32 i=0; i<m; i++) { |
|
CIMParamValue *parm = new CIMParamValue(request->inParameters[i]); |
|
jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm); |
|
jobject jArg = env->NewObject( |
|
jv->CIMArgumentClassRef, |
|
jv->CIMArgumentNewJ, |
|
jArgRef); |
|
|
|
env->SetObjectArrayElement(jArIn,i,jArg); |
|
} |
|
|
|
jobjectArray jArOut=(jobjectArray)env->NewObjectArray( |
|
24, |
|
jv->CIMArgumentClassRef, |
|
NULL); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jMethod, |
|
jArIn, |
|
jArOut); |
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
|
|
jlong jValueRetRef = env->CallLongMethod( |
|
jValueRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valueRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jValueRetRef); |
|
|
|
handler.deliver(*valueRet); |
|
|
|
for (int i=0; i<24; i++) { |
|
jobject jArg = env->GetObjectArrayElement(jArOut,i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
if (jArg==NULL) |
|
break; |
|
|
|
jlong jpRef = env->CallLongMethod( |
|
jArg, |
|
JMPIjvm::jv.CIMArgumentCInst); |
|
CIMParamValue *p = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMParamValue*, |
|
jpRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliverParamValue(*p); |
|
} |
|
|
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_METHODPROVIDER: |
|
{ |
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jMethod = env->NewStringUTF( |
|
request->methodName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
for (int i=0,m=request->inParameters.size(); i<m; i++) |
|
{ |
|
const CIMParamValue &parm = request->inParameters[i]; |
|
const CIMValue v = parm.getValue(); |
|
CIMProperty *p = new CIMProperty( |
|
parm.getParameterName(), |
|
v, |
|
v.getArraySize()); |
|
jlong jpRef = DEBUG_ConvertCToJava (CIMProperty*, jlong, p); |
|
jobject jp = env->NewObject( |
|
jv->CIMPropertyClassRef, |
|
jv->CIMPropertyNewJ, |
|
jpRef); |
|
|
|
env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp); |
|
} |
|
|
|
jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew); |
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
jcop, |
|
jMethod, |
|
jVecIn, |
|
jVecOut); |
|
JMPIjvm::checkException(env); |
|
|
|
handler.processing(); |
|
|
|
jlong jValueRetRef = env->CallLongMethod( |
|
jValueRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valueRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jValueRetRef); |
|
|
|
handler.deliver(*valueRet); |
|
|
|
for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jProp = env->CallObjectMethod( |
|
jVecOut, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jpRef = env->CallLongMethod( |
|
jProp, |
|
JMPIjvm::jv.CIMPropertyCInst); |
|
CIMProperty *p = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMProperty*, |
|
jpRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliverParamValue( |
|
CIMParamValue(p->getName().getString(), |
|
p->getValue())); |
|
} |
|
|
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_METHODPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ, |
|
jocRef); |
|
|
|
jlong jcopRef = DEBUG_ConvertCToJava( |
|
CIMObjectPath*, |
|
jlong, |
|
objectPath); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ, |
|
jcopRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jstring jMethod = env->NewStringUTF( |
|
request->methodName.getString().getCString()); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
for (int i=0,m=request->inParameters.size(); i<m; i++) |
|
{ |
|
const CIMParamValue &parm = request->inParameters[i]; |
|
const CIMValue v = parm.getValue(); |
|
CIMProperty *p = new CIMProperty( |
|
parm.getParameterName(), |
|
v, |
|
v.getArraySize()); |
|
jlong jpRef = DEBUG_ConvertCToJava(CIMProperty*, jlong, p); |
|
jobject jp = env->NewObject( |
|
jv->CIMPropertyClassRef, |
|
jv->CIMPropertyNewJ, |
|
jpRef); |
|
|
|
env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp); |
|
} |
|
|
|
jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew); |
|
JMPIjvm::checkException(env); |
|
|
|
StatProviderTimeMeasurement providerTime(response); |
|
|
|
jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jcop, |
|
jMethod, |
|
jVecIn, |
|
jVecOut); |
|
JMPIjvm::checkException(env); |
|
|
|
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
|
JMPIjvm::checkException(env); |
|
} |
|
|
|
handler.processing(); |
|
|
|
jlong jValueRetRef = env->CallLongMethod( |
|
jValueRet, |
|
JMPIjvm::jv.CIMValueCInst); |
|
CIMValue *valueRet = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMValue*, |
|
jValueRetRef); |
|
|
|
handler.deliver(*valueRet); |
|
|
|
for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); |
|
i<m; |
|
i++) |
|
{ |
|
JMPIjvm::checkException(env); |
|
|
|
jobject jProp = env->CallObjectMethod( |
|
jVecOut, |
|
JMPIjvm::jv.VectorElementAt, |
|
i); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
jlong jpRef = env->CallLongMethod( |
|
jProp, |
|
JMPIjvm::jv.CIMPropertyCInst); |
|
CIMProperty *p = DEBUG_ConvertJavaToC( |
|
jlong, |
|
CIMProperty*, |
|
jpRef); |
|
|
|
JMPIjvm::checkException(env); |
|
|
|
handler.deliverParamValue( |
|
CIMParamValue(p->getName().getString(), |
|
p->getValue())); |
|
} |
|
|
|
handler.complete(); |
|
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleInvokeMethodRequest: Unknown method provider!"); |
|
break; |
|
} |
|
} |
|
} |
|
HandlerCatch(handler); |
|
|
|
if (env) JMPIjvm::detachThread(); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} |
|
|
|
int LocateIndicationProviderNames( |
|
const CIMInstance& pInstance, |
|
const CIMInstance& pmInstance, |
|
String& providerName, |
|
String& location) |
|
{ |
|
Uint32 pos = pInstance.findProperty(PEGASUS_PROPERTYNAME_NAME); |
|
pInstance.getProperty(pos).getValue().get(providerName); |
|
|
|
pos = pmInstance.findProperty(CIMName ("Location")); |
|
pmInstance.getProperty(pos).getValue().get(location); |
|
return 0; |
|
} |
|
|
|
WQLSelectStatement * |
|
newSelectExp (String& query, |
|
String& queryLanguage) |
|
{ |
|
WQLSelectStatement *stmt = new WQLSelectStatement (queryLanguage, query); |
|
|
|
try |
|
{ |
|
WQLParser::parse (query, *stmt); |
|
} |
|
catch (const Exception &e) |
|
{ |
|
cerr << "Error: newSelectExp caught: " << e.getMessage () << endl; |
|
} |
|
|
|
return stmt; |
|
} |
|
|
|
Message * JMPIProviderManager::handleCreateSubscriptionRequest( |
|
const Message * message) throw() |
|
{ |
|
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleCreateSubscriptionRequest"); |
|
|
|
HandlerIntroInd(CreateSubscription,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_EVENTPROVIDER, |
|
METHOD_EVENTPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
|
JNIEnv *env = NULL; |
|
|
|
try { |
|
String fileName, |
|
providerName, |
|
providerLocation; |
|
CIMInstance req_provider, |
|
req_providerModule; |
|
ProviderIdContainer pidc = |
|
(ProviderIdContainer) request->operationContext.get( |
|
ProviderIdContainer::NAME); |
|
|
|
req_provider = pidc.getProvider (); |
|
req_providerModule = pidc.getModule (); |
|
|
|
LocateIndicationProviderNames( |
|
req_provider, |
|
req_providerModule, |
|
providerName, |
|
providerLocation); |
|
|
|
fileName = resolveFileName(providerLocation); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleCreateSubscriptionRequest: " |
|
"name space = %s provider name = %s provider filename = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)providerName.getCString(), |
|
(const char*)fileName.getCString() |
|
)); |
|
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider( |
|
fileName, |
|
providerName, |
|
String::EMPTY); |
|
|
|
// |
|
// Save the provider instance from the request |
|
// |
|
ph.GetProvider ().setProviderInstance (req_provider); |
|
|
|
JMPIProvider &pr = ph.GetProvider (); |
|
|
|
// |
|
// Increment count of current subscriptions for this provider |
|
// |
|
pr.testIfZeroAndIncrementSubscriptions (); |
|
|
|
SubscriptionFilterConditionContainer sub_cntr = |
|
request->operationContext.get( |
|
SubscriptionFilterConditionContainer::NAME); |
|
indProvRecord *prec = NULL; |
|
bool fNewPrec = false; |
|
|
|
{ |
|
AutoMutex lock (mutexProvTab); |
|
|
|
provTab.lookup (providerName, prec); |
|
|
|
if (!prec) |
|
{ |
|
fNewPrec = true; |
|
|
|
prec = new indProvRecord (); |
|
|
|
// convert arguments |
|
prec->ctx = new OperationContext (); |
|
|
|
prec->ctx->insert( |
|
request->operationContext.get( |
|
IdentityContainer::NAME)); |
|
prec->ctx->insert( |
|
request->operationContext.get( |
|
AcceptLanguageListContainer::NAME)); |
|
prec->ctx->insert( |
|
request->operationContext.get( |
|
ContentLanguageListContainer::NAME)); |
|
prec->ctx->insert( |
|
request->operationContext.get( |
|
SubscriptionInstanceContainer::NAME)); |
|
prec->ctx->insert( |
|
request->operationContext.get( |
|
SubscriptionFilterConditionContainer::NAME)); |
|
|
|
prec->enabled = true; |
|
|
|
prec->handler = new EnableIndicationsResponseHandler( |
|
0, |
|
0, |
|
req_provider, |
|
_indicationCallback, |
|
_responseChunkCallback); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: " |
|
"Adding %s to provTab.", |
|
(const char*)providerName.getCString())); |
|
|
|
provTab.insert (providerName, prec); |
|
} |
|
} |
|
|
|
{ |
|
AutoMutex lock (prec->mutex); |
|
|
|
prec->count++; |
|
} |
|
|
|
// Add a selection record for JNI CIMOMHandle deliverEvent calls |
|
indSelectRecord *srec = new indSelectRecord (); |
|
|
|
{ |
|
srec->query = request->query; |
|
srec->queryLanguage = sub_cntr.getQueryLanguage (); |
|
srec->propertyList = request->propertyList; |
|
|
|
CIMOMHandleQueryContext *qContext = |
|
new CIMOMHandleQueryContext( |
|
CIMNamespaceName( |
|
request->nameSpace.getString()), |
|
*pr._cimom_handle); |
|
srec->qContext = qContext; |
|
|
|
CIMObjectPath sPath = request->subscriptionInstance.getPath(); |
|
Array<CIMKeyBinding> kb; |
|
|
|
// Technically we only need Name and Handler for uniqueness |
|
kb = sPath.getKeyBindings (); |
|
|
|
// Add an entry for every provider. |
|
kb.append (CIMKeyBinding ("Provider", |
|
pr.getName (), |
|
CIMKeyBinding::STRING)); |
|
|
|
sPath.setKeyBindings (kb); |
|
|
|
AutoMutex lock (mutexSelxTab); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: " |
|
"Adding %s to selxTab.", |
|
(const char*)sPath.toString().getCString())); |
|
|
|
selxTab.insert (sPath.toString (), srec); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: " |
|
"For selxTab %s , srec = %p, qContext = %p", |
|
(const char*)sPath.toString().getCString(), |
|
srec,qContext)); |
|
} |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: Calling provider: %s", |
|
(const char*)pr.getName().getCString())); |
|
|
|
JvmVector *jv = 0; |
|
|
|
env = JMPIjvm::attachThread(&jv); |
|
|
|
if (!env) |
|
{ |
|
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleCreateSubscriptionRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
throw PEGASUS_CIM_EXCEPTION_L( |
|
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
|
|
|
JMPIProvider::pm_service_op_lock op_lock(&pr); |
|
|
|
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType (pidc, |
|
interfaceType, |
|
interfaceVersion); |
|
|
|
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"activateFilter", |
|
"(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); |
|
|
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_EVENTPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: " |
|
"Found METHOD_EVENTPROVIDER."); |
|
} |
|
} |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"activateFilter", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); |
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
if (id != NULL) |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
{ |
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
eMethodFound = METHOD_EVENTPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleCreateSubscriptionRequest: " |
|
"Found METHOD_EVENTPROVIDER2."); |
|
} |
|
} |
| |
JMPIProvider & pr=ph.GetProvider(); |
if (id == NULL) |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleCreateSubscriptionRequest: No method provider found!"); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
PEG_METHOD_EXIT(); |
"Calling provider.invokeMethod: " + pr.getName()); |
|
| |
JvmVector *jv; |
throw PEGASUS_CIM_EXCEPTION_L( |
env=JMPIjvm::attachThread(&jv); |
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
|
"Could not find a method for the provider based on" |
|
" InterfaceType.")); |
|
} |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewI,(jint)&objectPath); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jstring jMethod=env->NewStringUTF(request->methodName.getString().getCString()); |
switch (eMethodFound) |
JMPIjvm::checkException(env); |
{ |
|
case METHOD_EVENTPROVIDER: |
|
{ |
|
WQLSelectStatement *stmt = newSelectExp( |
|
srec->query, |
|
srec->queryLanguage); |
|
jlong jStmtRef = DEBUG_ConvertCToJava( |
|
WQLSelectStatement *, |
|
jlong, |
|
stmt); |
|
jobject jSelectExp = env->NewObject( |
|
jv->SelectExpClassRef, |
|
jv->SelectExpNewJ, |
|
jStmtRef); |
| |
STAT_GETSTARTTIME; |
JMPIjvm::checkException(env); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod", |
jstring jType = env->NewStringUTF( |
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
request->nameSpace.getString().getCString()); |
"Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"); |
|
| |
if (id==NULL) { |
|
env->ExceptionClear(); |
|
id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod", |
|
"(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;" |
|
"[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;"); |
|
JMPIjvm::checkException(env); |
|
mode24=true; |
|
} |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
if (!mode24) { |
CIMObjectPath *cop = new CIMObjectPath (System::getHostName(), |
jobject jVecIn=env->NewObject(jv->VectorClassRef,jv->VectorNew); |
request->nameSpace, |
JMPIjvm::checkException(env); |
request->classNames[0]); |
for (int i=0,m=request->inParameters.size(); i<m; i++) { |
jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop); |
const CIMParamValue & parm=request->inParameters[i]; |
jobject jcop = env->NewObject( |
const CIMValue v=parm.getValue(); |
jv->CIMObjectPathClassRef, |
CIMProperty *p=new CIMProperty(parm.getParameterName(),v,v.getArraySize()); |
jv->CIMObjectPathNewJ,jcopRef); |
jobject prop=env->NewObject(jv->CIMPropertyClassRef, |
|
jv->CIMPropertyNewI,(jint)p); |
|
env->CallVoidMethod(jVecIn,jv->VectorAddElement,prop); |
|
} |
|
| |
jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jVecIn,jVecOut); |
StatProviderTimeMeasurement providerTime(response); |
JMPIjvm::checkException(env); |
|
|
env->CallVoidMethod ((jobject)pr.jProvider, |
|
id, |
|
jSelectExp, |
|
jType, |
|
jcop, |
|
(jboolean)fNewPrec); |
| |
STAT_PMS_PROVIDEREND; |
JMPIjvm::checkException(env); |
|
break; |
|
} |
| |
handler.processing(); |
case METHOD_EVENTPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ,jocRef); |
| |
CIMValue *v=((CIMValue*)env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst)); |
WQLSelectStatement *stmt = newSelectExp(srec->query, |
handler.deliver(*v); |
srec->queryLanguage); |
|
jlong jStmtRef = DEBUG_ConvertCToJava( |
|
WQLSelectStatement *, |
|
jlong, |
|
stmt); |
|
jobject jSelectExp = env->NewObject( |
|
jv->SelectExpClassRef, |
|
jv->SelectExpNewJ, |
|
jStmtRef); |
| |
for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++) { |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
jobject jProp=env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i); |
|
JMPIjvm::checkException(env); |
|
CIMProperty *p=((CIMProperty*)env->CallIntMethod(jProp,JMPIjvm::jv.PropertyCInst)); |
|
JMPIjvm::checkException(env); |
|
handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue())); |
|
} |
|
handler.complete(); |
|
} |
|
else { |
|
Uint32 m=request->inParameters.size(); |
|
| |
jobjectArray jArIn=env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL); |
jstring jType = env->NewStringUTF( |
for (Uint32 i=0; i<m; i++) { |
request->nameSpace.getString().getCString()); |
CIMParamValue *parm=new CIMParamValue(request->inParameters[i]); |
|
jobject jArg=env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,(jint)parm); |
|
env->SetObjectArrayElement(jArIn,i,jArg); |
|
} |
|
jobjectArray jArOut=env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL); |
|
| |
jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jArIn,jArOut); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
CIMObjectPath *cop = new CIMObjectPath (System::getHostName(), |
|
request->nameSpace, |
|
request->classNames[0]); |
|
jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ,jcopRef); |
| |
handler.processing(); |
JMPIjvm::checkException(env); |
| |
CIMValue *v=((CIMValue*)env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst)); |
StatProviderTimeMeasurement providerTime(response); |
handler.deliver(*v); |
|
|
env->CallVoidMethod ((jobject)pr.jProvider, |
|
id, |
|
joc, |
|
jSelectExp, |
|
jType, |
|
jcop, |
|
(jboolean)fNewPrec); |
| |
for (int i=0; i<24; i++) { |
|
jobject jArg=env->GetObjectArrayElement(jArOut,i); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
if (jArg==NULL) break; |
|
CIMParamValue *p=((CIMParamValue*)env->CallIntMethod(jArg,JMPIjvm::jv.ArgumentCInst)); |
if (joc) |
|
{ |
|
env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate); |
|
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
handler.deliverParamValue(*p); |
|
} | } |
handler.complete(); |
break; |
|
} |
|
|
|
case METHOD_UNKNOWN: |
|
{ |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleCreateSubscriptionRequest: Unknown method provider!"); |
|
break; |
|
} |
} | } |
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
|
|
return(response); | return(response); |
} | } |
| |
int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance, |
Message * JMPIProviderManager::handleDeleteSubscriptionRequest( |
String& providerName, String& location) |
const Message * message) throw() |
{ |
|
Uint32 pos = pInstance.findProperty(CIMName ("Name")); |
|
pInstance.getProperty(pos).getValue().get(providerName); |
|
|
|
pos = pmInstance.findProperty(CIMName ("Location")); |
|
pmInstance.getProperty(pos).getValue().get(location); |
|
return 0; |
|
} |
|
|
|
Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw() |
|
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "DefaultProviderManager::handleCreateSubscriptionRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
HandlerIntroInd(CreateSubscription,message,request,response, |
"JMPIProviderManager::handleDeleteSubscriptionRequest"); |
handler); |
|
|
HandlerIntroInd(DeleteSubscription,message,request,response,handler); |
|
|
|
typedef enum { |
|
METHOD_UNKNOWN = 0, |
|
METHOD_EVENTPROVIDER, |
|
METHOD_EVENTPROVIDER2, |
|
} METHOD_VERSION; |
|
METHOD_VERSION eMethodFound = METHOD_UNKNOWN; |
JNIEnv *env=NULL; | JNIEnv *env=NULL; |
|
bool fFreePrec = false; |
|
indProvRecord *prec = NULL; |
|
indSelectRecord *srec = NULL; |
|
|
try { | try { |
const CIMObjectPath &x=request->subscriptionInstance.getPath(); |
String fileName, |
|
providerName, |
|
providerLocation; |
|
CIMInstance req_provider, |
|
req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer) |
|
request->operationContext.get( |
|
ProviderIdContainer::NAME); |
| |
String providerName,providerLocation; |
|
CIMInstance req_provider, req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
|
req_provider = pidc.getProvider(); | req_provider = pidc.getProvider(); |
req_providerModule = pidc.getModule(); | req_providerModule = pidc.getModule(); |
LocateIndicationProviderNames(req_provider, req_providerModule,providerName,providerLocation); |
|
|
|
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
|
"JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2", |
|
System::getHostName(), |
|
request->nameSpace.getString(), |
|
providerName); |
|
| |
String fileName = resolveFileName(providerLocation); |
LocateIndicationProviderNames (req_provider, |
|
req_providerModule, |
|
providerName, |
|
providerLocation); |
|
|
|
fileName = resolveFileName (providerLocation); |
|
|
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3, |
|
"handleDeleteSubscriptionRequest: " |
|
"name space = %s provider name = %s provider filename = %s", |
|
(const char*)request->nameSpace.getString().getCString(), |
|
(const char*)providerName.getCString(), |
|
(const char*)fileName.getCString() |
|
)); |
| |
// get cached or load new provider module | // get cached or load new provider module |
JMPIProvider::OpProviderHolder ph = |
JMPIProvider::OpProviderHolder ph = providerManager.getProvider( |
providerManager.getProvider(fileName, providerName, String::EMPTY); |
fileName, |
|
providerName, |
|
String::EMPTY); |
|
|
|
JMPIProvider &pr = ph.GetProvider (); |
|
|
|
{ |
|
AutoMutex lock (mutexProvTab); |
| |
indProvRecord *prec=NULL; |
|
provTab.lookup(providerName,prec); | provTab.lookup(providerName,prec); |
if (prec) prec->count++; |
|
else { |
|
prec=new indProvRecord(); |
|
provTab.insert(providerName,prec); |
|
} | } |
| |
indSelectRecord *srec=new indSelectRecord(); |
{ |
const CIMObjectPath &sPath=request->subscriptionInstance.getPath(); |
AutoMutex lock (prec->mutex); |
selxTab.insert(sPath.toString(),srec); |
|
| |
// convert arguments |
if (--prec->count <= 0) |
OperationContext *context=new OperationContext(); |
{ |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteSubscriptionRequest: " |
|
"Removing %s from provTab.", |
|
(const char*)providerName.getCString())); |
|
|
|
provTab.remove (providerName); |
| |
if (prec->ctx==NULL) { |
fFreePrec = true; |
prec->ctx=context; |
} |
} | } |
| |
context->insert(request->operationContext.get(IdentityContainer::NAME)); |
{ |
context->insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
CIMObjectPath sPath = request->subscriptionInstance.getPath(); |
context->insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
Array<CIMKeyBinding> kb; |
context->insert(request->operationContext.get(SubscriptionInstanceContainer::NAME)); |
|
context->insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME)); |
|
context->insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME)); |
|
| |
CIMObjectPath subscriptionName = request->subscriptionInstance.getPath(); |
// Technically we only need Name and Handler for uniqueness |
|
kb = sPath.getKeyBindings (); |
| |
SubscriptionFilterConditionContainer sub_cntr = request->operationContext.get |
// Add an entry for every provider. |
(SubscriptionFilterConditionContainer::NAME); |
kb.append (CIMKeyBinding ("Provider", |
|
pr.getName (), |
|
CIMKeyBinding::STRING)); |
| |
CMPI_SelectExp *eSelx=new CMPI_SelectExp(*context,request->query, |
sPath.setKeyBindings (kb); |
sub_cntr.getQueryLanguage()); |
|
srec->eSelx=eSelx; |
|
| |
JMPIProvider & pr=ph.GetProvider(); |
String sPathString = sPath.toString (); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
AutoMutex lock (mutexSelxTab); |
"Calling provider.createSubscriptionRequest: " + pr.getName()); |
|
| |
DDD(cerr<<"--- JMPIProviderManager::createSubscriptionRequest"<<endl); |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteSubscriptionRequest: " |
|
"Removing %s from selxTab.", |
|
(const char*)sPathString.getCString())); |
| |
for(Uint32 i = 0, n = request->classNames.size(); i < n; i++) { |
if (!selxTab.lookup (sPathString, srec)) |
CIMObjectPath className( |
{ |
System::getHostName(), |
PEGASUS_ASSERT(0); |
request->nameSpace, |
|
request->classNames[i]); |
|
eSelx->classNames.append(className); |
|
} | } |
| |
CIMPropertyList propertyList = request->propertyList; |
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
if (!propertyList.isNull()) { |
"handleDeleteSubscriptionRequest: " |
Array<CIMName> p=propertyList.getPropertyNameArray(); |
"For selxTab %s , srec = %p, qContext = %p", |
int pCount=p.size(); |
(const char*)sPathString.getCString(), |
eSelx->props=(const char**)malloc((1+pCount)*sizeof(char*)); |
srec,srec->qContext)); |
for (int i=0; i<pCount; i++) { |
|
eSelx->props[i]=strdup(p[i].getString().getCString()); |
selxTab.remove (sPathString); |
} |
|
eSelx->props[pCount]=NULL; |
|
} | } |
| |
JvmVector *jv; |
PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3, |
|
"handleDeleteSubscriptionRequest: " |
|
"Calling provider: %s", |
|
(const char*)pr.getName().getCString())); |
|
|
|
JvmVector *jv = 0; |
|
|
env=JMPIjvm::attachThread(&jv); | env=JMPIjvm::attachThread(&jv); |
| |
jobject jSel=env->NewObject(jv->SelectExpClassRef, |
if (!env) |
jv->SelectExpNewI,(jint)eSelx); |
{ |
JMPIjvm::checkException(env); |
PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleDeleteSubscriptionRequest: " |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment."); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
PEG_METHOD_EXIT(); |
jv->CIMObjectPathNewI,(jint)&eSelx->classNames[0]); |
|
JMPIjvm::checkException(env); |
|
| |
jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString()); |
throw PEGASUS_CIM_EXCEPTION_L( |
JMPIjvm::checkException(env); |
CIM_ERR_FAILED, |
|
MessageLoaderParms( |
|
"ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED", |
|
"Could not initialize the JVM (Java Virtual Machine) " |
|
"runtime environment.")); |
|
} |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); | JMPIProvider::pm_service_op_lock op_lock(&pr); |
| |
STAT_GETSTARTTIME; |
jmethodID id = NULL; |
|
String interfaceType; |
|
String interfaceVersion; |
|
|
|
getInterfaceType( |
|
request->operationContext.get(ProviderIdContainer::NAME), |
|
interfaceType, |
|
interfaceVersion); |
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"activateFilter", |
if (interfaceType == "JMPI") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"deActivateFilter", |
"(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" | "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" |
"Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); | "Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); |
JMPIjvm::checkException(env); |
|
|
|
env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType, |
|
jRef,(jboolean)0); |
|
JMPIjvm::checkException(env); |
|
|
|
STAT_PMS_PROVIDEREND; |
|
| |
|
if (id != NULL) |
|
{ |
|
eMethodFound = METHOD_EVENTPROVIDER; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteSubscriptionRequest: " |
|
"Found METHOD_EVENTPROVIDER."); |
} | } |
HandlerCatch(handler); |
|
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} | } |
|
else if (interfaceType == "JMPIExperimental") |
|
{ |
|
id = env->GetMethodID( |
|
(jclass)pr.jProviderClass, |
|
"deActivateFilter", |
|
"(Lorg/pegasus/jmpi/OperationContext;" |
|
"Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" |
|
"Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); |
| |
Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw() |
if (id != NULL) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest"); |
eMethodFound = METHOD_EVENTPROVIDER2; |
|
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleDeleteSubscriptionRequest: " |
|
"Found METHOD_EVENTPROVIDER2."); |
|
} |
|
} |
| |
HandlerIntroInd(DeleteSubscription,message,request,response, |
if (id == NULL) |
handler); |
{ |
JNIEnv *env=NULL; |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
try { |
"handleDeleteSubscriptionRequest: No method provider found!"); |
String providerName,providerLocation; |
|
CIMInstance req_provider, req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
|
req_provider = pidc.getProvider(); |
|
req_providerModule = pidc.getModule(); |
|
| |
LocateIndicationProviderNames(req_provider, req_providerModule, |
PEG_METHOD_EXIT(); |
providerName,providerLocation); |
|
| |
Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE, |
throw PEGASUS_CIM_EXCEPTION_L( |
"JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0 Name space: $1 Provider name(s): $2", |
CIM_ERR_FAILED, |
System::getHostName(), |
MessageLoaderParms( |
request->nameSpace.getString(), |
"ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND", |
providerName); |
"Could not find a method for the provider based on" |
|
" InterfaceType.")); |
|
} |
| |
String fileName = resolveFileName(providerLocation); |
JMPIjvm::checkException(env); |
| |
// get cached or load new provider module |
switch (eMethodFound) |
JMPIProvider::OpProviderHolder ph = |
{ |
providerManager.getProvider(fileName, providerName, String::EMPTY); |
case METHOD_EVENTPROVIDER: |
|
{ |
|
WQLSelectStatement *stmt = newSelectExp( |
|
srec->query, |
|
srec->queryLanguage); |
|
jlong jStmtRef = DEBUG_ConvertCToJava( |
|
WQLSelectStatement *, |
|
jlong, |
|
stmt); |
|
jobject jSelectExp = env->NewObject( |
|
jv->SelectExpClassRef, |
|
jv->SelectExpNewJ,jStmtRef); |
| |
|
JMPIjvm::checkException(env); |
| |
indProvRecord *prec=NULL; |
jstring jType = env->NewStringUTF( |
provTab.lookup(providerName,prec); |
request->nameSpace.getString().getCString()); |
if (--prec->count<=0) { |
|
provTab.remove(providerName); |
|
prec=NULL; |
|
} |
|
| |
indSelectRecord *srec=NULL; |
JMPIjvm::checkException(env); |
const CIMObjectPath &sPath=request->subscriptionInstance.getPath(); |
|
String sPathString=sPath.toString(); |
|
selxTab.lookup(sPathString,srec); |
|
| |
CMPI_SelectExp *eSelx=srec->eSelx; |
CIMObjectPath *cop = new CIMObjectPath( |
selxTab.remove(sPathString); |
System::getHostName(), |
|
request->nameSpace, |
|
request->classNames[0]); |
|
jlong jcopRef = DEBUG_ConvertCToJava(CIMObjectPath*, jlong, cop); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ,jcopRef); |
| |
// convert arguments |
JMPIjvm::checkException(env); |
OperationContext context; |
|
| |
context.insert(request->operationContext.get(IdentityContainer::NAME)); |
StatProviderTimeMeasurement providerTime(response); |
context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); |
|
context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); |
env->CallVoidMethod ((jobject)pr.jProvider, |
context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME)); |
id, |
context.insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME)); |
jSelectExp, |
|
jType, |
|
jcop, |
|
(jboolean)fFreePrec); |
| |
CIMObjectPath subscriptionName = request->subscriptionInstance.getPath(); |
JMPIjvm::checkException(env); |
|
break; |
|
} |
| |
JMPIProvider & pr=ph.GetProvider(); |
case METHOD_EVENTPROVIDER2: |
|
{ |
|
jlong jocRef = DEBUG_ConvertCToJava( |
|
OperationContext*, |
|
jlong, |
|
&request->operationContext); |
|
jobject joc = env->NewObject( |
|
jv->OperationContextClassRef, |
|
jv->OperationContextNewJ,jocRef); |
| |
PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
WQLSelectStatement *stmt = newSelectExp (srec->query, |
"Calling provider.deleteSubscriptionRequest: " + pr.getName()); |
srec->queryLanguage); |
|
jlong jStmtRef = DEBUG_ConvertCToJava( |
|
WQLSelectStatement *, |
|
jlong, |
|
stmt); |
|
jobject jSelectExp = env->NewObject( |
|
jv->SelectExpClassRef, |
|
jv->SelectExpNewJ, |
|
jStmtRef); |
| |
DDD(cerr<<"--- JMPIProviderManager::deleteSubscriptionRequest"<<endl); |
JMPIjvm::checkException(env); |
| |
JvmVector *jv; |
jstring jType = env->NewStringUTF( |
env=JMPIjvm::attachThread(&jv); |
request->nameSpace.getString().getCString()); |
| |
jobject jSel=env->NewObject(jv->SelectExpClassRef, |
|
jv->SelectExpNewI,(jint)eSelx); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
jobject jRef=env->NewObject(jv->CIMObjectPathClassRef, |
CIMObjectPath *cop = new CIMObjectPath (System::getHostName(), |
jv->CIMObjectPathNewI,(jint)&eSelx->classNames[0]); |
request->nameSpace, |
JMPIjvm::checkException(env); |
request->classNames[0]); |
|
jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop); |
|
jobject jcop = env->NewObject( |
|
jv->CIMObjectPathClassRef, |
|
jv->CIMObjectPathNewJ,jcopRef); |
| |
jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString()); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
JMPIProvider::pm_service_op_lock op_lock(&pr); |
StatProviderTimeMeasurement providerTime(response); |
|
|
STAT_GETSTARTTIME; |
|
| |
jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deActivateFilter", |
env->CallVoidMethod ((jobject)pr.jProvider, |
"(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;" |
id, |
"Lorg/pegasus/jmpi/CIMObjectPath;Z)V"); |
joc, |
JMPIjvm::checkException(env); |
jSelectExp, |
|
jType, |
|
jcop, |
|
(jboolean)fFreePrec); |
| |
env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType, |
|
jRef,(jboolean)(prec==NULL)); |
|
JMPIjvm::checkException(env); | JMPIjvm::checkException(env); |
| |
STAT_PMS_PROVIDEREND; |
if (joc) |
|
{ |
delete eSelx; |
env->CallVoidMethod( |
|
joc, |
|
JMPIjvm::jv.OperationContextUnassociate); |
| |
|
JMPIjvm::checkException(env); |
} | } |
HandlerCatch(handler); |
break; |
|
|
PEG_METHOD_EXIT(); |
|
|
|
return(response); |
|
} | } |
| |
Message * JMPIProviderManager::handleEnableIndicationsRequest(const Message * message) throw() |
case METHOD_UNKNOWN: |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager:: handleEnableIndicationsRequest"); |
PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2, |
|
"handleDeleteSubscriptionRequest: Unknown method provider!"); |
HandlerIntroInd(EnableIndications,message,request,response, |
break; |
handler); |
} |
try { |
|
String providerName,providerLocation; |
|
CIMInstance req_provider, req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
|
req_provider = pidc.getProvider(); |
|
req_providerModule = pidc.getModule(); |
|
|
|
LocateIndicationProviderNames(req_provider, req_providerModule, |
|
providerName,providerLocation); |
|
|
|
indProvRecord *provRec; |
|
if (provTab.lookup(providerName,provRec)) { |
|
provRec->enabled=true; |
|
provRec->handler=new EnableIndicationsResponseHandler( |
|
request, response, req_provider, _indicationCallback); |
|
} | } |
| |
String fileName = resolveFileName(providerLocation); |
// |
|
// Decrement count of current subscriptions for this provider |
// get cached or load new provider module |
// |
JMPIProvider::OpProviderHolder ph = |
pr.decrementSubscriptionsAndTestIfZero (); |
providerManager.getProvider(fileName, providerName, String::EMPTY); |
|
|
|
} | } |
HandlerCatch(handler); | HandlerCatch(handler); |
| |
PEG_METHOD_EXIT(); |
if (srec) |
|
{ |
return(response); |
delete srec->qContext; |
} | } |
|
delete srec; |
| |
Message * JMPIProviderManager::handleDisableIndicationsRequest(const Message * message) throw() |
if (fFreePrec) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager:: handleDisableIndicationsRequest"); |
delete prec->ctx; |
|
delete prec->handler; |
HandlerIntroInd(DisableIndications,message,request,response, |
delete prec; |
handler); |
|
try { |
|
String providerName,providerLocation; |
|
CIMInstance req_provider, req_providerModule; |
|
ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME); |
|
|
|
req_provider = pidc.getProvider(); |
|
req_providerModule = pidc.getModule(); |
|
|
|
LocateIndicationProviderNames(req_provider, req_providerModule, |
|
providerName,providerLocation); |
|
|
|
indProvRecord *provRec; |
|
if (provTab.lookup(providerName,provRec)) { |
|
provRec->enabled=false; |
|
if (provRec->handler) delete provRec->handler; |
|
provRec->handler=NULL; |
|
} | } |
| |
String fileName = resolveFileName(providerLocation); |
if (env) JMPIjvm::detachThread(); |
|
|
// get cached or load new provider module |
|
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider(fileName, providerName, String::EMPTY); |
|
} |
|
HandlerCatch(handler); |
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleDisableModuleRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleDisableModuleRequest"); |
| |
CIMDisableModuleRequestMessage * request = | CIMDisableModuleRequestMessage * request = |
dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message)); |
dynamic_cast<CIMDisableModuleRequestMessage *> |
|
(const_cast<Message *>(message)); |
| |
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
// get provider module name | // get provider module name |
String moduleName; | String moduleName; |
CIMInstance mInstance = request->providerModule; | CIMInstance mInstance = request->providerModule; |
Uint32 pos = mInstance.findProperty(CIMName ("Name")); |
Uint32 pos = mInstance.findProperty(PEGASUS_PROPERTYNAME_NAME); |
| |
if(pos != PEG_NOT_FOUND) | if(pos != PEG_NOT_FOUND) |
{ | { |
|
|
Array<CIMInstance> _pInstances = request->providers; | Array<CIMInstance> _pInstances = request->providers; |
| |
CIMDisableModuleResponseMessage * response = | CIMDisableModuleResponseMessage * response = |
new CIMDisableModuleResponseMessage( |
dynamic_cast<CIMDisableModuleResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
operationalStatus); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
|
response->operationalStatus = operationalStatus; |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// |
|
// Set HTTP method in response from request |
|
// |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleEnableModuleRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleEnableModuleRequest"); |
| |
CIMEnableModuleRequestMessage * request = | CIMEnableModuleRequestMessage * request = |
dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message)); |
dynamic_cast<CIMEnableModuleRequestMessage *> |
|
(const_cast<Message *>(message)); |
| |
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
Array<Uint16> operationalStatus; | Array<Uint16> operationalStatus; |
operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK); |
operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED); |
| |
CIMEnableModuleResponseMessage * response = | CIMEnableModuleResponseMessage * response = |
new CIMEnableModuleResponseMessage( |
dynamic_cast<CIMEnableModuleResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop(), |
|
operationalStatus); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
|
response->operationalStatus = operationalStatus; |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
| |
PEG_METHOD_EXIT(); | PEG_METHOD_EXIT(); |
| |
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleStopAllProvidersRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleStopAllProvidersRequest"); |
| |
CIMStopAllProvidersRequestMessage * request = | CIMStopAllProvidersRequestMessage * request = |
dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message)); |
dynamic_cast<CIMStopAllProvidersRequestMessage *> |
|
(const_cast<Message *>(message)); |
| |
PEGASUS_ASSERT(request != 0); | PEGASUS_ASSERT(request != 0); |
| |
CIMStopAllProvidersResponseMessage * response = | CIMStopAllProvidersResponseMessage * response = |
new CIMStopAllProvidersResponseMessage( |
dynamic_cast<CIMStopAllProvidersResponseMessage*>( |
request->messageId, |
request->buildResponse()); |
CIMException(), |
|
request->queueIds.copyAndPop()); |
|
|
|
PEGASUS_ASSERT(response != 0); | PEGASUS_ASSERT(response != 0); |
| |
// preserve message key |
|
response->setKey(request->getKey()); |
|
|
|
// Set HTTP method in response from request |
|
response->setHttpMethod (request->getHttpMethod ()); |
|
|
|
// tell the provider manager to shutdown all the providers | // tell the provider manager to shutdown all the providers |
providerManager.shutdownAllProviders(); | providerManager.shutdownAllProviders(); |
| |
|
|
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message) |
Message* JMPIProviderManager::handleIndicationServiceDisabledRequest( |
|
Message* message) |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest"); |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::_handleIndicationServiceDisabledRequest"); |
| |
HandlerIntroInit(InitializeProvider,message,request,response,handler); |
CIMIndicationServiceDisabledRequestMessage* request = |
|
dynamic_cast<CIMIndicationServiceDisabledRequestMessage*>(message); |
|
PEGASUS_ASSERT(request != 0); |
| |
try |
CIMIndicationServiceDisabledResponseMessage* response = |
{ |
dynamic_cast<CIMIndicationServiceDisabledResponseMessage*>( |
// resolve provider name |
request->buildResponse()); |
ProviderName name = _resolveProviderName( |
PEGASUS_ASSERT(response != 0); |
request->operationContext.get(ProviderIdContainer::NAME)); |
|
| |
// get cached or load new provider module |
_subscriptionInitComplete = false; |
JMPIProvider::OpProviderHolder ph = |
|
providerManager.getProvider(name.getPhysicalName(), |
|
name.getLogicalName(), String::EMPTY); |
|
| |
|
PEG_METHOD_EXIT (); |
|
return response; |
} | } |
HandlerCatch(handler); |
|
| |
PEG_METHOD_EXIT(); |
Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest( |
|
const Message * message) |
|
{ |
|
PEG_METHOD_ENTER (TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleSubscriptionInitCompleteRequest"); |
|
|
|
CIMSubscriptionInitCompleteRequestMessage * request = |
|
dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *> |
|
(const_cast <Message *> (message)); |
|
|
|
PEGASUS_ASSERT (request != 0); |
|
|
|
CIMSubscriptionInitCompleteResponseMessage * response = |
|
dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *> |
|
(request->buildResponse ()); |
|
|
|
PEGASUS_ASSERT (response != 0); |
|
|
|
// |
|
// Set indicator |
|
// |
|
_subscriptionInitComplete = true; |
|
|
|
// |
|
// For each provider that has at least one subscription, call |
|
// provider's enableIndications method |
|
// |
|
Array <JMPIProvider *> enableProviders; |
|
|
|
enableProviders = providerManager.getIndicationProvidersToEnable (); |
|
|
|
Uint32 numProviders = enableProviders.size (); |
| |
|
PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4, |
|
"handleSubscriptionInitCompleteRequest: numProviders = %d ", |
|
numProviders)); |
|
|
|
PEG_METHOD_EXIT (); |
return(response); | return(response); |
} | } |
| |
Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw() |
Message * JMPIProviderManager::handleUnsupportedRequest( |
|
const Message * message) throw() |
{ | { |
PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleUnsupportedRequest"); |
PEG_METHOD_ENTER( |
|
TRC_PROVIDERMANAGER, |
|
"JMPIProviderManager::handleUnsupportedRequest"); |
| |
PEG_METHOD_EXIT(); |
CIMRequestMessage* request = |
|
dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message)); |
|
PEGASUS_ASSERT(request != 0 ); |
| |
// a null response implies unsupported or unknown operation |
CIMResponseMessage* response = request->buildResponse(); |
return(0); |
response->cimException = |
|
PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY); |
|
|
|
PEG_METHOD_EXIT(); |
|
return response; |
} | } |
| |
ProviderName JMPIProviderManager::_resolveProviderName( | ProviderName JMPIProviderManager::_resolveProviderName( |
|
|
{ | { |
String providerName; | String providerName; |
String fileName; | String fileName; |
String interfaceName; |
String moduleName; |
CIMValue genericValue; | CIMValue genericValue; |
| |
|
genericValue = providerId.getModule().getProperty( |
|
providerId.getModule().findProperty( |
|
PEGASUS_PROPERTYNAME_NAME)).getValue(); |
|
genericValue.get(moduleName); |
|
|
genericValue = providerId.getProvider().getProperty( | genericValue = providerId.getProvider().getProperty( |
providerId.getProvider().findProperty("Name")).getValue(); |
providerId.getProvider().findProperty( |
|
PEGASUS_PROPERTYNAME_NAME)).getValue(); |
genericValue.get(providerName); | genericValue.get(providerName); |
| |
genericValue = providerId.getModule().getProperty( | genericValue = providerId.getModule().getProperty( |
|
|
genericValue.get(fileName); | genericValue.get(fileName); |
fileName = resolveFileName(fileName); | fileName = resolveFileName(fileName); |
| |
// ATTN: This attribute is probably not required |
return ProviderName(moduleName, providerName, fileName); |
genericValue = providerId.getModule().getProperty( |
|
providerId.getModule().findProperty("InterfaceType")).getValue(); |
|
genericValue.get(interfaceName); |
|
|
|
return ProviderName(providerName, fileName, interfaceName, 0); |
|
} | } |
| |
String JMPIProviderManager::resolveFileName(String fileName) | String JMPIProviderManager::resolveFileName(String fileName) |
{ | { |
String name; |
String name = ConfigManager::getHomedPath( |
#if defined(PEGASUS_OS_TYPE_WINDOWS) |
ConfigManager::getInstance()->getCurrentValue("providerDir")); |
name = fileName; // + String(".dll"); |
// physfilename = everything up to the delimiter pointing at class start |
#elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC) |
// in case there is no delimiter anymore, it takes the entire filename |
name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
String physfilename = fileName.subString(0, fileName.find(":")); |
name.append(String("/") + fileName); // + String(".sl")); |
// look in all(multiple) homed pathes for the physical file |
#elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC) |
name = FileSystem::getAbsoluteFileName(name, physfilename); |
name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
// construct back the fully specified jar:<classname> provider name |
name.append(String("/") + fileName); // + String(".so")); |
name = FileSystem::extractFilePath(name) + fileName; |
#elif defined(PEGASUS_OS_OS400) |
|
name = filrName; |
|
#else |
|
name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir")); |
|
name.append(String("/") + fileName); // + String(".so")); |
|
#endif |
|
return name; | return name; |
} | } |
| |