(file) Return to JMPIProviderManager.cpp CVS log (file) (dir) Up to [Pegasus] / pegasus / src / Pegasus / ProviderManager2 / JMPI

   1 karl  1.39 //%2006////////////////////////////////////////////////////////////////////////
   2 schuur 1.1  //
   3 karl   1.17 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4             // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5             // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6 schuur 1.1  // IBM Corp.; EMC Corporation, The Open Group.
   7 karl   1.17 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8             // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9 karl   1.18 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10             // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl   1.39 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12             // EMC Corporation; Symantec Corporation; The Open Group.
  13 schuur 1.1  //
  14             // Permission is hereby granted, free of charge, to any person obtaining a copy
  15             // of this software and associated documentation files (the "Software"), to
  16             // deal in the Software without restriction, including without limitation the
  17             // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18             // sell copies of the Software, and to permit persons to whom the Software is
  19             // furnished to do so, subject to the following conditions:
  20 mark.hamzy 1.40 //
  21 schuur     1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22                 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23                 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24                 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25                 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26                 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27                 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28                 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29                 //
  30                 //==============================================================================
  31                 //
  32                 //%/////////////////////////////////////////////////////////////////////////////
  33                 
  34                 #include "JMPIProviderManager.h"
  35                 
  36                 #include "JMPIImpl.h"
  37                 
  38                 #include <Pegasus/Common/CIMMessage.h>
  39                 #include <Pegasus/Common/OperationContext.h>
  40                 #include <Pegasus/Common/Tracer.h>
  41                 #include <Pegasus/Common/StatisticalData.h>
  42 schuur     1.1  #include <Pegasus/Common/Logger.h>
  43                 #include <Pegasus/Common/MessageLoader.h> //l10n
  44 kumpf      1.10 #include <Pegasus/Common/Constants.h>
  45 marek      1.54 #include <Pegasus/Common/FileSystem.h>
  46 kumpf      1.56 #include <Pegasus/Common/ArrayInternal.h>
  47 schuur     1.1  
  48                 #include <Pegasus/Config/ConfigManager.h>
  49                 
  50                 #include <Pegasus/ProviderManager2/ProviderName.h>
  51                 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
  52 konrad.r   1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
  53 schuur     1.1  
  54                 PEGASUS_USING_STD;
  55                 PEGASUS_NAMESPACE_BEGIN
  56                 
  57 mark.hamzy 1.23 int JMPIProviderManager::trace=0;
  58 mark.hamzy 1.24 
  59                 #ifdef PEGASUS_DEBUG
  60 mark.hamzy 1.23 #define DDD(x) if (JMPIProviderManager::trace) x;
  61 mark.hamzy 1.24 #else
  62                 #define DDD(x)
  63                 #endif
  64 mark.hamzy 1.36 
  65                 // request->localOnly is replaced with JMPI_LOCALONLY for getInstance () and enumerateInstances ()
  66 mark.hamzy 1.30 #define JMPI_LOCALONLY false
  67 mark.hamzy 1.36 
  68 mark.hamzy 1.32 /* Fix for 4092 */
  69 mark.hamzy 1.36 // request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS for getInstance (),
  70                 //    setInstance (), enumerateInstances (), associators (), and references ()
  71 mark.hamzy 1.32 #define JMPI_INCLUDE_QUALIFIERS false
  72 mark.hamzy 1.23 
  73                 #include "Convert.h"
  74 schuur     1.1  
  75 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
  76                 {
  77                    // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes
  78                    // javap -s -p JMPI_TestPropertyTypes
  79 mark.hamzy 1.35    static const char *methodNames[][3] = {
  80 mark.hamzy 1.24       // CIMProvider
  81                       //   cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java
  82                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java
  83 mark.hamzy 1.36       {"snia 2.0","initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
  84                       {"snia 2.0","cleanup","()V"},
  85 mark.hamzy 1.24       // InstanceProvider
  86                       //   cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java
  87                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java
  88 mark.hamzy 1.36       {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"},
  89                       {"pegasus 2.4","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
  90 mark.hamzy 1.35       /* Begin Fix for 4189 */
  91 mark.hamzy 1.38       {"pegasus 2.5","enumerateInstances","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
  92 mark.hamzy 1.35       /* End Fix for 4189 */
  93 mark.hamzy 1.36       {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
  94                       {"pegasus 2.4","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;"},
  95                       {"pegasus 2.5","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
  96                       {"snia 2.0","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"},
  97                       {"pegasus 2.4","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"},
  98 mark.hamzy 1.35       /* Begin Fix for 4238 */
  99 mark.hamzy 1.38       {"pegasus 2.5","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"},
 100 mark.hamzy 1.35       /* End Fix for 4238 */
 101 mark.hamzy 1.36       {"snia 2.0","createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"},
 102                       {"snia 2.0","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
 103                       {"pegasus 2.4","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"},
 104                       {"snia 2.0","deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
 105                       {"snia 2.0","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
 106                       {"pegasus 2.4","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
 107                       {"pegasus 2.5","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 108 mark.hamzy 1.24       // MethodProvider
 109                       //   cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java
 110                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java
 111 mark.hamzy 1.36       {"snia 2.0","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
 112                       {"pegasus 2.4","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;"},
 113 mark.hamzy 1.24       // PropertyProvider
 114                       //   cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java
 115 mark.hamzy 1.36       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/PropertyProvider.java
 116                       {"snia 2.0","getPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"},
 117                       {"snia 2.0","setPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"},
 118 mark.hamzy 1.24       // AssociatorProvider
 119                       //   cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java
 120 mark.hamzy 1.36       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/AssociatorProvider.java
 121                       {"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;"},
 122                       {"pegasus 2.4","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 123                       {"snia 2.0","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 124                       {"pegasus 2.4","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 125                       {"snia 2.0","references","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 126                       {"pegasus 2.4","references","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 127                       {"snia 2.0","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
 128                       {"pegasus 2.4","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
 129 mark.hamzy 1.24       // CIMProviderRouter
 130                       //   cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java
 131                       // EventProvider
 132                       //   cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java
 133                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java
 134 mark.hamzy 1.36       {"snia 2.0","activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 135                       {"snia 2.0","deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 136 mark.hamzy 1.24       // IndicationHandler
 137                       //   cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java
 138                       // ProviderAdapter
 139                       //   cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java
 140                       // JMPI_TestPropertyTypes
 141 mark.hamzy 1.36       {"JMPI_TestPropertyTypes","findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
 142                       {"JMPI_TestPropertyTypes","testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"}
 143 mark.hamzy 1.23    };
 144                 
 145                    if (!env)
 146                    {
 147                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl));
 148                       return;
 149                    }
 150                    if (!jc)
 151                    {
 152                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl));
 153                       return;
 154                    }
 155                 
 156                    for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
 157                    {
 158 mark.hamzy 1.35       jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]);
 159                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", "<<methodNames[i][1]<<", id = "<<PEGASUS_STD(hex)<<(int)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
 160 mark.hamzy 1.23       env->ExceptionClear();
 161                    }
 162 mark.hamzy 1.29 
 163                    env->ExceptionClear();
 164                 }
 165                 
 166                 void
 167                 debugIntrospectJavaObject (JNIEnv *env, jobject jInst)
 168                 {
 169                    jclass       jInstClass             = env->GetObjectClass(jInst);
 170                    jclass       jInstSuperClass        = env->GetSuperclass(jInstClass);
 171                    jmethodID    jmidGetDeclaredMethods = env->GetMethodID(jInstClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
 172                 
 173                    if (!jmidGetDeclaredMethods)
 174                    {
 175                       env->ExceptionClear();
 176                       jmidGetDeclaredMethods = env->GetMethodID(jInstSuperClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
 177                    }
 178                 
 179                    if (jmidGetDeclaredMethods)
 180                    {
 181                       jobjectArray jarrayDeclaredMethods  = (jobjectArray)env->CallObjectMethod(jInstClass,
 182                                                                                                 jmidGetDeclaredMethods);
 183 mark.hamzy 1.29 
 184                       if (jarrayDeclaredMethods)
 185                       {
 186                          for (int i = 0, iLen = env->GetArrayLength (jarrayDeclaredMethods); i < iLen; i++)
 187                          {
 188                             JMPIjvm::checkException(env);
 189                 
 190                             jobject jDeclaredMethod      = env->GetObjectArrayElement (jarrayDeclaredMethods, i);
 191                             jclass  jDeclaredMethodClass = env->GetObjectClass (jDeclaredMethod);
 192                 
 193                             JMPIjvm::checkException(env);
 194                 
 195                             jmethodID   jmidToString  = env->GetMethodID (jDeclaredMethodClass, "toString", "()Ljava/lang/String;");
 196                             jstring     jstringResult = (jstring)env->CallObjectMethod (jDeclaredMethod, jmidToString);
 197                             const char *pszResult     = env->GetStringUTFChars(jstringResult, 0);
 198                 
 199                             PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: "<<pszResult<<PEGASUS_STD(endl);
 200                 
 201                             env->ReleaseStringUTFChars (jstringResult, pszResult);
 202                          }
 203                       }
 204 mark.hamzy 1.29    }
 205                 
 206                 
 207                    env->ExceptionClear();
 208                 }
 209                 
 210                 void
 211                 debugDumpJavaObject (JNIEnv *env, jobject jInst)
 212                 {
 213                    jclass      jInstClass      = env->GetObjectClass(jInst);
 214                    jclass      jInstSuperClass = env->GetSuperclass(jInstClass);
 215                    jmethodID   jmidToString1   = env->GetMethodID(jInstClass,      "toString", "()Ljava/lang/String;");
 216                    jmethodID   jmidToString2   = env->GetMethodID(jInstSuperClass, "toString", "()Ljava/lang/String;");
 217                    if (!jmidToString1 || !jmidToString2)
 218                    {
 219                       env->ExceptionClear();
 220                       return;
 221                    }
 222                    jstring     jstringResult1  = (jstring)env->CallObjectMethod(jInstClass,      jmidToString1);
 223                    jstring     jstringResult2  = (jstring)env->CallObjectMethod(jInstSuperClass, jmidToString2);
 224                    jstring     jstringResult3  = (jstring)env->CallObjectMethod(jInst,           jmidToString1);
 225 mark.hamzy 1.29    const char *pszResult1      = env->GetStringUTFChars(jstringResult1, 0);
 226                    const char *pszResult2      = env->GetStringUTFChars(jstringResult2, 0);
 227                    const char *pszResult3      = env->GetStringUTFChars(jstringResult3, 0);
 228                 
 229                    jmethodID jmidCInst = env->GetMethodID(env->GetObjectClass(jInst),JMPIjvm::jv.instanceMethodNames[22].methodName, JMPIjvm::jv.instanceMethodNames[22].signature);
 230                 
 231                    PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: jInstClass = "<<jInstClass<<", jInstSuperClass = "<<jInstSuperClass<<", jClassShouldBe = "<<JMPIjvm::jv.classRefs[18]<<", jmidCInst = "<<jmidCInst<<PEGASUS_STD(endl);
 232                    PEGASUS_STD(cout)<<"pszResult1 = "<<pszResult1<<PEGASUS_STD(endl);
 233                    PEGASUS_STD(cout)<<"pszResult2 = "<<pszResult2<<PEGASUS_STD(endl);
 234                    PEGASUS_STD(cout)<<"pszResult3 = "<<pszResult3<<PEGASUS_STD(endl);
 235                 
 236                    env->ReleaseStringUTFChars (jstringResult1, pszResult1);
 237                    env->ReleaseStringUTFChars (jstringResult2, pszResult2);
 238                    env->ReleaseStringUTFChars (jstringResult3, pszResult3);
 239                 
 240                    env->ExceptionClear();
 241 mark.hamzy 1.23 }
 242 schuur     1.1  
 243 mark.hamzy 1.43 bool JMPIProviderManager::getInterfaceType (ProviderIdContainer pidc,
 244                                                             String&             interfaceType,
 245                                                             String&             interfaceVersion)
 246                 {
 247                 ///CIMInstance ciProvider       = pidc.getProvider ();
 248                    CIMInstance ciProviderModule = pidc.getModule ();
 249                    Uint32      idx;
 250                    bool        fRet             = true;
 251                 
 252                 ///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProvider       = "<<ciProvider.getPath ().toString ()<<PEGASUS_STD(endl);
 253                 ///PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: ciProviderModule = "<<ciProviderModule.getPath ().toString ()<<PEGASUS_STD(endl);
 254                 
 255                    idx = ciProviderModule.findProperty ("InterfaceType");
 256                 
 257                    if (idx != PEG_NOT_FOUND)
 258                    {
 259                       CIMValue itValue;
 260                 
 261                       itValue = ciProviderModule.getProperty (idx).getValue ();
 262                 
 263                       itValue.get (interfaceType);
 264 mark.hamzy 1.43 
 265                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceType = "<<interfaceType<<PEGASUS_STD(endl));
 266                    }
 267                    else
 268                    {
 269                       fRet = false;
 270                    }
 271                 
 272                    idx = ciProviderModule.findProperty ("InterfaceVersion");
 273                 
 274                    if (idx != PEG_NOT_FOUND)
 275                    {
 276                       CIMValue itValue;
 277                 
 278                       itValue = ciProviderModule.getProperty (idx).getValue ();
 279                 
 280                       itValue.get (interfaceVersion);
 281                 
 282                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::getInterfaceType: interfaceVersion = "<<interfaceVersion<<PEGASUS_STD(endl));
 283                    }
 284                    else
 285 mark.hamzy 1.43    {
 286                       fRet = false;
 287                    }
 288                 
 289                    return fRet;
 290                 }
 291                 
 292                 bool JMPIProviderManager::interfaceIsUsed (JNIEnv  *env,
 293                                                            jobject  jObject,
 294                                                            String   searchInterfaceName)
 295                 {
 296                    jobjectArray jInterfaces       = 0;
 297                    jsize        jInterfacesLength = 0;
 298                    bool         fFound            = false;
 299                 
 300                    if (!jObject)
 301                    {
 302                       return false;
 303                    }
 304                 
 305                    jInterfaces = (jobjectArray)env->CallObjectMethod (env->GetObjectClass (jObject),
 306 mark.hamzy 1.43                                                       JMPIjvm::jv.ClassGetInterfaces);
 307                 
 308                    if (!jInterfaces)
 309                    {
 310                       return false;
 311                    }
 312                 
 313                    jInterfacesLength = env->GetArrayLength (jInterfaces);
 314                 
 315                    for (jsize i = 0; !fFound && i < jInterfacesLength; i++)
 316                    {
 317                       jobject jInterface = env->GetObjectArrayElement (jInterfaces, i);
 318                 
 319                       if (jInterface)
 320                       {
 321                          jstring jInterfaceName = (jstring)env->CallObjectMethod (jInterface,
 322                                                                                   JMPIjvm::jv.ClassGetName);
 323                 
 324                          if (jInterfaceName)
 325                          {
 326                             const char *pszInterfaceName = env->GetStringUTFChars (jInterfaceName,
 327 mark.hamzy 1.43                                                                    0);
 328                             String      interfaceName    = pszInterfaceName;
 329                 
 330                             if (String::equal (interfaceName, searchInterfaceName))
 331                             {
 332                                fFound = true;
 333                             }
 334                 
 335                             env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName);
 336                          }
 337                       }
 338                    }
 339                 
 340                    return fFound;
 341                 }
 342                 
 343 schuur     1.1  JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;
 344 mark.hamzy 1.44 Mutex                              JMPIProviderManager::mutexProvTab;
 345 schuur     1.1  JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;
 346 mark.hamzy 1.44 Mutex                              JMPIProviderManager::mutexSelxTab;
 347 schuur     1.1  JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
 348 mark.hamzy 1.44 Mutex                              JMPIProviderManager::mutexProvReg;
 349 schuur     1.1  
 350 mark.hamzy 1.57 JMPIProviderManager::JMPIProviderManager()
 351 schuur     1.1  {
 352 carolann.graves 1.21    _subscriptionInitComplete = false;
 353 mark.hamzy      1.23 
 354                      #ifdef PEGASUS_DEBUG
 355                         if (getenv("PEGASUS_JMPI_TRACE"))
 356                            JMPIProviderManager::trace = 1;
 357                         else
 358                            JMPIProviderManager::trace = 0;
 359                      #else
 360                         JMPIProviderManager::trace = 0;
 361                      #endif
 362 schuur          1.1  }
 363                      
 364                      JMPIProviderManager::~JMPIProviderManager(void)
 365                      {
 366                      }
 367                      
 368 schuur          1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
 369 schuur          1.1              const String &ns, const String &cn)
 370                      {
 371                          String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
 372 mark.hamzy      1.23 
 373                          DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));
 374                      
 375 mark.hamzy      1.44     Boolean ret = false;
 376                      
 377                          {
 378                             AutoMutex lock (mutexProvReg);
 379                      
 380                             ret = provReg.insert(key,name);
 381                          }
 382                      
 383                          return ret;
 384 schuur          1.1  }
 385 mark.hamzy      1.23 
 386 schuur          1.1  Message * JMPIProviderManager::processMessage(Message * request) throw()
 387                      {
 388 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");
 389 schuur          1.1  
 390                          Message * response = 0;
 391 mark.hamzy      1.23 
 392 schuur          1.1      // pass the request message to a handler method based on message type
 393                          switch(request->getType())
 394                          {
 395                          case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 396                              response = handleGetInstanceRequest(request);
 397 mark.hamzy      1.25         break;
 398 schuur          1.1  
 399                          case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 400                              response = handleEnumerateInstancesRequest(request);
 401 mark.hamzy      1.25         break;
 402 schuur          1.1  
 403                          case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 404                              response = handleEnumerateInstanceNamesRequest(request);
 405 mark.hamzy      1.25         break;
 406 schuur          1.1  
 407                          case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 408                              response = handleCreateInstanceRequest(request);
 409 mark.hamzy      1.25         break;
 410 schuur          1.1  
 411                          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 412                              response = handleModifyInstanceRequest(request);
 413 mark.hamzy      1.25         break;
 414 schuur          1.1  
 415                          case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 416                              response = handleDeleteInstanceRequest(request);
 417 mark.hamzy      1.25         break;
 418 schuur          1.1  
 419 mark.hamzy      1.25     case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 420                              response = handleExecQueryRequest(request);
 421 schuur          1.1          break;
 422                      
 423                          case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 424                              response = handleAssociatorsRequest(request);
 425 mark.hamzy      1.25         break;
 426 schuur          1.1  
 427                          case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 428                              response = handleAssociatorNamesRequest(request);
 429 mark.hamzy      1.25         break;
 430 schuur          1.1  
 431                          case CIM_REFERENCES_REQUEST_MESSAGE:
 432                              response = handleReferencesRequest(request);
 433 mark.hamzy      1.25         break;
 434 schuur          1.1  
 435                          case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 436                              response = handleReferenceNamesRequest(request);
 437 mark.hamzy      1.25         break;
 438 schuur          1.1  
 439 mark.hamzy      1.26     case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 440                              response = handleGetPropertyRequest(request);
 441                              break;
 442                      
 443                          case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 444                              response = handleSetPropertyRequest(request);
 445                              break;
 446                      
 447 schuur          1.11     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 448 schuur          1.1          response = handleInvokeMethodRequest(request);
 449 mark.hamzy      1.25         break;
 450 schuur          1.1  
 451 schuur          1.12     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 452 schuur          1.1          response = handleCreateSubscriptionRequest(request);
 453 mark.hamzy      1.25         break;
 454 schuur          1.1  
 455 mark.hamzy      1.25 /*  case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 456 schuur          1.1          response = handleModifySubscriptionRequest(request);
 457                              break;
 458 schuur          1.12 */
 459 schuur          1.1      case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 460                              response = handleDeleteSubscriptionRequest(request);
 461 mark.hamzy      1.25         break;
 462 schuur          1.1  
 463 mark.hamzy      1.26 /*  case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 464 kumpf           1.7          response = handleExportIndicationRequest(request);
 465 schuur          1.1          break;
 466 schuur          1.12 */
 467 schuur          1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 468                              response = handleDisableModuleRequest(request);
 469 mark.hamzy      1.25         break;
 470 schuur          1.1  
 471                          case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 472                              response = handleEnableModuleRequest(request);
 473 mark.hamzy      1.25         break;
 474 schuur          1.1  
 475                          case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 476                              response = handleStopAllProvidersRequest(request);
 477 mark.hamzy      1.25         break;
 478 schuur          1.1  
 479 kumpf           1.4      case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
 480 mark.hamzy      1.23         response = handleInitializeProviderRequest(request);
 481 mark.hamzy      1.25         break;
 482 kumpf           1.4  
 483 carolann.graves 1.21     case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 484                              response = handleSubscriptionInitCompleteRequest (request);
 485 mark.hamzy      1.25         break;
 486 carolann.graves 1.21 
 487 schuur          1.1      default:
 488 mark.hamzy      1.23         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 489                                               "*** Unsupported Request "+request->getType());
 490                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));
 491 mark.hamzy      1.25 
 492 schuur          1.1          response = handleUnsupportedRequest(request);
 493                              break;
 494                          }
 495                      
 496                          PEG_METHOD_EXIT();
 497                      
 498                          return(response);
 499                      }
 500                      
 501 kumpf           1.6  Boolean JMPIProviderManager::hasActiveProviders()
 502                      {
 503                           return providerManager.hasActiveProviders();
 504                      }
 505                      
 506                      void JMPIProviderManager::unloadIdleProviders()
 507 schuur          1.1  {
 508 kumpf           1.6       providerManager.unloadIdleProviders();
 509 schuur          1.1  }
 510                      
 511                      #define STRDUPA(s,o) \
 512                         if (s) { \
 513                            o=(const char*)alloca(strlen(s)); \
 514                            strcpy((char*)(o),(s)); \
 515                         } \
 516                         else o=NULL;
 517                      
 518                      #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 519                      
 520                      
 521 kumpf           1.55 #define HandlerIntroBase(type,type1,message,request,response,handler) \
 522 schuur          1.1      CIM##type##RequestMessage * request = \
 523                              dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
 524                          PEGASUS_ASSERT(request != 0); \
 525                          CIM##type##ResponseMessage * response = \
 526 kumpf           1.55         dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \
 527 schuur          1.1      PEGASUS_ASSERT(response != 0); \
 528 kumpf           1.42     type1##ResponseHandler handler(request, response, _responseChunkCallback);
 529 schuur          1.1  
 530                      #define HandlerIntroInd(type,message,request,response,handler) \
 531 kumpf           1.55      HandlerIntroBase(type,Operation,message,request,response,handler)
 532 schuur          1.1  
 533 kumpf           1.4  #define HandlerIntroInit(type,message,request,response,handler) \
 534 kumpf           1.55      HandlerIntroBase(type,Operation,message,request,response,handler)
 535 kumpf           1.4  
 536 kumpf           1.55 #define HandlerIntro(type,message,request,response,handler) \
 537                           HandlerIntroBase(type,type,message,request,response,handler)
 538 schuur          1.1  
 539                      #define HandlerCatch(handler) \
 540                          catch(CIMException & e)  \
 541                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 542                                      "Exception: " + e.getMessage()); \
 543                              handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
 544                          } \
 545                          catch(Exception & e) \
 546                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 547                                      "Exception: " + e.getMessage()); \
 548                              handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
 549                          } \
 550                          catch(...) \
 551                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 552                                      "Exception: Unknown"); \
 553                              handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 554                          }
 555                      
 556 schuur          1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
 557                      {
 558                          Uint32 s=list.size();
 559                          jobjectArray pl=NULL;
 560                          if (s) {
 561                             jstring initial=env->NewString(NULL,0);
 562 mark.hamzy      1.23        pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
 563 schuur          1.13        for (Uint32 i=0; i<s; i++) {
 564                                 env->SetObjectArrayElement
 565                                    (pl,i,env->NewStringUTF(list[i].getString().getCString()));
 566                             }
 567                          }
 568                          return pl;
 569                      }
 570 schuur          1.1  
 571                      Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
 572                      {
 573 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");
 574 schuur          1.1  
 575 kumpf           1.55     HandlerIntro(GetInstance,message,request,response,handler);
 576 schuur          1.1  
 577 mark.hamzy      1.25     typedef enum {
 578                             METHOD_UNKNOWN = 0,
 579 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
 580                             METHOD_INSTANCEPROVIDER,
 581                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
 582 mark.hamzy      1.25     } METHOD_VERSION;
 583                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
 584                          JNIEnv          *env           = NULL;
 585 schuur          1.13 
 586 schuur          1.1      try {
 587 mark.hamzy      1.23         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 588 schuur          1.1              "JMPIProviderManager::handleGetInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 589                                  System::getHostName(),
 590                                  request->nameSpace.getString(),
 591                                  request->instanceName.getClassName().getString());
 592                      
 593 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
 594                      
 595 schuur          1.1          // make target object path
 596 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
 597                                                                             request->nameSpace,
 598                                                                             request->instanceName.getClassName(),
 599                                                                             request->instanceName.getKeyBindings());
 600 schuur          1.1  
 601                              // resolve provider name
 602 kumpf           1.2          ProviderName name = _resolveProviderName(
 603                                  request->operationContext.get(ProviderIdContainer::NAME));
 604 schuur          1.1  
 605                              // get cached or load new provider module
 606 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
 607                                                                                               name.getLogicalName());
 608 schuur          1.1          OperationContext context;
 609                      
 610 mark.hamzy      1.43         context.insert(request->operationContext.get(IdentityContainer::NAME));
 611                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 612                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 613                      
 614 mark.hamzy      1.23         // forward request
 615 mark.hamzy      1.25         JMPIProvider &pr=ph.GetProvider();
 616 schuur          1.1  
 617 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.getInstance: " + pr.getName());
 618 schuur          1.1  
 619 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Calling provider getInstance: "<<pr.getName()<<PEGASUS_STD(endl));
 620 schuur          1.1  
 621 mark.hamzy      1.25         JvmVector *jv = 0;
 622                      
 623                              env = JMPIjvm::attachThread(&jv);
 624                      
 625 mark.hamzy      1.37         if (!env)
 626                              {
 627                                  PEG_METHOD_EXIT();
 628                      
 629                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
 630                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
 631                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
 632                              }
 633                      
 634                      ////////DDD(debugPrintMethodPointers (env, (jclass)pr.jProviderClass));
 635                      
 636 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
 637                      
 638 mark.hamzy      1.43         jmethodID id               = NULL;
 639                              String    interfaceType;
 640                              String    interfaceVersion;
 641                      
 642                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
 643                                                interfaceType,
 644                                                interfaceVersion);
 645                      
 646                              if (interfaceType == "JMPI")
 647                              {
 648                                 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath cop,
 649                                 //                                                  org.pegasus.jmpi.CIMClass      cimClass,
 650                                 //                                                  boolean                        localOnly)
 651                                 //        throws org.pegasus.jmpi.CIMException
 652                                 id = env->GetMethodID((jclass)pr.jProviderClass,
 653                                                       "getInstance",
 654                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
 655 mark.hamzy      1.25 
 656 mark.hamzy      1.43            if (id != NULL)
 657                                 {
 658                                     eMethodFound = METHOD_INSTANCEPROVIDER;
 659                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
 660                                 }
 661                      
 662                                 if (id == NULL)
 663                                 {
 664                                     env->ExceptionClear();
 665 mark.hamzy      1.25 
 666 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath op,
 667                                     //                                                  boolean                        localOnly,
 668                                     //                                                  boolean                        includeQualifiers,
 669                                     //                                                  boolean                        includeClassOrigin,
 670                                     //                                                  java.lang.String[]             propertyList,
 671                                     //                                                  org.pegasus.jmpi.CIMClass      cc)
 672                                     //        throws org.pegasus.jmpi.CIMException
 673                                     id = env->GetMethodID((jclass)pr.jProviderClass,
 674                                                           "getInstance",
 675                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;");
 676                      
 677                                     if (id != NULL)
 678                                     {
 679                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
 680                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
 681                                     }
 682                                 }
 683 mark.hamzy      1.34         }
 684 mark.hamzy      1.43         else if (interfaceType == "JMPIExperimental")
 685 mark.hamzy      1.34         {
 686 mark.hamzy      1.43            /* Fix for 4238 */
 687                                 // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.OperationContext oc
 688                                 //                                                  org.pegasus.jmpi.CIMObjectPath    cop,
 689                                 //                                                  org.pegasus.jmpi.CIMClass         cimClass,
 690                                 //                                                  boolean                           includeQualifiers,
 691                                 //                                                  boolean                           includeClassOrigin,
 692                                 //                                                  String                            propertyList[])
 693                                 //        throws org.pegasus.jmpi.CIMException
 694                                 id = env->GetMethodID((jclass)pr.jProviderClass,
 695                                                       "getInstance",
 696                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;");
 697 mark.hamzy      1.34 
 698 mark.hamzy      1.43            if (id != NULL)
 699                                 {
 700                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
 701                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
 702                                 }
 703                                 /* Fix for 4238 */
 704 mark.hamzy      1.25         }
 705                      
 706                              if (id == NULL)
 707                              {
 708 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: No method found!"<<PEGASUS_STD(endl));
 709                      
 710                                 PEG_METHOD_EXIT();
 711 mark.hamzy      1.25 
 712 mark.hamzy      1.43            throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
 713                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
 714                                                                                    "Could not find a method for the provider based on InterfaceType."));
 715 mark.hamzy      1.25         }
 716                      
 717 schuur          1.1          JMPIjvm::checkException(env);
 718 mark.hamzy      1.23 
 719 mark.hamzy      1.25         switch (eMethodFound)
 720                              {
 721 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
 722 mark.hamzy      1.25         {
 723 mark.hamzy      1.29             jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 724                                  jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 725 mark.hamzy      1.25 
 726                                  JMPIjvm::checkException(env);
 727                      
 728 mark.hamzy      1.40             CIMClass cls;
 729                      
 730                                  try
 731                                  {
 732                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 733                                     AutoMutex lock (pr._cimomMutex);
 734                      
 735                                     cls = pr._cimom_handle->getClass(context,
 736                                                                      request->nameSpace,
 737                                                                      request->instanceName.getClassName(),
 738                                                                      false,
 739                                                                      true,
 740                                                                      true,
 741                                                                      CIMPropertyList());
 742                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 743                                  }
 744                                  catch (CIMException e)
 745                                  {
 746                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 747                                     throw;
 748                                  }
 749 mark.hamzy      1.40 
 750 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
 751                      
 752                                  JMPIjvm::checkException(env);
 753 mark.hamzy      1.25 
 754 mark.hamzy      1.29             jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 755                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 756 mark.hamzy      1.25 
 757                                  JMPIjvm::checkException(env);
 758 mark.hamzy      1.23 
 759 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
 760 schuur          1.1  
 761 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
 762                      
 763 mark.hamzy      1.29             jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
 764                                                                         id,
 765                                                                         jop,
 766 mark.hamzy      1.36                                                    JMPI_LOCALONLY,
 767                                                                         JMPI_INCLUDE_QUALIFIERS,
 768 mark.hamzy      1.29                                                    request->includeClassOrigin,
 769                                                                         jPropertyList,
 770                                                                         jcimClass);
 771 mark.hamzy      1.23 
 772 mark.hamzy      1.25             JMPIjvm::checkException(env);
 773 mark.hamzy      1.23 
 774 mark.hamzy      1.25             handler.processing();
 775 schuur          1.1  
 776 mark.hamzy      1.29             if (jciRet) {
 777                                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 778                                     CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 779 schuur          1.13 
 780 mark.hamzy      1.29                handler.deliver(*ciRet);
 781 mark.hamzy      1.25             }
 782                                  handler.complete();
 783                                  break;
 784 mark.hamzy      1.23         }
 785 schuur          1.13 
 786 mark.hamzy      1.34         /* Fix for 4238 */
 787 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
 788 mark.hamzy      1.34         {
 789 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
 790                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
 791                      
 792 mark.hamzy      1.34             jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 793                                  jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 794                      
 795                                  JMPIjvm::checkException(env);
 796                      
 797 mark.hamzy      1.40             CIMClass cls;
 798                      
 799                                  try
 800                                  {
 801                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 802                                     AutoMutex lock (pr._cimomMutex);
 803                      
 804                                     cls = pr._cimom_handle->getClass(context,
 805                                                                      request->nameSpace,
 806                                                                      request->instanceName.getClassName(),
 807                                                                      false,
 808                                                                      true,
 809                                                                      true,
 810                                                                      CIMPropertyList());
 811                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 812                                  }
 813                                  catch (CIMException e)
 814                                  {
 815                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 816                                     throw;
 817                                  }
 818 mark.hamzy      1.40 
 819 mark.hamzy      1.34             CIMClass *pcls = new CIMClass (cls);
 820                      
 821                                  JMPIjvm::checkException(env);
 822                      
 823                                  jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 824                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 825                      
 826                                  JMPIjvm::checkException(env);
 827                      
 828                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
 829 kumpf           1.55 
 830                                  StatProviderTimeMeasurement providerTime(response);
 831                      
 832 mark.hamzy      1.34             jobject      jciRet        = env->CallObjectMethod((jobject)pr.jProvider,
 833                                                                                     id,
 834 mark.hamzy      1.43                                                                joc,
 835 mark.hamzy      1.34                                                                jop,
 836                                                                                     jcimClass,
 837                                                                                     JMPI_INCLUDE_QUALIFIERS,
 838                                                                                     request->includeClassOrigin,
 839                                                                                     jPropertyList);
 840                      
 841                                  JMPIjvm::checkException(env);
 842                      
 843 mark.hamzy      1.43             if (joc)
 844                                  {
 845                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
 846                      
 847                                     JMPIjvm::checkException(env);
 848                                  }
 849                      
 850 mark.hamzy      1.34             handler.processing();
 851                      
 852                                  if (jciRet) {
 853                                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 854                                     CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 855                      
 856                                     handler.deliver(*ciRet);
 857                                  }
 858                                  handler.complete();
 859                                  break;
 860                              }
 861                              /* Fix for 4238 */
 862                      
 863 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
 864 mark.hamzy      1.25         {
 865 mark.hamzy      1.29             jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 866                                  jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 867 mark.hamzy      1.25 
 868                                  JMPIjvm::checkException(env);
 869                      
 870 mark.hamzy      1.40             CIMClass cls;
 871                      
 872                                  try
 873                                  {
 874                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 875                                     AutoMutex lock (pr._cimomMutex);
 876                      
 877                                     cls = pr._cimom_handle->getClass(context,
 878                                                                      request->nameSpace,
 879                                                                      request->instanceName.getClassName(),
 880                                                                      false,
 881                                                                      true,
 882                                                                      true,
 883                                                                      CIMPropertyList());
 884                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 885                                  }
 886                                  catch (CIMException e)
 887                                  {
 888                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 889                                     throw;
 890                                  }
 891 mark.hamzy      1.40 
 892 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
 893 mark.hamzy      1.25 
 894 mark.hamzy      1.27             JMPIjvm::checkException(env);
 895                      
 896 mark.hamzy      1.29             jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 897                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 898 mark.hamzy      1.25 
 899                                  JMPIjvm::checkException(env);
 900                      
 901 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
 902                      
 903 mark.hamzy      1.30             // Modified for Bugzilla# 3679
 904 mark.hamzy      1.29             jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
 905                                                                         id,
 906                                                                         jop,
 907                                                                         jcimClass,
 908 mark.hamzy      1.30                                                    JMPI_LOCALONLY);
 909 mark.hamzy      1.25 
 910                                  JMPIjvm::checkException(env);
 911                      
 912                                  handler.processing();
 913 schuur          1.13 
 914 mark.hamzy      1.29             if (jciRet) {
 915                                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 916                                     CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 917 schuur          1.13 
 918 mark.hamzy      1.29                handler.deliver(*ciRet);
 919 mark.hamzy      1.25             }
 920                                  handler.complete();
 921                                  break;
 922                              }
 923 mark.hamzy      1.23 
 924 mark.hamzy      1.25         case METHOD_UNKNOWN:
 925                              {
 926                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
 927                                  break;
 928                              }
 929 schuur          1.1          }
 930 schuur          1.13     }
 931 schuur          1.1      HandlerCatch(handler);
 932 schuur          1.13 
 933 schuur          1.1      if (env) JMPIjvm::detachThread();
 934 schuur          1.13 
 935 schuur          1.1      PEG_METHOD_EXIT();
 936                      
 937                          return(response);
 938                      }
 939                      
 940                      Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
 941                      {
 942 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleEnumerateInstanceRequest");
 943                      
 944 kumpf           1.55     HandlerIntro(EnumerateInstances,message,request,response,handler);
 945 schuur          1.1  
 946 mark.hamzy      1.25     typedef enum {
 947                             METHOD_UNKNOWN = 0,
 948 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
 949                             METHOD_CIMINSTANCEPROVIDER2,
 950                             METHOD_INSTANCEPROVIDER,
 951                             METHOD_INSTANCEPROVIDER2,
 952 mark.hamzy      1.25     } METHOD_VERSION;
 953                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
 954                          JNIEnv          *env           = NULL;
 955 schuur          1.13 
 956                          try {
 957 schuur          1.1        Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 958                                  "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0  Name space: $1  Class name: $2",
 959                                  System::getHostName(),
 960                                  request->nameSpace.getString(),
 961                                  request->className.getString());
 962                      
 963 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
 964                      
 965 schuur          1.1          // make target object path
 966 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
 967                                                                             request->nameSpace,
 968                                                                             request->className);
 969 schuur          1.1  
 970                              // resolve provider name
 971 kumpf           1.2          ProviderName name = _resolveProviderName(
 972                                  request->operationContext.get(ProviderIdContainer::NAME));
 973 schuur          1.1  
 974                              // get cached or load new provider module
 975 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
 976                                                                                               name.getLogicalName(),
 977                                                                                               String::EMPTY);
 978 schuur          1.1  
 979 schuur          1.12         // convert arguments
 980 schuur          1.1          OperationContext context;
 981                      
 982 schuur          1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
 983                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 984                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 985 schuur          1.1  
 986                              // forward request
 987 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
 988 schuur          1.1  
 989 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstances: " + pr.getName());
 990 schuur          1.1  
 991 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Calling provider enumerateInstances: "<<pr.getName()<<PEGASUS_STD(endl));
 992 schuur          1.12 
 993 mark.hamzy      1.25         JvmVector *jv = 0;
 994                      
 995                              env = JMPIjvm::attachThread(&jv);
 996                      
 997 mark.hamzy      1.37         if (!env)
 998                              {
 999                                  PEG_METHOD_EXIT();
1000                      
1001                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1002                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1003                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1004                              }
1005                      
1006 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
1007                      
1008 mark.hamzy      1.43         jmethodID id               = NULL;
1009                              String    interfaceType;
1010                              String    interfaceVersion;
1011                      
1012                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
1013                                                interfaceType,
1014                                                interfaceVersion);
1015                      
1016                              if (interfaceType == "JMPI")
1017                              {
1018                                 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1019                                 //                                                 boolean                        deep,
1020                                 //                                                 org.pegasus.jmpi.CIMClass      cimClass,
1021                                 //                                                 boolean                        localOnly)
1022                                 //        throws org.pegasus.jmpi.CIMException
1023                                 id = env->GetMethodID((jclass)pr.jProviderClass,
1024                                                       "enumInstances",
1025                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
1026 mark.hamzy      1.25 
1027 mark.hamzy      1.43            if (id != NULL)
1028                                 {
1029                                     eMethodFound = METHOD_INSTANCEPROVIDER;
1030                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
1031                                 }
1032                      
1033                                 if (id == NULL)
1034                                 {
1035                                     env->ExceptionClear();
1036 mark.hamzy      1.25 
1037 mark.hamzy      1.49                // public org.pegasus.jmpi.CIMInstance[] enumerateInstances (org.pegasus.jmpi.CIMObjectPath cop,
1038                                     //                                                           boolean                        localOnly,
1039                                     //                                                           boolean                        includeQualifiers,
1040                                     //                                                           boolean                        includeClassOrigin,
1041                                     //                                                           java.lang.String[]             propertyList,
1042                                     //                                                           org.pegasus.jmpi.CIMClass      cimClass)
1043 mark.hamzy      1.43                //         throws org.pegasus.jmpi.CIMException
1044                                     id = env->GetMethodID((jclass)pr.jProviderClass,
1045 mark.hamzy      1.49                                      "enumerateInstances",
1046 mark.hamzy      1.43                                      "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
1047                      
1048                                     if (id != NULL)
1049                                     {
1050                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
1051                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
1052                                     }
1053                                 }
1054                              }
1055                              else if (interfaceType == "JMPIExperimental")
1056 mark.hamzy      1.25         {
1057 mark.hamzy      1.43            /* Fix for 4189 */
1058                                 // public abstract java.util.Vector enumerateInstances (org.pegasus.jmpi.OperationContext oc
1059                                 //                                                      org.pegasus.jmpi.CIMObjectPath    cop,
1060                                 //                                                      org.pegasus.jmpi.CIMClass         cimClass,
1061                                 //                                                      boolean                           includeQualifiers,
1062                                 //                                                      boolean                           includeClassOrigin,
1063                                 //                                                      java.lang.String[]                propertyList)
1064                                 //         throws org.pegasus.jmpi.CIMException
1065                                 id = env->GetMethodID((jclass)pr.jProviderClass,
1066                                                       "enumerateInstances",
1067                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1068 mark.hamzy      1.33 
1069 mark.hamzy      1.43            if (id != NULL)
1070                                 {
1071                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
1072                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1073                                 }
1074                                 /* Fix for 4189 */
1075 mark.hamzy      1.33 
1076 mark.hamzy      1.43            if (id == NULL)
1077                                 {
1078                                     env->ExceptionClear();
1079 mark.hamzy      1.33 
1080 mark.hamzy      1.43                // public abstract org.pegasus.jmpi.CIMInstance[] enumerateInstances (org.pegasus.jmpi.OperationContext oc
1081                                     //                                                                    org.pegasus.jmpi.CIMObjectPath    cop,
1082                                     //                                                                    org.pegasus.jmpi.CIMClass         cimClass,
1083                                     //                                                                    boolean                           includeQualifiers,
1084                                     //                                                                    boolean                           includeClassOrigin,
1085                                     //                                                                    java.lang.String[]                propertyList)
1086                                     //         throws org.pegasus.jmpi.CIMException
1087                                     id = env->GetMethodID((jclass)pr.jProviderClass,
1088 mark.hamzy      1.49                                      "enumerateInstances",
1089 mark.hamzy      1.43                                      "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
1090                      
1091                                     if (id != NULL)
1092                                     {
1093                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
1094                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1095                                     }
1096                                 }
1097 mark.hamzy      1.25         }
1098                      
1099                              if (id == NULL)
1100                              {
1101 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: No method found!"<<PEGASUS_STD(endl));
1102                      
1103                                 PEG_METHOD_EXIT();
1104 schuur          1.1  
1105 mark.hamzy      1.43            throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1106                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
1107                                                                                    "Could not find a method for the provider based on InterfaceType."));
1108 mark.hamzy      1.25         }
1109 schuur          1.12 
1110                              JMPIjvm::checkException(env);
1111 mark.hamzy      1.23 
1112 mark.hamzy      1.25         switch (eMethodFound)
1113                              {
1114 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
1115 mark.hamzy      1.25         {
1116 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1117                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1118 mark.hamzy      1.23 
1119 mark.hamzy      1.25             JMPIjvm::checkException(env);
1120 schuur          1.1  
1121 mark.hamzy      1.40             CIMClass cls;
1122                      
1123                                  try
1124                                  {
1125                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1126                                     AutoMutex lock (pr._cimomMutex);
1127                      
1128                                     cls = pr._cimom_handle->getClass(context,
1129                                                                      request->nameSpace,
1130                                                                      request->className,
1131                                                                      false,
1132                                                                      true,
1133                                                                      true,
1134                                                                      CIMPropertyList());
1135                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1136                                  }
1137                                  catch (CIMException e)
1138                                  {
1139                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1140                                     throw;
1141                                  }
1142 mark.hamzy      1.40 
1143 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1144                      
1145 mark.hamzy      1.25             JMPIjvm::checkException(env);
1146 schuur          1.1  
1147 mark.hamzy      1.29             jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1148                                  jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1149 schuur          1.13 
1150 mark.hamzy      1.23             JMPIjvm::checkException(env);
1151 schuur          1.1  
1152 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1153 kumpf           1.55 
1154                                  StatProviderTimeMeasurement providerTime(response);
1155                      
1156 mark.hamzy      1.36             jobjectArray jAr           = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1157                                                                                                   id,
1158                                                                                                   jcop,
1159                                                                                                   JMPI_LOCALONLY,
1160                                                                                                   JMPI_INCLUDE_QUALIFIERS,
1161                                                                                                   request->includeClassOrigin,
1162                                                                                                   jPropertyList,
1163                                                                                                   jcc);
1164 mark.hamzy      1.25 
1165 mark.hamzy      1.23             JMPIjvm::checkException(env);
1166                      
1167                                  handler.processing();
1168 mark.hamzy      1.25             if (jAr) {
1169                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1170 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1171                      
1172 mark.hamzy      1.29                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
1173                      
1174 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1175 schuur          1.13 
1176 mark.hamzy      1.29                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1177                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1178 schuur          1.13 
1179 mark.hamzy      1.36                     /* Fix for 4237 */
1180 mark.hamzy      1.40                     CIMClass cls;
1181                      
1182                                          try
1183                                          {
1184                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1185                                             AutoMutex lock (pr._cimomMutex);
1186                      
1187                                             cls = pr._cimom_handle->getClass(context,
1188                                                                              request->nameSpace,
1189                                                                              ciRet->getClassName(),
1190                                                                              false,
1191                                                                              true,
1192                                                                              true,
1193                                                                              CIMPropertyList());
1194                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1195                                          }
1196                                          catch (CIMException e)
1197                                          {
1198                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1199                                             throw;
1200                                          }
1201 mark.hamzy      1.40 
1202 mark.hamzy      1.36                     const CIMObjectPath& op  = ciRet->getPath();
1203                                          CIMObjectPath        iop = ciRet->buildPath(cls);
1204                      
1205 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1206 schuur          1.13 
1207 mark.hamzy      1.29                     handler.deliver(*ciRet);
1208 mark.hamzy      1.23                 }
1209                                  }
1210                                  handler.complete();
1211 mark.hamzy      1.25             break;
1212 schuur          1.13         }
1213 mark.hamzy      1.25 
1214 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
1215                              {
1216                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1217                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1218                      
1219                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1220                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1221                      
1222                                  JMPIjvm::checkException(env);
1223                      
1224                                  CIMClass cls;
1225                      
1226                                  try
1227                                  {
1228                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1229                                     AutoMutex lock (pr._cimomMutex);
1230                      
1231                                     cls = pr._cimom_handle->getClass(context,
1232                                                                      request->nameSpace,
1233                                                                      request->className,
1234                                                                      false,
1235 mark.hamzy      1.43                                                 true,
1236                                                                      true,
1237                                                                      CIMPropertyList());
1238                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1239                                  }
1240                                  catch (CIMException e)
1241                                  {
1242                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1243                                     throw;
1244                                  }
1245                      
1246                                  CIMClass *pcls = new CIMClass (cls);
1247                      
1248                                  JMPIjvm::checkException(env);
1249                      
1250                                  jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1251                                  jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1252                      
1253                                  JMPIjvm::checkException(env);
1254                      
1255                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1256 kumpf           1.55 
1257                                  StatProviderTimeMeasurement providerTime(response);
1258                      
1259 mark.hamzy      1.43             jobjectArray jAr           = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1260                                                                                                   id,
1261                                                                                                   joc,
1262                                                                                                   jcop,
1263                                                                                                   jcc,
1264                                                                                                   JMPI_INCLUDE_QUALIFIERS,
1265                                                                                                   request->includeClassOrigin,
1266                                                                                                   jPropertyList);
1267                      
1268                                  JMPIjvm::checkException(env);
1269                      
1270                                  if (joc)
1271                                  {
1272                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1273                      
1274                                     JMPIjvm::checkException(env);
1275                                  }
1276                      
1277                                  handler.processing();
1278                                  if (jAr) {
1279                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1280 mark.hamzy      1.43                     JMPIjvm::checkException(env);
1281                      
1282                                          jobject jciRet = env->GetObjectArrayElement(jAr,i);
1283                      
1284                                          JMPIjvm::checkException(env);
1285                      
1286                                          jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1287                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1288                      
1289                                          /* Fix for 4237 */
1290                                          CIMClass cls;
1291                      
1292                                          try
1293                                          {
1294                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1295                                             AutoMutex lock (pr._cimomMutex);
1296                      
1297                                             cls = pr._cimom_handle->getClass(context,
1298                                                                              request->nameSpace,
1299                                                                              ciRet->getClassName(),
1300                                                                              false,
1301 mark.hamzy      1.43                                                         true,
1302                                                                              true,
1303                                                                              CIMPropertyList());
1304                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1305                                          }
1306                                          catch (CIMException e)
1307                                          {
1308                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1309                                             throw;
1310                                          }
1311                      
1312                                          const CIMObjectPath& op  = ciRet->getPath();
1313                                          CIMObjectPath        iop = ciRet->buildPath(cls);
1314                      
1315                                          JMPIjvm::checkException(env);
1316                      
1317                                          handler.deliver(*ciRet);
1318                                      }
1319                                  }
1320                                  handler.complete();
1321                                  break;
1322 mark.hamzy      1.43         }
1323                      
1324 mark.hamzy      1.33         /* Fix for 4189 */
1325 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
1326 mark.hamzy      1.33         {
1327 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1328                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1329                      
1330 mark.hamzy      1.33             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1331                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1332                      
1333                                  JMPIjvm::checkException(env);
1334                      
1335 mark.hamzy      1.40             CIMClass cls;
1336                      
1337                                  try
1338                                  {
1339                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1340                                     AutoMutex lock (pr._cimomMutex);
1341                      
1342                                     cls = pr._cimom_handle->getClass (context,
1343                                                                       request->nameSpace,
1344                                                                       request->className,
1345                                                                       false,
1346                                                                       true,
1347                                                                       true,
1348                                                                       CIMPropertyList());
1349                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1350                                  }
1351                                  catch (CIMException e)
1352                                  {
1353                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1354                                     throw;
1355                                  }
1356 mark.hamzy      1.40 
1357 mark.hamzy      1.33             CIMClass *pcls = new CIMClass (cls);
1358                      
1359                                  JMPIjvm::checkException(env);
1360                      
1361                                  jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1362                                  jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1363                      
1364                                  JMPIjvm::checkException(env);
1365                      
1366                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1367 kumpf           1.55 
1368                                  StatProviderTimeMeasurement providerTime(response);
1369                      
1370 mark.hamzy      1.33             jobject      jVec          = env->CallObjectMethod((jobject)pr.jProvider,
1371                                                                                     id,
1372 mark.hamzy      1.43                                                                joc,
1373 mark.hamzy      1.33                                                                jcop,
1374 mark.hamzy      1.35                                                                jcc,
1375 mark.hamzy      1.33                                                                JMPI_INCLUDE_QUALIFIERS,
1376                                                                                     request->includeClassOrigin,
1377                                                                                     jPropertyList);
1378                      
1379                                  JMPIjvm::checkException(env);
1380                      
1381 mark.hamzy      1.43             if (joc)
1382                                  {
1383                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1384                      
1385                                     JMPIjvm::checkException(env);
1386                                  }
1387                      
1388 mark.hamzy      1.33             handler.processing();
1389                                  if (jVec) {
1390                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1391                                          JMPIjvm::checkException(env);
1392                      
1393                                          jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1394                      
1395                                          JMPIjvm::checkException(env);
1396                      
1397                                          jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1398                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1399                      
1400                                          /* Fix for 4237 */
1401 mark.hamzy      1.40                     CIMClass             cls;
1402                      
1403                                          try
1404                                          {
1405                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1406                                             AutoMutex lock (pr._cimomMutex);
1407                      
1408                                             cls = pr._cimom_handle->getClass(context,
1409                                                                              request->nameSpace,
1410                                                                              ciRet->getClassName(),
1411                                                                              false,
1412                                                                              true,
1413                                                                              true,
1414                                                                              CIMPropertyList());
1415                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1416                                          }
1417                                          catch (CIMException e)
1418                                          {
1419                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1420                                             throw;
1421                                          }
1422 mark.hamzy      1.40 
1423 mark.hamzy      1.33                     const CIMObjectPath& op  = ciRet->getPath();
1424                                          CIMObjectPath        iop = ciRet->buildPath(cls);
1425                      
1426                                          JMPIjvm::checkException(env);
1427                      
1428                                          iop.setNameSpace(op.getNameSpace());
1429                      
1430                                          ciRet->setPath(iop);
1431                                          /* Fix for 4237*/
1432                      
1433                                          handler.deliver(*ciRet);
1434                                      }
1435                                  }
1436                                  handler.complete();
1437                                  break;
1438                              }
1439                              /* Fix for 4189 */
1440                      
1441 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
1442 mark.hamzy      1.25         {
1443 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1444                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1445 mark.hamzy      1.25 
1446                                  JMPIjvm::checkException(env);
1447                      
1448 mark.hamzy      1.40             CIMClass cls;
1449                      
1450                                  try
1451                                  {
1452                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1453                                     AutoMutex lock (pr._cimomMutex);
1454                      
1455                                     cls = pr._cimom_handle->getClass(context,
1456                                                                      request->nameSpace,
1457                                                                      request->className,
1458                                                                      false,
1459                                                                      true,
1460                                                                      true,
1461                                                                      CIMPropertyList());
1462                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1463                                  }
1464                                  catch (CIMException e)
1465                                  {
1466                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1467                                     throw;
1468                                  }
1469 mark.hamzy      1.40 
1470 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1471                      
1472 mark.hamzy      1.25             JMPIjvm::checkException(env);
1473                      
1474 mark.hamzy      1.29             jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1475                                  jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1476 mark.hamzy      1.25 
1477                                  JMPIjvm::checkException(env);
1478                      
1479 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1480                      
1481 mark.hamzy      1.30             // Modified for Bugzilla# 3679
1482 mark.hamzy      1.25             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1483                                                                       id,
1484 mark.hamzy      1.29                                                  jcop,
1485 mark.hamzy      1.33                                                  request->deepInheritance,
1486 mark.hamzy      1.29                                                  jcc,
1487 mark.hamzy      1.30                                                  JMPI_LOCALONLY);
1488 mark.hamzy      1.25 
1489 mark.hamzy      1.23             JMPIjvm::checkException(env);
1490 schuur          1.12 
1491 mark.hamzy      1.23             handler.processing();
1492 mark.hamzy      1.25             if (jVec) {
1493                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1494 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1495                      
1496 mark.hamzy      1.29                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1497                      
1498 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1499 schuur          1.12 
1500 mark.hamzy      1.29                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1501                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1502 schuur          1.12 
1503 mark.hamzy      1.33                     /* Fix for 4237 */
1504 mark.hamzy      1.40                     CIMClass cls;
1505                      
1506                                          try
1507                                          {
1508                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1509                                             AutoMutex lock (pr._cimomMutex);
1510                      
1511                                             cls = pr._cimom_handle->getClass(context,
1512                                                                              request->nameSpace,
1513                                                                              ciRet->getClassName(),
1514                                                                              false,
1515                                                                              true,
1516                                                                              true,
1517                                                                              CIMPropertyList());
1518                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1519                                          }
1520                                          catch (CIMException e)
1521                                          {
1522                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1523                                             throw;
1524                                          }
1525 mark.hamzy      1.40 
1526 mark.hamzy      1.33                     const CIMObjectPath& op  = ciRet->getPath();
1527                                          CIMObjectPath        iop = ciRet->buildPath(cls);
1528                      
1529                                          JMPIjvm::checkException(env);
1530                      
1531                                          iop.setNameSpace(op.getNameSpace());
1532                      
1533                                          ciRet->setPath(iop);
1534                                          /* Fix for 4237*/
1535                      
1536 mark.hamzy      1.29                     handler.deliver(*ciRet);
1537 mark.hamzy      1.23                 }
1538                                  }
1539                                  handler.complete();
1540 mark.hamzy      1.25             break;
1541                              }
1542                      
1543                              case METHOD_UNKNOWN:
1544                              {
1545                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: should not be here!"<<PEGASUS_STD(endl));
1546                                  break;
1547                              }
1548 schuur          1.1          }
1549                          }
1550                          HandlerCatch(handler);
1551 schuur          1.12 
1552 schuur          1.11     if (env) JMPIjvm::detachThread();
1553 schuur          1.12 
1554 schuur          1.1      PEG_METHOD_EXIT();
1555                      
1556                          return(response);
1557                      }
1558                      
1559                      Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
1560                      {
1561                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
1562                      
1563 kumpf           1.55     HandlerIntro(EnumerateInstanceNames,message,request,response, handler);
1564 mark.hamzy      1.23 
1565 mark.hamzy      1.25     typedef enum {
1566                             METHOD_UNKNOWN = 0,
1567 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
1568                             METHOD_CIMINSTANCEPROVIDER2,
1569                             METHOD_INSTANCEPROVIDER,
1570                             METHOD_INSTANCEPROVIDER2,
1571 mark.hamzy      1.25     } METHOD_VERSION;
1572                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1573                          JNIEnv          *env           = NULL;
1574 schuur          1.13 
1575 schuur          1.1      try {
1576                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1577                                  "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1578                                  System::getHostName(),
1579                                  request->nameSpace.getString(),
1580                                  request->className.getString());
1581 mark.hamzy      1.23 
1582                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
1583                      
1584 mark.hamzy      1.25         // make target object path
1585 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1586                                                                             request->nameSpace,
1587                                                                             request->className);
1588 schuur          1.1  
1589                              // resolve provider name
1590 kumpf           1.2          ProviderName name = _resolveProviderName(
1591                                  request->operationContext.get(ProviderIdContainer::NAME));
1592 schuur          1.1  
1593                              // get cached or load new provider module
1594 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
1595                                                                                               name.getLogicalName());
1596 schuur          1.1  
1597                              // convert arguments
1598                              OperationContext context;
1599                      
1600 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
1601                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1602                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1603 schuur          1.1  
1604 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
1605 schuur          1.1  
1606 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstanceNames: " + pr.getName());
1607 schuur          1.1  
1608 mark.hamzy      1.37         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Calling provider : enumerateInstanceNames: "<<pr.getName()<<PEGASUS_STD(endl));
1609 schuur          1.1  
1610 mark.hamzy      1.25         JvmVector *jv = 0;
1611 schuur          1.12 
1612 mark.hamzy      1.25         env = JMPIjvm::attachThread(&jv);
1613 schuur          1.1  
1614 mark.hamzy      1.37         if (!env)
1615                              {
1616                                  PEG_METHOD_EXIT();
1617                      
1618                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1619                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1620                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1621                              }
1622                      
1623 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
1624 schuur          1.12 
1625 mark.hamzy      1.43         jmethodID id               = NULL;
1626                              String    interfaceType;
1627                              String    interfaceVersion;
1628                      
1629                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
1630                                                interfaceType,
1631                                                interfaceVersion);
1632                      
1633                              if (interfaceType == "JMPI")
1634                              {
1635                                 // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1636                                 //                                                 boolean                        deep,
1637                                 //                                                 org.pegasus.jmpi.CIMClass      cimClass)
1638                                 //        throws org.pegasus.jmpi.CIMException
1639                                 id = env->GetMethodID((jclass)pr.jProviderClass,
1640                                                       "enumInstances",
1641                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1642                      
1643                                 if (id != NULL)
1644                                 {
1645                                     eMethodFound = METHOD_INSTANCEPROVIDER;
1646 mark.hamzy      1.43                DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
1647                                 }
1648 mark.hamzy      1.23 
1649 mark.hamzy      1.43            if (id == NULL)
1650                                 {
1651                                     env->ExceptionClear();
1652 schuur          1.1  
1653 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.CIMObjectPath op,
1654                                     //                                                                 org.pegasus.jmpi.CIMClass      cc)
1655                                     //         throws org.pegasus.jmpi.CIMException
1656                                     id = env->GetMethodID((jclass)pr.jProviderClass,
1657                                                           "enumerateInstanceNames",
1658                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1659                      
1660                                     if (id != NULL)
1661                                     {
1662                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
1663                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
1664                                     }
1665                                 }
1666                              }
1667                              else if (interfaceType == "JMPIExperimental")
1668 mark.hamzy      1.25         {
1669 mark.hamzy      1.43            // public abstract java.util.Vector enumerateInstanceNames (org.pegasus.jmpi.OperationContext oc
1670                                 //                                                          org.pegasus.jmpi.CIMObjectPath    cop,
1671                                 //                                                          org.pegasus.jmpi.CIMClass         cimClass)
1672                                 //         throws org.pegasus.jmpi.CIMException
1673                                 id = env->GetMethodID((jclass)pr.jProviderClass,
1674                                                       "enumerateInstanceNames",
1675                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1676 schuur          1.1  
1677 mark.hamzy      1.43            if (id != NULL)
1678                                 {
1679                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
1680                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1681                                 }
1682 schuur          1.1  
1683 mark.hamzy      1.43            if (id == NULL)
1684                                 {
1685                                     env->ExceptionClear();
1686 schuur          1.13 
1687 mark.hamzy      1.43                // public abstract org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.OperationContext oc
1688                                     //                                                                          org.pegasus.jmpi.CIMObjectPath    cop,
1689                                     //                                                                          org.pegasus.jmpi.CIMClass         cimClass)
1690                                     //         throws org.pegasus.jmpi.CIMException
1691                                     id = env->GetMethodID((jclass)pr.jProviderClass,
1692                                                           "enumerateInstanceNames",
1693                                                           "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1694                      
1695                                     if (id != NULL)
1696                                     {
1697                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
1698                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
1699                                     }
1700                                 }
1701 mark.hamzy      1.23         }
1702 mark.hamzy      1.25 
1703 mark.hamzy      1.36         if (id == NULL)
1704                              {
1705 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: No method found!"<<PEGASUS_STD(endl));
1706 mark.hamzy      1.36 
1707 mark.hamzy      1.43            PEG_METHOD_EXIT();
1708 mark.hamzy      1.36 
1709 mark.hamzy      1.43            throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1710                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
1711                                                                                    "Could not find a method for the provider based on InterfaceType."));
1712 mark.hamzy      1.36         }
1713                      
1714 schuur          1.1          JMPIjvm::checkException(env);
1715                      
1716 mark.hamzy      1.25         switch (eMethodFound)
1717                              {
1718 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
1719 mark.hamzy      1.25         {
1720 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1721                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1722 mark.hamzy      1.25 
1723                                  JMPIjvm::checkException(env);
1724                      
1725 mark.hamzy      1.40             CIMClass cls;
1726                      
1727                                  try
1728                                  {
1729                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1730                                     AutoMutex lock (pr._cimomMutex);
1731                      
1732                                     cls = pr._cimom_handle->getClass(context,
1733                                                                      request->nameSpace,
1734                                                                      request->className,
1735                                                                      false,
1736                                                                      true,
1737                                                                      true,
1738                                                                      CIMPropertyList());
1739                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1740                                  }
1741                                  catch (CIMException e)
1742                                  {
1743                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1744                                     throw;
1745                                  }
1746 mark.hamzy      1.40 
1747 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1748 mark.hamzy      1.25 
1749                                  JMPIjvm::checkException(env);
1750                      
1751 mark.hamzy      1.29             jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1752                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1753 mark.hamzy      1.25 
1754                                  JMPIjvm::checkException(env);
1755                      
1756 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1757                      
1758 mark.hamzy      1.25             jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1759                                                                                         id,
1760 mark.hamzy      1.29                                                                    jcop,
1761                                                                                         jcimClass);
1762 mark.hamzy      1.25 
1763 mark.hamzy      1.23             JMPIjvm::checkException(env);
1764                      
1765                                  handler.processing();
1766 mark.hamzy      1.25             if (jAr) {
1767                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1768 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1769                      
1770 mark.hamzy      1.29                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
1771                      
1772 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1773                      
1774 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1775                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1776 schuur          1.13 
1777 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1778 schuur          1.13 
1779 mark.hamzy      1.29                     handler.deliver(*copRet);
1780 mark.hamzy      1.23                 }
1781                                  }
1782                                  handler.complete();
1783 mark.hamzy      1.25             break;
1784 schuur          1.13         }
1785 mark.hamzy      1.25 
1786 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
1787 mark.hamzy      1.36         {
1788 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1789                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1790                      
1791 mark.hamzy      1.36             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1792                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1793                      
1794                                  JMPIjvm::checkException(env);
1795                      
1796 mark.hamzy      1.40             CIMClass cls;
1797                      
1798                                  try
1799                                  {
1800                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1801                                     AutoMutex lock (pr._cimomMutex);
1802                      
1803                                     cls = pr._cimom_handle->getClass(context,
1804                                                                      request->nameSpace,
1805                                                                      request->className,
1806                                                                      false,
1807                                                                      true,
1808                                                                      true,
1809                                                                      CIMPropertyList());
1810                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1811                                  }
1812                                  catch (CIMException e)
1813                                  {
1814                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1815                                     throw;
1816                                  }
1817 mark.hamzy      1.40 
1818 mark.hamzy      1.36             CIMClass *pcls = new CIMClass (cls);
1819                      
1820                                  JMPIjvm::checkException(env);
1821                      
1822                                  jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1823                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1824                      
1825                                  JMPIjvm::checkException(env);
1826                      
1827 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1828                      
1829 mark.hamzy      1.43             jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1830                                                                                         id,
1831                                                                                         joc,
1832                                                                                         jcop,
1833                                                                                         jcimClass);
1834 mark.hamzy      1.36 
1835                                  JMPIjvm::checkException(env);
1836                      
1837 mark.hamzy      1.43             if (joc)
1838                                  {
1839                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1840                      
1841                                     JMPIjvm::checkException(env);
1842                                  }
1843                      
1844 mark.hamzy      1.36             handler.processing();
1845 mark.hamzy      1.43             if (jAr) {
1846                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1847 mark.hamzy      1.36                     JMPIjvm::checkException(env);
1848                      
1849 mark.hamzy      1.43                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
1850 mark.hamzy      1.36 
1851                                          JMPIjvm::checkException(env);
1852                      
1853                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1854                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1855                      
1856                                          JMPIjvm::checkException(env);
1857                      
1858                                          handler.deliver(*copRet);
1859                                      }
1860                                  }
1861                                  handler.complete();
1862                                  break;
1863                              }
1864                      
1865 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
1866 mark.hamzy      1.25         {
1867 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
1868                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
1869                      
1870 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1871                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1872 mark.hamzy      1.25 
1873                                  JMPIjvm::checkException(env);
1874                      
1875 mark.hamzy      1.40             CIMClass cls;
1876                      
1877                                  try
1878                                  {
1879                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1880                                     AutoMutex lock (pr._cimomMutex);
1881                      
1882                                     cls = pr._cimom_handle->getClass(context,
1883                                                                      request->nameSpace,
1884                                                                      request->className,
1885                                                                      false,
1886                                                                      true,
1887                                                                      true,
1888                                                                      CIMPropertyList());
1889                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1890                                  }
1891                                  catch (CIMException e)
1892                                  {
1893                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1894                                     throw;
1895                                  }
1896 mark.hamzy      1.40 
1897 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1898 mark.hamzy      1.25 
1899                                  JMPIjvm::checkException(env);
1900                      
1901 mark.hamzy      1.29             jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1902                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1903 mark.hamzy      1.25 
1904                                  JMPIjvm::checkException(env);
1905                      
1906 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1907                      
1908 mark.hamzy      1.25             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1909                                                                       id,
1910 mark.hamzy      1.43                                                  joc,
1911 mark.hamzy      1.29                                                  jcop,
1912                                                                       jcimClass);
1913 mark.hamzy      1.25 
1914 mark.hamzy      1.23             JMPIjvm::checkException(env);
1915                      
1916 mark.hamzy      1.43             if (joc)
1917                                  {
1918                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
1919                      
1920                                     JMPIjvm::checkException(env);
1921                                  }
1922                      
1923 mark.hamzy      1.23             handler.processing();
1924 mark.hamzy      1.25             if (jVec) {
1925                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1926 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1927                      
1928 mark.hamzy      1.29                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1929                      
1930 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1931                      
1932 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1933                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1934 schuur          1.13 
1935 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1936 schuur          1.13 
1937 mark.hamzy      1.29                     handler.deliver(*copRet);
1938 mark.hamzy      1.23                 }
1939                                  }
1940                                  handler.complete();
1941 mark.hamzy      1.25             break;
1942                              }
1943                      
1944 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
1945 mark.hamzy      1.25         {
1946 mark.hamzy      1.43             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1947                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1948 mark.hamzy      1.23 
1949 mark.hamzy      1.43             JMPIjvm::checkException(env);
1950 schuur          1.1  
1951 mark.hamzy      1.43             CIMClass cls;
1952 schuur          1.1  
1953 mark.hamzy      1.43             try
1954                                  {
1955                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1956                                     AutoMutex lock (pr._cimomMutex);
1957                      
1958                                     cls = pr._cimom_handle->getClass(context,
1959                                                                      request->nameSpace,
1960                                                                      request->className,
1961                                                                      false,
1962                                                                      true,
1963                                                                      true,
1964                                                                      CIMPropertyList());
1965                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1966                                  }
1967                                  catch (CIMException e)
1968                                  {
1969                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1970                                     throw;
1971                                  }
1972                      
1973                                  CIMClass *pcls = new CIMClass (cls);
1974 mark.hamzy      1.43 
1975                                  JMPIjvm::checkException(env);
1976                      
1977                                  jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1978                                  jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1979                      
1980                                  JMPIjvm::checkException(env);
1981                      
1982 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1983                      
1984 mark.hamzy      1.43             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1985                                                                       id,
1986                                                                       jcop,
1987                                                                       true,
1988                                                                       jcimClass);
1989                      
1990                                  JMPIjvm::checkException(env);
1991                      
1992                                  handler.processing();
1993                                  if (jVec) {
1994                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1995                                          JMPIjvm::checkException(env);
1996                      
1997                                          jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1998                      
1999                                          JMPIjvm::checkException(env);
2000                      
2001                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2002                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
2003                      
2004                                          JMPIjvm::checkException(env);
2005 mark.hamzy      1.43 
2006                                          handler.deliver(*copRet);
2007                                      }
2008                                  }
2009                                  handler.complete();
2010                                  break;
2011                              }
2012                      
2013                              case METHOD_UNKNOWN:
2014                              {
2015                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
2016                                  break;
2017                              }
2018                              }
2019                          }
2020                          HandlerCatch(handler);
2021                      
2022                          if (env) JMPIjvm::detachThread();
2023                      
2024                          PEG_METHOD_EXIT();
2025                      
2026 schuur          1.1      return(response);
2027                      }
2028                      
2029                      Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
2030                      {
2031 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleCreateInstanceRequest");
2032                      
2033 kumpf           1.55     HandlerIntro(CreateInstance,message,request,response,handler);
2034 schuur          1.1  
2035 mark.hamzy      1.25     typedef enum {
2036                             METHOD_UNKNOWN = 0,
2037 mark.hamzy      1.43        METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
2038                             METHOD_INSTANCEPROVIDER2 // same as METHOD_CIMINSTANCEPROVIDER2
2039 mark.hamzy      1.25     } METHOD_VERSION;
2040                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2041                          JNIEnv          *env           = NULL;
2042                      
2043 schuur          1.1      try {
2044                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2045                                  "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
2046                                  System::getHostName(),
2047                                  request->nameSpace.getString(),
2048                                  request->newInstance.getPath().getClassName().getString());
2049                      
2050 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->newInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
2051                      
2052 schuur          1.1          // make target object path
2053 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2054                                                                             request->nameSpace,
2055                                                                             request->newInstance.getPath().getClassName(),
2056                                                                             request->newInstance.getPath().getKeyBindings());
2057 schuur          1.1  
2058                              // resolve provider name
2059 kumpf           1.2          ProviderName name = _resolveProviderName(
2060                                  request->operationContext.get(ProviderIdContainer::NAME));
2061 schuur          1.1  
2062                              // get cached or load new provider module
2063 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2064                                                                                               name.getLogicalName(),
2065                                                                                               String::EMPTY);
2066 schuur          1.1  
2067                              // forward request
2068 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
2069 schuur          1.1  
2070 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createInstance: " + ph.GetProvider().getName());
2071 schuur          1.1  
2072 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: Calling provider createInstance: "<<pr.getName()<<PEGASUS_STD(endl));
2073 schuur          1.12 
2074 mark.hamzy      1.25         JvmVector *jv = 0;
2075                      
2076                              env = JMPIjvm::attachThread(&jv);
2077                      
2078 mark.hamzy      1.37         if (!env)
2079                              {
2080                                  PEG_METHOD_EXIT();
2081                      
2082                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2083                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2084                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2085                              }
2086                      
2087 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
2088                      
2089 mark.hamzy      1.43         jmethodID id               = NULL;
2090                              String    interfaceType;
2091                              String    interfaceVersion;
2092                      
2093                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2094                                                interfaceType,
2095                                                interfaceVersion);
2096                      
2097                              if (interfaceType == "JMPI")
2098                              {
2099                                 // public org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.CIMObjectPath cop,
2100                                 //                                                       org.pegasus.jmpi.CIMInstance   cimInstance)
2101                                 //        throws org.pegasus.jmpi.CIMException
2102                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2103                                                       "createInstance",
2104                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
2105                      
2106                                 if (id != NULL)
2107                                 {
2108                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2109                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2110 mark.hamzy      1.43            }
2111                              }
2112                              else if (interfaceType == "JMPIExperimental")
2113                              {
2114                                 // public org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.OperationContext oc
2115                                 //                                                       org.pegasus.jmpi.CIMObjectPath    cop,
2116                                 //                                                       org.pegasus.jmpi.CIMInstance      cimInstance)
2117                                 //        throws org.pegasus.jmpi.CIMException
2118                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2119                                                       "createInstance",
2120                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
2121 mark.hamzy      1.25 
2122 mark.hamzy      1.43            if (id != NULL)
2123                                 {
2124                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2125                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2126                                 }
2127                              }
2128 schuur          1.1  
2129 mark.hamzy      1.43         if (id == NULL)
2130 mark.hamzy      1.25         {
2131 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: No method found!"<<PEGASUS_STD(endl));
2132                      
2133                                 PEG_METHOD_EXIT();
2134                      
2135                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2136                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2137                                                                                    "Could not find a method for the provider based on InterfaceType."));
2138 mark.hamzy      1.25         }
2139 mark.hamzy      1.23 
2140                              JMPIjvm::checkException(env);
2141                      
2142 mark.hamzy      1.25         switch (eMethodFound)
2143                              {
2144 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
2145                              {
2146                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2147                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2148                      
2149                                  JMPIjvm::checkException(env);
2150                      
2151                                  CIMInstance *ci     = new CIMInstance (request->newInstance);
2152                                  jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2153                                  jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2154                      
2155                                  JMPIjvm::checkException(env);
2156                      
2157                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jcop = "<<jcop<<", jci = "<<jci<<PEGASUS_STD(endl));
2158                      
2159 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2160                      
2161 mark.hamzy      1.43             jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2162                                                                          id,
2163                                                                          jcop,
2164                                                                          jci);
2165                      
2166                                  JMPIjvm::checkException(env);
2167                      
2168                                  handler.processing();
2169                      
2170                                  if (jcopRet) {
2171                                      jint           jCopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2172                                      CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCopRetRef);
2173                      
2174                                      handler.deliver(*copRet);
2175                                  }
2176                                  handler.complete();
2177                                  break;
2178                              }
2179                      
2180                              case METHOD_INSTANCEPROVIDER2:
2181 mark.hamzy      1.25         {
2182 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2183                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2184                      
2185 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2186                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2187 mark.hamzy      1.25 
2188                                  JMPIjvm::checkException(env);
2189                      
2190 mark.hamzy      1.29             CIMInstance *ci     = new CIMInstance (request->newInstance);
2191                                  jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2192                                  jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2193 mark.hamzy      1.25 
2194                                  JMPIjvm::checkException(env);
2195 schuur          1.1  
2196 mark.hamzy      1.29             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jcop = "<<jcop<<", jci = "<<jci<<PEGASUS_STD(endl));
2197 schuur          1.1  
2198 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2199                      
2200 mark.hamzy      1.29             jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2201                                                                          id,
2202 mark.hamzy      1.43                                                     joc,
2203 mark.hamzy      1.29                                                     jcop,
2204                                                                          jci);
2205 schuur          1.1  
2206 mark.hamzy      1.25             JMPIjvm::checkException(env);
2207 schuur          1.1  
2208 mark.hamzy      1.43             if (joc)
2209                                  {
2210                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2211                      
2212                                     JMPIjvm::checkException(env);
2213                                  }
2214                      
2215 mark.hamzy      1.25             handler.processing();
2216 mark.hamzy      1.23 
2217 mark.hamzy      1.29             if (jcopRet) {
2218                                      jint           jCopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2219                                      CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCopRetRef);
2220 mark.hamzy      1.23 
2221 mark.hamzy      1.29                 handler.deliver(*copRet);
2222 mark.hamzy      1.25             }
2223                                  handler.complete();
2224                                  break;
2225                              }
2226 mark.hamzy      1.23 
2227 mark.hamzy      1.25         case METHOD_UNKNOWN:
2228                              {
2229                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2230                                  break;
2231                              }
2232 schuur          1.1          }
2233                          }
2234                          HandlerCatch(handler);
2235 mark.hamzy      1.23 
2236 schuur          1.1      if (env) JMPIjvm::detachThread();
2237 mark.hamzy      1.23 
2238 schuur          1.1      PEG_METHOD_EXIT();
2239                      
2240                          return(response);
2241                      }
2242                      
2243                      Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
2244                      {
2245 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleModifyInstanceRequest");
2246 schuur          1.1  
2247 kumpf           1.55     HandlerIntro(ModifyInstance,message,request,response,handler);
2248 mark.hamzy      1.23 
2249 mark.hamzy      1.25     typedef enum {
2250                             METHOD_UNKNOWN = 0,
2251 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
2252                             METHOD_INSTANCEPROVIDER,
2253                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
2254 mark.hamzy      1.25     } METHOD_VERSION;
2255                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2256                          JNIEnv          *env           = NULL;
2257 schuur          1.13 
2258 schuur          1.1      try {
2259                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2260 konrad.r        1.15             "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
2261 schuur          1.1              System::getHostName(),
2262                                  request->nameSpace.getString(),
2263                                  request->modifiedInstance.getPath().getClassName().getString());
2264                      
2265 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->modifiedInstance.getPath().getClassName().getString()<<PEGASUS_STD(endl));
2266                      
2267 schuur          1.1          // make target object path
2268 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2269                                                                             request->nameSpace,
2270                                                                             request->modifiedInstance.getPath ().getClassName(),
2271                                                                             request->modifiedInstance.getPath ().getKeyBindings());
2272 schuur          1.1  
2273                              // resolve provider name
2274 kumpf           1.2          ProviderName name = _resolveProviderName(
2275                                  request->operationContext.get(ProviderIdContainer::NAME));
2276 schuur          1.1  
2277 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: provider name physical = "<<name.getPhysicalName()<<", logical = "<<name.getLogicalName()<<PEGASUS_STD(endl));
2278                      
2279 schuur          1.1          // get cached or load new provider module
2280 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2281                                                                                               name.getLogicalName(),
2282                                                                                               String::EMPTY);
2283 schuur          1.1  
2284                              // forward request
2285 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
2286 mark.hamzy      1.23 
2287                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.modifyInstance: " + pr.getName());
2288                      
2289 mark.hamzy      1.25         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: Calling provider "<<PEGASUS_STD(hex)<<(int)&pr<<PEGASUS_STD(dec)<<", name = "<<pr.getName ()<<", module = "<<pr.getModule()<<" modifyInstance: "<<pr.getName()<<PEGASUS_STD(endl));
2290                      
2291                              JvmVector *jv = 0;
2292                      
2293                              env = JMPIjvm::attachThread(&jv);
2294                      
2295 mark.hamzy      1.37         if (!env)
2296                              {
2297                                  PEG_METHOD_EXIT();
2298                      
2299                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2300                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2301                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2302                              }
2303                      
2304 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
2305 mark.hamzy      1.23 
2306 mark.hamzy      1.43         jmethodID id               = NULL;
2307                              String    interfaceType;
2308                              String    interfaceVersion;
2309                      
2310                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2311                                                interfaceType,
2312                                                interfaceVersion);
2313                      
2314                              if (interfaceType == "JMPI")
2315                              {
2316                                 // public abstract void setInstance (org.pegasus.jmpi.CIMObjectPath cop,
2317                                 //                                   org.pegasus.jmpi.CIMInstance   cimInstance)
2318                                 //        org.pegasus.jmpi.throws CIMException
2319                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2320                                                       "setInstance",
2321                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
2322                      
2323                                 if (id != NULL)
2324                                 {
2325                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2326                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2327 mark.hamzy      1.43            }
2328 mark.hamzy      1.25 
2329 mark.hamzy      1.43            if (id == NULL)
2330                                 {
2331                                     env->ExceptionClear();
2332 mark.hamzy      1.25 
2333 mark.hamzy      1.43                // public void setInstance (org.pegasus.jmpi.CIMObjectPath op,
2334                                     //                          org.pegasus.jmpi.CIMInstance   ci,
2335                                     //                          boolean                        includeQualifiers,
2336                                     //                          java.lang.String[]             propertyList)
2337                                     //        throws org.pegasus.jmpi.CIMException
2338                                     id = env->GetMethodID((jclass)pr.jProviderClass,
2339                                                           "setInstance",
2340                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
2341                      
2342                                     if (id != NULL)
2343                                     {
2344                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
2345                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
2346                                     }
2347                                 }
2348                              }
2349                              else if (interfaceType == "JMPIExperimental")
2350 mark.hamzy      1.25         {
2351 mark.hamzy      1.43            // public abstract void setInstance (org.pegasus.jmpi.OperationContext oc,
2352                                 //                                   org.pegasus.jmpi.CIMObjectPath    op,
2353                                 //                                   org.pegasus.jmpi.CIMInstance      cimInstance);
2354                                 //        throws org.pegasus.jmpi.CIMException
2355                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2356                                                       "setInstance",
2357                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
2358                      
2359                                 if (id != NULL)
2360                                 {
2361                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2362                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2363                                 }
2364 mark.hamzy      1.25         }
2365                      
2366                              if (id == NULL)
2367                              {
2368 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: No method found!"<<PEGASUS_STD(endl));
2369 mark.hamzy      1.25 
2370 mark.hamzy      1.43            PEG_METHOD_EXIT();
2371 schuur          1.1  
2372 mark.hamzy      1.43            throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2373                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2374                                                                                    "Could not find a method for the provider based on InterfaceType."));
2375 mark.hamzy      1.25         }
2376 schuur          1.1  
2377 mark.hamzy      1.23         JMPIjvm::checkException(env);
2378 schuur          1.1  
2379 mark.hamzy      1.25         switch (eMethodFound)
2380                              {
2381 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
2382                              {
2383                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2384                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2385                      
2386                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2387                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2388                      
2389                                  JMPIjvm::checkException(env);
2390                      
2391                                  CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
2392                                  jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2393                                  jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2394                      
2395                                  JMPIjvm::checkException(env);
2396                      
2397                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2398                      
2399 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2400                      
2401 mark.hamzy      1.43             env->CallVoidMethod((jobject)pr.jProvider,
2402                                                      id,
2403                                                      joc,
2404                                                      jcop,
2405                                                      jci);
2406                      
2407                                  JMPIjvm::checkException(env);
2408                      
2409                                  if (joc)
2410                                  {
2411                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2412                      
2413                                     JMPIjvm::checkException(env);
2414                                  }
2415                                  break;
2416                              }
2417                      
2418                              case METHOD_CIMINSTANCEPROVIDER:
2419 mark.hamzy      1.25         {
2420 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2421                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2422 mark.hamzy      1.25 
2423                                  JMPIjvm::checkException(env);
2424                      
2425 mark.hamzy      1.29             CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
2426                                  jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2427                                  jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2428 mark.hamzy      1.25 
2429                                  JMPIjvm::checkException(env);
2430 schuur          1.1  
2431 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2432 schuur          1.1  
2433 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2434                      
2435 mark.hamzy      1.25             env->CallVoidMethod((jobject)pr.jProvider,
2436                                                      id,
2437 mark.hamzy      1.29                                 jcop,
2438                                                      jci,
2439 mark.hamzy      1.36                                 JMPI_INCLUDE_QUALIFIERS,
2440 mark.hamzy      1.25                                 jPropertyList);
2441 schuur          1.1  
2442 mark.hamzy      1.25             JMPIjvm::checkException(env);
2443                                  break;
2444 schuur          1.13         }
2445 schuur          1.1  
2446 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
2447 mark.hamzy      1.25         {
2448 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2449                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2450 mark.hamzy      1.25 
2451                                  JMPIjvm::checkException(env);
2452                      
2453 mark.hamzy      1.29             CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
2454                                  jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
2455                                  jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
2456 mark.hamzy      1.25 
2457                                  JMPIjvm::checkException(env);
2458                      
2459 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2460                      
2461 mark.hamzy      1.25             env->CallVoidMethod((jobject)pr.jProvider,
2462                                                      id,
2463 mark.hamzy      1.29                                 jcop,
2464                                                      jci);
2465 mark.hamzy      1.25 
2466                                  JMPIjvm::checkException(env);
2467                                  break;
2468                              }
2469 mark.hamzy      1.23 
2470 mark.hamzy      1.25         case METHOD_UNKNOWN:
2471                              {
2472                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2473                                  break;
2474                              }
2475                              }
2476 schuur          1.1      }
2477                          HandlerCatch(handler);
2478 mark.hamzy      1.23 
2479 schuur          1.1      if (env) JMPIjvm::detachThread();
2480 mark.hamzy      1.23 
2481 schuur          1.1      PEG_METHOD_EXIT();
2482                      
2483                          return(response);
2484                      }
2485                      
2486                      Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
2487                      {
2488 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleDeleteInstanceRequest");
2489                      
2490 kumpf           1.55     HandlerIntro(DeleteInstance,message,request,response,handler);
2491 schuur          1.1  
2492 mark.hamzy      1.25     typedef enum {
2493                             METHOD_UNKNOWN = 0,
2494 mark.hamzy      1.43        METHOD_INSTANCEPROVIDER,  // same as METHOD_CIMINSTANCEPROVIDER
2495                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
2496 mark.hamzy      1.25     } METHOD_VERSION;
2497                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2498                          JNIEnv          *env           = NULL;
2499                      
2500 schuur          1.1      try {
2501                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2502 konrad.r        1.15             "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
2503 schuur          1.1              System::getHostName(),
2504                                  request->nameSpace.getString(),
2505                                  request->instanceName.getClassName().getString());
2506                      
2507 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
2508                      
2509 schuur          1.1          // make target object path
2510 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2511                                                                             request->nameSpace,
2512                                                                             request->instanceName.getClassName(),
2513                                                                             request->instanceName.getKeyBindings());
2514 schuur          1.1  
2515                              // resolve provider name
2516 kumpf           1.2          ProviderName name = _resolveProviderName(
2517                                  request->operationContext.get(ProviderIdContainer::NAME));
2518 schuur          1.1  
2519                              // get cached or load new provider module
2520 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2521                                                                                               name.getLogicalName(),
2522                                                                                               String::EMPTY);
2523 schuur          1.1  
2524                              // forward request
2525 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
2526 schuur          1.1  
2527 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteInstance: " + pr.getName());
2528 schuur          1.1  
2529 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: Calling provider deleteInstance: "<<pr.getName()<<PEGASUS_STD(endl));
2530 schuur          1.1  
2531 mark.hamzy      1.25         JvmVector *jv = 0;
2532                      
2533                              env = JMPIjvm::attachThread(&jv);
2534                      
2535 mark.hamzy      1.37         if (!env)
2536                              {
2537                                  PEG_METHOD_EXIT();
2538                      
2539                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2540                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2541                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2542                              }
2543                      
2544 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
2545                      
2546 mark.hamzy      1.43         jmethodID id               = NULL;
2547                              String    interfaceType;
2548                              String    interfaceVersion;
2549                      
2550                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2551                                                interfaceType,
2552                                                interfaceVersion);
2553                      
2554                              if (interfaceType == "JMPI")
2555                              {
2556                                 // public abstract void deleteInstance (org.pegasus.jmpi.CIMObjectPath cop)
2557                                 //        throws org.pegasus.jmpi.CIMException
2558                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2559                                                       "deleteInstance",
2560                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
2561                      
2562                                 if (id != NULL)
2563                                 {
2564                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2565                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2566                                 }
2567 mark.hamzy      1.43         }
2568                              else if (interfaceType == "JMPIExperimental")
2569                              {
2570                                 // public abstract void deleteInstance (org.pegasus.jmpi.OperationContext oc,
2571                                 //                                      org.pegasus.jmpi.CIMObjectPath    cop)
2572                                 //        throws org.pegasus.jmpi.CIMException
2573                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2574                                                       "deleteInstance",
2575                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;)V");
2576 mark.hamzy      1.25 
2577 mark.hamzy      1.43            if (id != NULL)
2578                                 {
2579                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2580                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2581                                 }
2582                              }
2583 schuur          1.1  
2584 mark.hamzy      1.43         if (id == NULL)
2585 mark.hamzy      1.25         {
2586 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: No method found!"<<PEGASUS_STD(endl));
2587                      
2588                                 PEG_METHOD_EXIT();
2589                      
2590                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2591                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2592                                                                                    "Could not find a method for the provider based on InterfaceType."));
2593 mark.hamzy      1.25         }
2594 mark.hamzy      1.23 
2595                              JMPIjvm::checkException(env);
2596 schuur          1.1  
2597 mark.hamzy      1.25         switch (eMethodFound)
2598                              {
2599 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
2600                              {
2601                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2602                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2603                      
2604                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2605                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2606                      
2607                                  JMPIjvm::checkException(env);
2608                      
2609 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2610                      
2611 mark.hamzy      1.43             env->CallVoidMethod((jobject)pr.jProvider,
2612                                                      id,
2613                                                      joc,
2614                                                      jcop);
2615                      
2616                                  JMPIjvm::checkException(env);
2617                      
2618                                  if (joc)
2619                                  {
2620                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2621                      
2622                                     JMPIjvm::checkException(env);
2623                                  }
2624                                  break;
2625                              }
2626                      
2627                              case METHOD_INSTANCEPROVIDER:
2628 mark.hamzy      1.25         {
2629 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2630                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2631 mark.hamzy      1.25 
2632                                  JMPIjvm::checkException(env);
2633                      
2634 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2635                      
2636 mark.hamzy      1.36             env->CallVoidMethod((jobject)pr.jProvider,
2637                                                      id,
2638                                                      jcop);
2639 mark.hamzy      1.25 
2640                                  JMPIjvm::checkException(env);
2641                                  break;
2642                              }
2643                      
2644                              case METHOD_UNKNOWN:
2645                              {
2646                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2647                                  break;
2648                              }
2649                              }
2650                          }
2651                          HandlerCatch(handler);
2652                      
2653                          if (env) JMPIjvm::detachThread();
2654                      
2655                          PEG_METHOD_EXIT();
2656                      
2657                          return(response);
2658                      }
2659                      
2660 mark.hamzy      1.25 Message * JMPIProviderManager::handleExecQueryRequest(const Message * message) throw()
2661                      {
2662                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleExecQueryRequest");
2663                      
2664 kumpf           1.55     HandlerIntro(ExecQuery,message,request,response,handler);
2665 mark.hamzy      1.25 
2666                          typedef enum {
2667                             METHOD_UNKNOWN = 0,
2668 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
2669                             METHOD_CIMINSTANCEPROVIDER2,
2670                             METHOD_INSTANCEPROVIDER,
2671                             METHOD_INSTANCEPROVIDER2,
2672 mark.hamzy      1.25     } METHOD_VERSION;
2673                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2674                          JNIEnv          *env           = NULL;
2675                      
2676                          try {
2677                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2678                                  "JMPIProviderManager::handleExecQueryRequest - Host name: $0  Name space: $1  Class name: $2",
2679                                  System::getHostName(),
2680                                  request->nameSpace.getString(),
2681                                  request->className.getString());
2682                      
2683                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
2684                      
2685                              // make target object path
2686 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2687                                                                             request->nameSpace,
2688                                                                             request->className);
2689 mark.hamzy      1.25 
2690                              // resolve provider name
2691                              ProviderName name = _resolveProviderName(
2692                                  request->operationContext.get(ProviderIdContainer::NAME));
2693                      
2694                              // get cached or load new provider module
2695 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
2696                                                                                               name.getLogicalName(),
2697                                                                                               String::EMPTY);
2698 mark.hamzy      1.25 
2699                              // convert arguments
2700                              OperationContext context;
2701                      
2702                              context.insert(request->operationContext.get(IdentityContainer::NAME));
2703                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2704                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2705                      
2706                              // forward request
2707                              JMPIProvider &pr = ph.GetProvider();
2708                      
2709                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.execQuery: " + pr.getName());
2710                      
2711                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Calling provider execQuery: "<<pr.getName()<<", queryLanguage: "<<request->queryLanguage<<", query: "<<request->query<<PEGASUS_STD(endl));
2712                      
2713                              JvmVector *jv = 0;
2714                      
2715                              env = JMPIjvm::attachThread(&jv);
2716                      
2717 mark.hamzy      1.37         if (!env)
2718                              {
2719                                  PEG_METHOD_EXIT();
2720                      
2721                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2722                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2723                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2724                              }
2725                      
2726 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
2727 schuur          1.1  
2728 mark.hamzy      1.43         jmethodID id               = NULL;
2729                              String    interfaceType;
2730                              String    interfaceVersion;
2731                      
2732                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
2733                                                interfaceType,
2734                                                interfaceVersion);
2735                      
2736                              if (interfaceType == "JMPI")
2737                              {
2738                                 // public abstract java.util.Vector execQuery (org.pegasus.jmpi.CIMObjectPath cop,
2739                                 //                                             java.lang.String               queryStatement,
2740                                 //                                             int                            ql,
2741                                 //                                             org.pegasus.jmpi.CIMClass      cimClass)
2742                                 //        throws org.pegasus.jmpi.CIMException
2743                                 //
2744                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2745                                                       "execQuery",
2746                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
2747                      
2748                                 if (id != NULL)
2749 mark.hamzy      1.43            {
2750                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2751                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_INSTANCEPROVIDER."<<PEGASUS_STD(endl));
2752                                 }
2753 mark.hamzy      1.25 
2754 mark.hamzy      1.43            if (id == NULL)
2755                                 {
2756                                     env->ExceptionClear();
2757 mark.hamzy      1.25 
2758 mark.hamzy      1.43                // public abstract org.pegasus.jmpi.CIMInstance[] execQuery(org.pegasus.jmpi.CIMObjectPath cop,
2759                                     //                                                          java.lang.String               query,
2760                                     //                                                          java.lang.String               ql,
2761                                     //                                                          org.pegasus.jmpi.CIMClass      cimClass)
2762                                     //        throws org.pegasus.jmpi.CIMException
2763                                     id = env->GetMethodID((jclass)pr.jProviderClass,
2764                                                           "execQuery",
2765                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
2766                      
2767                                     if (id != NULL)
2768                                     {
2769                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
2770                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_CIMINSTANCEPROVIDER."<<PEGASUS_STD(endl));
2771                                     }
2772                                 }
2773                              }
2774                              else if (interfaceType == "JMPIExperimental")
2775 mark.hamzy      1.25         {
2776 mark.hamzy      1.43            // public abstract java.util.Vector execQuery (org.pegasus.jmpi.OperationContext oc,
2777                                 //                                             org.pegasus.jmpi.CIMObjectPath    cop,
2778                                 //                                             org.pegasus.jmpi.CIMClass         cimClass,
2779                                 //                                             java.lang.String                  queryStatement,
2780                                 //                                             java.lang.String                  queryLanguage)
2781                                 //        throws org.pegasus.jmpi.CIMException
2782                                 id = env->GetMethodID((jclass)pr.jProviderClass,
2783                                                       "execQuery",
2784                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
2785 mark.hamzy      1.25 
2786 mark.hamzy      1.43            if (id != NULL)
2787                                 {
2788                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2789                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_INSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2790                                 }
2791 mark.hamzy      1.25 
2792 mark.hamzy      1.43            if (id == NULL)
2793                                 {
2794                                     env->ExceptionClear();
2795 mark.hamzy      1.25 
2796 mark.hamzy      1.43                // public abstract org.pegasus.jmpi.CIMInstance[] execQuery (org.pegasus.jmpi.OperationContext oc,
2797                                     //                                                           org.pegasus.jmpi.CIMObjectPath    cop,
2798                                     //                                                           org.pegasus.jmpi.CIMClass         cimClass,
2799                                     //                                                           java.lang.String                  queryStatement,
2800                                     //                                                           java.lang.String                  queryLanguage)
2801                                     //        throws org.pegasus.jmpi.CIMException
2802                                     id = env->GetMethodID((jclass)pr.jProviderClass,
2803                                                           "execQuery",
2804                                                           "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
2805                      
2806                                     if (id != NULL)
2807                                     {
2808                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
2809                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_CIMINSTANCEPROVIDER2."<<PEGASUS_STD(endl));
2810                                     }
2811                                 }
2812 mark.hamzy      1.25         }
2813                      
2814                              if (id == NULL)
2815                              {
2816 mark.hamzy      1.43             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found no method!"<<PEGASUS_STD(endl));
2817 mark.hamzy      1.36 
2818 mark.hamzy      1.43             PEG_METHOD_EXIT();
2819 mark.hamzy      1.36 
2820 mark.hamzy      1.43             throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2821                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
2822                                                                                     "Could not find a method for the provider based on InterfaceType."));
2823 mark.hamzy      1.25         }
2824                      
2825 schuur          1.1          JMPIjvm::checkException(env);
2826                      
2827 mark.hamzy      1.25         switch (eMethodFound)
2828                              {
2829 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
2830 mark.hamzy      1.25         {
2831 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2832 mark.hamzy      1.25             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2833                      
2834                                  JMPIjvm::checkException(env);
2835                      
2836                                  jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2837                                  jstring jquery         = env->NewStringUTF(request->query.getCString());
2838                      
2839 mark.hamzy      1.40             CIMClass cls;
2840                      
2841                                  try
2842                                  {
2843                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2844                                     AutoMutex lock (pr._cimomMutex);
2845                      
2846                                     cls = pr._cimom_handle->getClass(context,
2847                                                                      request->nameSpace,
2848                                                                      request->className,
2849                                                                      false,
2850                                                                      true,
2851                                                                      true,
2852                                                                      CIMPropertyList());
2853                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2854                                  }
2855                                  catch (CIMException e)
2856                                  {
2857                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2858                                     throw;
2859                                  }
2860 mark.hamzy      1.40 
2861 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
2862                      
2863 mark.hamzy      1.25             JMPIjvm::checkException(env);
2864                      
2865 mark.hamzy      1.27             jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2866 mark.hamzy      1.25 
2867                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2868                      
2869                                  JMPIjvm::checkException(env);
2870                      
2871 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2872                      
2873 mark.hamzy      1.25             jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2874                                                                                         id,
2875                                                                                         jcop,
2876                                                                                         jquery,
2877                                                                                         jqueryLanguage,
2878                                                                                         jCc);
2879 mark.hamzy      1.23 
2880 mark.hamzy      1.25             JMPIjvm::checkException(env);
2881                      
2882                                  handler.processing();
2883                                  if (jAr) {
2884                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2885                                          JMPIjvm::checkException(env);
2886                      
2887 mark.hamzy      1.29                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
2888                      
2889 mark.hamzy      1.25                     JMPIjvm::checkException(env);
2890 mark.hamzy      1.23 
2891 mark.hamzy      1.29                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2892                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2893 mark.hamzy      1.25 
2894                                          JMPIjvm::checkException(env);
2895                      
2896 mark.hamzy      1.29                     handler.deliver(*ciRet);
2897 mark.hamzy      1.25                 }
2898                                  }
2899                                  handler.complete();
2900                                  break;
2901                              }
2902                      
2903 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
2904 mark.hamzy      1.36         {
2905 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2906                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2907                      
2908 mark.hamzy      1.36             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2909                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2910                      
2911                                  JMPIjvm::checkException(env);
2912                      
2913                                  jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2914                                  jstring jquery         = env->NewStringUTF(request->query.getCString());
2915                      
2916 mark.hamzy      1.40             CIMClass cls;
2917                      
2918                                  try
2919                                  {
2920                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2921                                     AutoMutex lock (pr._cimomMutex);
2922                      
2923                                     cls = pr._cimom_handle->getClass(context,
2924                                                                      request->nameSpace,
2925                                                                      request->className,
2926                                                                      false,
2927                                                                      true,
2928                                                                      true,
2929                                                                      CIMPropertyList());
2930                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2931                                  }
2932                                  catch (CIMException e)
2933                                  {
2934                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2935                                     throw;
2936                                  }
2937 mark.hamzy      1.40 
2938 mark.hamzy      1.36             CIMClass *pcls = new CIMClass (cls);
2939                      
2940                                  JMPIjvm::checkException(env);
2941                      
2942                                  jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2943                      
2944                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2945                      
2946                                  JMPIjvm::checkException(env);
2947                      
2948 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2949                      
2950 mark.hamzy      1.43             jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2951 mark.hamzy      1.36                                                                    id,
2952 mark.hamzy      1.43                                                                    joc,
2953 mark.hamzy      1.36                                                                    jcop,
2954                                                                                         jquery,
2955 mark.hamzy      1.43                                                                    jqueryLanguage,
2956                                                                                         jCc);
2957 mark.hamzy      1.36 
2958                                  JMPIjvm::checkException(env);
2959                      
2960 mark.hamzy      1.43             if (joc)
2961                                  {
2962                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
2963                      
2964                                     JMPIjvm::checkException(env);
2965                                  }
2966                      
2967                                  handler.processing();
2968                                  if (jAr) {
2969                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2970                                          JMPIjvm::checkException(env);
2971                      
2972                                          jobject jciRet = env->GetObjectArrayElement(jAr,i);
2973                      
2974                                          JMPIjvm::checkException(env);
2975                      
2976                                          jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2977                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2978                      
2979                                          JMPIjvm::checkException(env);
2980                      
2981 mark.hamzy      1.43                     handler.deliver(*ciRet);
2982                                      }
2983                                  }
2984                                  handler.complete();
2985                                  break;
2986                              }
2987                      
2988                              case METHOD_INSTANCEPROVIDER2:
2989                              {
2990                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
2991                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
2992                      
2993                                  jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2994                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2995                      
2996                                  JMPIjvm::checkException(env);
2997                      
2998                                  jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2999                                  jstring jquery         = env->NewStringUTF(request->query.getCString());
3000                      
3001                                  CIMClass cls;
3002 mark.hamzy      1.43 
3003                                  try
3004                                  {
3005                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3006                                     AutoMutex lock (pr._cimomMutex);
3007                      
3008                                     cls = pr._cimom_handle->getClass(context,
3009                                                                      request->nameSpace,
3010                                                                      request->className,
3011                                                                      false,
3012                                                                      true,
3013                                                                      true,
3014                                                                      CIMPropertyList());
3015                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3016                                  }
3017                                  catch (CIMException e)
3018                                  {
3019                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3020                                     throw;
3021                                  }
3022                      
3023 mark.hamzy      1.43             CIMClass *pcls = new CIMClass (cls);
3024                      
3025                                  jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3026                      
3027                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3028                      
3029                                  JMPIjvm::checkException(env);
3030                      
3031 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3032                      
3033 mark.hamzy      1.51             jobject jVec = env->CallObjectMethod ((jobject)pr.jProvider,
3034                                                                        id,
3035                                                                        joc,
3036                                                                        jcop,
3037                                                                        jCc,
3038                                                                        jquery,
3039                                                                        jqueryLanguage);
3040 mark.hamzy      1.43 
3041                                  JMPIjvm::checkException(env);
3042                      
3043                                  if (joc)
3044                                  {
3045                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3046                      
3047                                     JMPIjvm::checkException(env);
3048                                  }
3049                      
3050 mark.hamzy      1.36             handler.processing();
3051 mark.hamzy      1.51             if (jVec)
3052                                  {
3053                                      for (int i = 0, m = env->CallIntMethod (jVec, JMPIjvm::jv.VectorSize); i < m; i++)
3054                                      {
3055 mark.hamzy      1.36                     JMPIjvm::checkException(env);
3056                      
3057 mark.hamzy      1.51                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3058                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: jciRet = "<<jciRet<<PEGASUS_STD(endl));
3059 mark.hamzy      1.36 
3060                                          JMPIjvm::checkException(env);
3061                      
3062                                          jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3063                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3064                      
3065                                          JMPIjvm::checkException(env);
3066                      
3067                                          handler.deliver(*ciRet);
3068                                      }
3069                                  }
3070 mark.hamzy      1.51             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: done!"<<PEGASUS_STD(endl));
3071 mark.hamzy      1.36             handler.complete();
3072                                  break;
3073                              }
3074                      
3075 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
3076 mark.hamzy      1.25         {
3077 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3078 mark.hamzy      1.25             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3079                      
3080                                  JMPIjvm::checkException(env);
3081                      
3082                                  jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
3083                                  jstring jquery         = env->NewStringUTF(request->query.getCString());
3084                      
3085 mark.hamzy      1.40             CIMClass cls;
3086                      
3087                                  try
3088                                  {
3089                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3090                                     AutoMutex lock (pr._cimomMutex);
3091                      
3092                                     cls = pr._cimom_handle->getClass(context,
3093                                                                      request->nameSpace,
3094                                                                      request->className,
3095                                                                      false,
3096                                                                      true,
3097                                                                      true,
3098                                                                      CIMPropertyList());
3099                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3100                                  }
3101                                  catch (CIMException e)
3102                                  {
3103                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3104                                     throw;
3105                                  }
3106 mark.hamzy      1.40 
3107 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
3108                      
3109 mark.hamzy      1.25             JMPIjvm::checkException(env);
3110                      
3111 mark.hamzy      1.27             jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3112 mark.hamzy      1.25 
3113                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3114                      
3115                                  JMPIjvm::checkException(env);
3116                      
3117                                  jint jql = 0; // @BUG - how to convert?
3118                      
3119 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3120                      
3121 mark.hamzy      1.51             jobject jVec = env->CallObjectMethod ((jobject)pr.jProvider,
3122                                                                        id,
3123                                                                        jcop,
3124                                                                        jquery,
3125                                                                        jql,
3126                                                                        jCc);
3127 mark.hamzy      1.25 
3128                                  JMPIjvm::checkException(env);
3129                      
3130                                  handler.processing();
3131                                  if (jVec) {
3132 mark.hamzy      1.51                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3133 mark.hamzy      1.25                     JMPIjvm::checkException(env);
3134                      
3135 mark.hamzy      1.51                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3136 mark.hamzy      1.29 
3137 mark.hamzy      1.25                     JMPIjvm::checkException(env);
3138                      
3139 mark.hamzy      1.29                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3140                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3141 mark.hamzy      1.25 
3142                                          JMPIjvm::checkException(env);
3143                      
3144 mark.hamzy      1.29                     handler.deliver(*ciRet);
3145 mark.hamzy      1.25                 }
3146                                  }
3147                                  handler.complete();
3148                                  break;
3149                              }
3150                      
3151                              case METHOD_UNKNOWN:
3152                              {
3153                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: should not be here!"<<PEGASUS_STD(endl));
3154                                  break;
3155                              }
3156                              }
3157 schuur          1.1      }
3158                          HandlerCatch(handler);
3159 mark.hamzy      1.23 
3160 schuur          1.1      if (env) JMPIjvm::detachThread();
3161 mark.hamzy      1.23 
3162 schuur          1.1      PEG_METHOD_EXIT();
3163                      
3164                          return(response);
3165                      }
3166                      
3167                      Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
3168                      {
3169 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
3170                      
3171 kumpf           1.55     HandlerIntro(Associators,message,request,response,handler);
3172 schuur          1.1  
3173 mark.hamzy      1.24     typedef enum {
3174                             METHOD_UNKNOWN = 0,
3175 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
3176                             METHOD_CIMASSOCIATORPROVIDER2,
3177                             METHOD_ASSOCIATORPROVIDER,
3178                             METHOD_ASSOCIATORPROVIDER2,
3179 mark.hamzy      1.24     } METHOD_VERSION;
3180                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3181                          JNIEnv          *env           = NULL;
3182 schuur          1.13 
3183 schuur          1.1      try {
3184                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3185                                  "JMPIProviderManager::handleAssociatorsRequest - Host name: $0  Name space: $1  Class name: $2",
3186                                  System::getHostName(),
3187                                  request->nameSpace.getString(),
3188                                  request->objectName.getClassName().getString());
3189                      
3190 mark.hamzy      1.25         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
3191 mark.hamzy      1.23 
3192 schuur          1.1          // make target object path
3193 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3194                                                                             request->nameSpace,
3195                                                                             request->objectName.getClassName(),
3196                                                                             request->objectName.getKeyBindings());
3197                              CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
3198                                                                             request->nameSpace,
3199                                                                             request->assocClass.getString());
3200 schuur          1.1  
3201                              // resolve provider name
3202 kumpf           1.2          ProviderName name = _resolveProviderName(
3203                                  request->operationContext.get(ProviderIdContainer::NAME));
3204 schuur          1.1  
3205                              // get cached or load new provider module
3206 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3207                                                                                               name.getLogicalName(),
3208                                                                                               String::EMPTY);
3209 schuur          1.1  
3210 mark.hamzy      1.24         // convert arguments
3211 schuur          1.1          OperationContext context;
3212                      
3213 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
3214                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3215                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3216 schuur          1.1  
3217                              // forward request
3218 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
3219                      
3220                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
3221 schuur          1.1  
3222 mark.hamzy      1.24         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
3223 schuur          1.1  
3224 mark.hamzy      1.24         JvmVector *jv = 0;
3225 schuur          1.1  
3226 mark.hamzy      1.24         env = JMPIjvm::attachThread(&jv);
3227 schuur          1.1  
3228 mark.hamzy      1.37         if (!env)
3229                              {
3230                                  PEG_METHOD_EXIT();
3231                      
3232                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3233                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3234                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3235                              }
3236                      
3237 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
3238                      
3239 mark.hamzy      1.43         jmethodID id               = NULL;
3240                              String    interfaceType;
3241                              String    interfaceVersion;
3242                      
3243                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3244                                                interfaceType,
3245                                                interfaceVersion);
3246                      
3247                              if (interfaceType == "JMPI")
3248                              {
3249                                 // public java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
3250                                 //                                      org.pegasus.jmpi.CIMObjectPath pathName,
3251                                 //                                      java.lang.String               resultClass,
3252                                 //                                      java.lang.String               role,
3253                                 //                                      java.lang.String               resultRole,
3254                                 //                                      boolean                        includeQualifiers,
3255                                 //                                      boolean                        includeClassOrigin,
3256                                 //                                      java.lang.String[]             propertyList)
3257                                 //        throws org.pegasus.jmpi.CIMException
3258                                 //
3259                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3260 mark.hamzy      1.43                                  "associators",
3261                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
3262 mark.hamzy      1.24 
3263 mark.hamzy      1.43            if (id != NULL)
3264                                 {
3265                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
3266                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3267                                 }
3268                      
3269                                 if (id == NULL)
3270                                 {
3271                                     env->ExceptionClear();
3272 mark.hamzy      1.24 
3273 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.CIMObjectPath assocName,
3274                                     //                                                    org.pegasus.jmpi.CIMObjectPath pathName,
3275                                     //                                                    java.lang.String               resultClass,
3276                                     //                                                    java.lang.String               role,
3277                                     //                                                    java.lang.String               resultRole,
3278                                     //                                                    boolean                        includeQualifiers,
3279                                     //                                                    boolean                        includeClassOrigin,
3280                                     //                                                    java.lang.String[]             propertyList)
3281                                     //        throws org.pegasus.jmpi.CIMException
3282                                     //
3283                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3284                                                           "associators",
3285                                                           "(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;");
3286                      
3287                                     if (id != NULL)
3288                                     {
3289                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3290                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3291                                     }
3292                                 }
3293                              }
3294 mark.hamzy      1.43         else if (interfaceType == "JMPIExperimental")
3295 mark.hamzy      1.24         {
3296 mark.hamzy      1.43            // public java.util.Vector associators (org.pegasus.jmpi.OperationContext oc,
3297                                 //                                      org.pegasus.jmpi.CIMObjectPath    assocName,
3298                                 //                                      org.pegasus.jmpi.CIMObjectPath    pathName,
3299                                 //                                      java.lang.String                  resultClass,
3300                                 //                                      java.lang.String                  role,
3301                                 //                                      java.lang.String                  resultRole,
3302                                 //                                      boolean                           includeQualifiers,
3303                                 //                                      boolean                           includeClassOrigin,
3304                                 //                                      java.lang.String[]                propertyList)
3305                                 //        throws org.pegasus.jmpi.CIMException
3306                                 //
3307                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3308                                                       "associators",
3309                                                       "(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;");
3310 schuur          1.12 
3311 mark.hamzy      1.43            if (id != NULL)
3312                                 {
3313                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3314                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3315                                 }
3316 mark.hamzy      1.24 
3317 mark.hamzy      1.43            if (id == NULL)
3318                                 {
3319                                     env->ExceptionClear();
3320 mark.hamzy      1.24 
3321 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.OperationContext oc,
3322                                     //                                                    org.pegasus.jmpi.CIMObjectPath assocName,
3323                                     //                                                    org.pegasus.jmpi.CIMObjectPath pathName,
3324                                     //                                                    java.lang.String               resultClass,
3325                                     //                                                    java.lang.String               role,
3326                                     //                                                    java.lang.String               resultRole,
3327                                     //                                                    boolean                        includeQualifiers,
3328                                     //                                                    boolean                        includeClassOrigin,
3329                                     //                                                    java.lang.String[]             propertyList)
3330                                     //        throws org.pegasus.jmpi.CIMException
3331                                     //
3332                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3333                                                           "associators",
3334                                                           "(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;");
3335                      
3336                                     if (id != NULL)
3337                                     {
3338                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
3339                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3340                                     }
3341                                 }
3342 mark.hamzy      1.24         }
3343                      
3344                              if (id == NULL)
3345                              {
3346                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
3347 mark.hamzy      1.43 
3348                                  PEG_METHOD_EXIT();
3349                      
3350                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3351                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
3352                                                                                     "Could not find a method for the provider based on InterfaceType."));
3353 mark.hamzy      1.23         }
3354 mark.hamzy      1.24 
3355 schuur          1.1          JMPIjvm::checkException(env);
3356                      
3357 mark.hamzy      1.24         switch (eMethodFound)
3358                              {
3359 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
3360 mark.hamzy      1.24         {
3361 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3362 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3363                      
3364                                  JMPIjvm::checkException(env);
3365                      
3366 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3367                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3368                      
3369                                  JMPIjvm::checkException(env);
3370                      
3371 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3372                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3373                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3374                      
3375                                  JMPIjvm::checkException(env);
3376                      
3377                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3378                      
3379 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
3380                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3381 mark.hamzy      1.49             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3382 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3383                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3384                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3385                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3386                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3387                      #endif
3388                      
3389 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3390                      
3391 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3392 mark.hamzy      1.24                                                                   id,
3393                                                                                        jAssociationName,
3394 mark.hamzy      1.43                                                                   jPathName,
3395 mark.hamzy      1.24                                                                   jResultClass,
3396                                                                                        jRole,
3397                                                                                        jResultRole,
3398 mark.hamzy      1.36                                                                   JMPI_INCLUDE_QUALIFIERS,
3399                                                                                        request->includeClassOrigin,
3400 mark.hamzy      1.24                                                                   jPropertyList);
3401 mark.hamzy      1.25 
3402 mark.hamzy      1.23             JMPIjvm::checkException(env);
3403 schuur          1.13 
3404 mark.hamzy      1.23             handler.processing();
3405 mark.hamzy      1.45             if (jAr) {
3406                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3407 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3408 schuur          1.1  
3409 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3410 mark.hamzy      1.24 
3411 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3412 schuur          1.13 
3413 mark.hamzy      1.29                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3414 schuur          1.13 
3415 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3416 schuur          1.13 
3417 mark.hamzy      1.29                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3418 mark.hamzy      1.40                     CIMClass             cls;
3419                      
3420                                          try
3421                                          {
3422                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3423                                             AutoMutex lock (pr._cimomMutex);
3424                      
3425                                             cls = pr._cimom_handle->getClass(context,
3426                                                                              request->nameSpace,
3427                                                                              ciRet->getClassName(),
3428                                                                              false,
3429                                                                              true,
3430                                                                              true,
3431                                                                              CIMPropertyList());
3432                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3433                                          }
3434                                          catch (CIMException e)
3435                                          {
3436                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3437                                             throw;
3438                                          }
3439 mark.hamzy      1.40 
3440 mark.hamzy      1.29                     const CIMObjectPath& op    = ciRet->getPath();
3441                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
3442 mark.hamzy      1.24 
3443 mark.hamzy      1.27                     JMPIjvm::checkException(env);
3444                      
3445 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
3446 mark.hamzy      1.29                     ciRet->setPath(iop);
3447 schuur          1.13 
3448 mark.hamzy      1.29                     handler.deliver(*ciRet);
3449 mark.hamzy      1.23                 }
3450                                  }
3451 mark.hamzy      1.24             handler.complete();
3452                                  break;
3453 mark.hamzy      1.23         }
3454 mark.hamzy      1.24 
3455 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER2:
3456 mark.hamzy      1.24         {
3457 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3458                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3459                      
3460 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3461 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3462                      
3463                                  JMPIjvm::checkException(env);
3464                      
3465 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3466 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3467                      
3468                                  JMPIjvm::checkException(env);
3469                      
3470 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3471                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3472                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3473                      
3474                                  JMPIjvm::checkException(env);
3475                      
3476                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3477                      
3478 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
3479                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3480 mark.hamzy      1.47             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3481 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3482                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3483                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3484                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3485                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3486                      #endif
3487                      
3488 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3489                      
3490 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3491 mark.hamzy      1.43                                                                   id,
3492                                                                                        joc,
3493                                                                                        jAssociationName,
3494                                                                                        jPathName,
3495                                                                                        jResultClass,
3496                                                                                        jRole,
3497                                                                                        jResultRole,
3498                                                                                        JMPI_INCLUDE_QUALIFIERS,
3499                                                                                        request->includeClassOrigin,
3500                                                                                        jPropertyList);
3501 mark.hamzy      1.25 
3502 mark.hamzy      1.23             JMPIjvm::checkException(env);
3503                      
3504 mark.hamzy      1.43             if (joc)
3505                                  {
3506                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3507                      
3508                                     JMPIjvm::checkException(env);
3509                                  }
3510                      
3511 mark.hamzy      1.23             handler.processing();
3512 mark.hamzy      1.45             if (jAr) {
3513                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3514 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3515                      
3516 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3517 mark.hamzy      1.43 
3518 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3519                      
3520 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3521 mark.hamzy      1.24 
3522 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3523                      
3524 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3525 mark.hamzy      1.40                     CIMClass             cls;
3526                      
3527                                          try
3528                                          {
3529                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3530                                             AutoMutex lock (pr._cimomMutex);
3531                      
3532                                             cls = pr._cimom_handle->getClass(context,
3533                                                                              request->nameSpace,
3534                                                                              ciRet->getClassName(),
3535                                                                              false,
3536                                                                              true,
3537                                                                              true,
3538                                                                              CIMPropertyList());
3539                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3540                                          }
3541                                          catch (CIMException e)
3542                                          {
3543                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3544                                             throw;
3545                                          }
3546 mark.hamzy      1.40 
3547 mark.hamzy      1.43                     const CIMObjectPath& op    = ciRet->getPath();
3548                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
3549 mark.hamzy      1.24 
3550 mark.hamzy      1.27                     JMPIjvm::checkException(env);
3551                      
3552 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
3553 mark.hamzy      1.29                     ciRet->setPath(iop);
3554 schuur          1.13 
3555 mark.hamzy      1.29                     handler.deliver(*ciRet);
3556 mark.hamzy      1.23                 }
3557                                  }
3558 mark.hamzy      1.24             handler.complete();
3559                                  break;
3560                              }
3561                      
3562 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
3563 mark.hamzy      1.24         {
3564 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3565                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3566 schuur          1.13 
3567 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3568                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3569 schuur          1.13 
3570 mark.hamzy      1.43             JMPIjvm::checkException(env);
3571 schuur          1.1  
3572 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3573                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3574 w.white         1.31 
3575 mark.hamzy      1.43             JMPIjvm::checkException(env);
3576 schuur          1.13 
3577 mark.hamzy      1.43             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3578                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3579                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3580 mark.hamzy      1.23 
3581 mark.hamzy      1.43             JMPIjvm::checkException(env);
3582 schuur          1.1  
3583 mark.hamzy      1.43             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3584 schuur          1.13 
3585 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
3586                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3587 mark.hamzy      1.49             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3588 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3589                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3590                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3591                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3592                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3593                      #endif
3594 schuur          1.1  
3595 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3596                      
3597 mark.hamzy      1.43             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3598                                                                                        id,
3599                                                                                        joc,
3600                                                                                        jAssociationName,
3601                                                                                        jPathName,
3602                                                                                        jResultClass,
3603                                                                                        jRole,
3604                                                                                        jResultRole,
3605                                                                                        JMPI_INCLUDE_QUALIFIERS,
3606                                                                                        request->includeClassOrigin,
3607                                                                                        jPropertyList);
3608 mark.hamzy      1.23 
3609 mark.hamzy      1.43             JMPIjvm::checkException(env);
3610 mark.hamzy      1.23 
3611 mark.hamzy      1.43             if (joc)
3612                                  {
3613                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3614 schuur          1.1  
3615 mark.hamzy      1.43                JMPIjvm::checkException(env);
3616                                  }
3617 schuur          1.1  
3618 mark.hamzy      1.43             handler.processing();
3619                                  if (jVec) {
3620 mark.hamzy      1.45                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3621 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3622 schuur          1.1  
3623 mark.hamzy      1.45                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3624 schuur          1.1  
3625 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3626 schuur          1.1  
3627 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3628 schuur          1.1  
3629 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3630 mark.hamzy      1.24 
3631 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3632                                          CIMClass             cls;
3633 schuur          1.1  
3634 mark.hamzy      1.43                     try
3635                                          {
3636                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3637                                             AutoMutex lock (pr._cimomMutex);
3638                      
3639                                             cls = pr._cimom_handle->getClass(context,
3640                                                                              request->nameSpace,
3641                                                                              ciRet->getClassName(),
3642                                                                              false,
3643                                                                              true,
3644                                                                              true,
3645                                                                              CIMPropertyList());
3646                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3647                                          }
3648                                          catch (CIMException e)
3649                                          {
3650                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3651                                             throw;
3652                                          }
3653                      
3654                                          const CIMObjectPath& op    = ciRet->getPath();
3655 mark.hamzy      1.43                     CIMObjectPath        iop   = ciRet->buildPath(cls);
3656                      
3657                                          JMPIjvm::checkException(env);
3658                      
3659                                          iop.setNameSpace(op.getNameSpace());
3660                                          ciRet->setPath(iop);
3661                      
3662                                          handler.deliver(*ciRet);
3663                                      }
3664                                  }
3665                                  handler.complete();
3666                                  break;
3667                              }
3668                      
3669                              case METHOD_ASSOCIATORPROVIDER:
3670                              {
3671                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3672                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3673                      
3674                                  JMPIjvm::checkException(env);
3675                      
3676 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3677                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3678                      
3679                                  JMPIjvm::checkException(env);
3680                      
3681                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3682                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3683                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3684                      
3685                                  JMPIjvm::checkException(env);
3686                      
3687                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3688                      
3689                      #ifdef PEGASUS_DEBUG
3690                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3691                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3692                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3693                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3694                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3695                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3696                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3697 mark.hamzy      1.43 #endif
3698                      
3699 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3700                      
3701 mark.hamzy      1.43             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3702 mark.hamzy      1.49                                                                   id,
3703                                                                                        jAssociationName,
3704                                                                                        jPathName,
3705                                                                                        jResultClass,
3706                                                                                        jRole,
3707                                                                                        jResultRole,
3708                                                                                        JMPI_INCLUDE_QUALIFIERS,
3709                                                                                        request->includeClassOrigin,
3710                                                                                        jPropertyList);
3711 mark.hamzy      1.43 
3712                                  JMPIjvm::checkException(env);
3713                      
3714                                  handler.processing();
3715                                  if (jVec) {
3716                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3717                                          JMPIjvm::checkException(env);
3718                      
3719                                          jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3720                      
3721                                          JMPIjvm::checkException(env);
3722                      
3723                                          jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3724                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3725                                          CIMClass             cls;
3726                      
3727                                          try
3728                                          {
3729                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3730                                             AutoMutex lock (pr._cimomMutex);
3731                      
3732 mark.hamzy      1.43                        cls = pr._cimom_handle->getClass(context,
3733                                                                              request->nameSpace,
3734                                                                              ciRet->getClassName(),
3735                                                                              false,
3736                                                                              true,
3737                                                                              true,
3738                                                                              CIMPropertyList());
3739                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3740                                          }
3741                                          catch (CIMException e)
3742                                          {
3743                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3744                                             throw;
3745                                          }
3746                      
3747                                          const CIMObjectPath& op        = ciRet->getPath();
3748                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
3749                      
3750                                          JMPIjvm::checkException(env);
3751                      
3752                                          iop.setNameSpace(op.getNameSpace());
3753 mark.hamzy      1.43                     ciRet->setPath(iop);
3754                      
3755                                          handler.deliver(*ciRet);
3756                                      }
3757                                  }
3758                                  handler.complete();
3759                                  break;
3760                              }
3761                      
3762                              case METHOD_UNKNOWN:
3763                              {
3764                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
3765                                  break;
3766                              }
3767                              }
3768                          }
3769                          HandlerCatch(handler);
3770                      
3771                          if (env) JMPIjvm::detachThread();
3772                      
3773                          PEG_METHOD_EXIT();
3774 mark.hamzy      1.43 
3775                          return(response);
3776                      }
3777                      
3778                      Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
3779                      {
3780                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
3781                      
3782 kumpf           1.55     HandlerIntro(AssociatorNames,message,request,response,handler);
3783 mark.hamzy      1.43 
3784                          typedef enum {
3785                             METHOD_UNKNOWN = 0,
3786                             METHOD_CIMASSOCIATORPROVIDER,
3787                             METHOD_CIMASSOCIATORPROVIDER2,
3788                             METHOD_ASSOCIATORPROVIDER,
3789                             METHOD_ASSOCIATORPROVIDER2
3790                          } METHOD_VERSION;
3791                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3792                          JNIEnv          *env           = NULL;
3793                      
3794                          try {
3795                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3796                                  "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0  Name space: $1  Class name: $2",
3797                                  System::getHostName(),
3798                                  request->nameSpace.getString(),
3799                                  request->objectName.getClassName().getString());
3800                      
3801                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<", assocName = "<<request->assocClass.getString()<<PEGASUS_STD(endl));
3802                      
3803                              // make target object path
3804 mark.hamzy      1.43         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3805                                                                             request->nameSpace,
3806                                                                             request->objectName.getClassName(),
3807                                                                             request->objectName.getKeyBindings());
3808                              CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
3809                                                                             request->nameSpace,
3810                                                                             request->assocClass.getString());
3811                      
3812                              // resolve provider name
3813                              ProviderName name = _resolveProviderName(
3814                                  request->operationContext.get(ProviderIdContainer::NAME));
3815                      
3816                              // get cached or load new provider module
3817                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3818                                                                                               name.getLogicalName(),
3819                                                                                               String::EMPTY);
3820                      
3821                              // forward request
3822                              JMPIProvider &pr = ph.GetProvider();
3823                      
3824                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
3825 mark.hamzy      1.43 
3826                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
3827                      
3828                              JvmVector *jv = 0;
3829                      
3830                              env = JMPIjvm::attachThread(&jv);
3831                      
3832                              if (!env)
3833                              {
3834                                  PEG_METHOD_EXIT();
3835 mark.hamzy      1.37 
3836                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3837                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3838                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3839                              }
3840                      
3841 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
3842                      
3843 mark.hamzy      1.43         jmethodID id               = NULL;
3844                              String    interfaceType;
3845                              String    interfaceVersion;
3846                      
3847                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3848                                                interfaceType,
3849                                                interfaceVersion);
3850                      
3851                              if (interfaceType == "JMPI")
3852                              {
3853                                 // public java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3854                                 //                                          org.pegasus.jmpi.CIMObjectPath pathName,
3855                                 //                                          java.lang.String               resultClass,
3856                                 //                                          java.lang.String               role,
3857                                 //                                          java.lang.String               resultRole)
3858                                 //        throws org.pegasus.jmpi.CIMException
3859                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3860                                                       "associatorNames",
3861                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
3862                      
3863                                 if (id != NULL)
3864 mark.hamzy      1.43            {
3865                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
3866                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3867                                 }
3868 mark.hamzy      1.24 
3869 mark.hamzy      1.43            if (id == NULL)
3870                                 {
3871                                     env->ExceptionClear();
3872 mark.hamzy      1.24 
3873 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3874                                     //                                                          org.pegasus.jmpi.CIMObjectPath pathName,
3875                                     //                                                          java.lang.String               resultClass,
3876                                     //                                                          java.lang.String               role,
3877                                     //                                                          java.lang.String               resultRole)
3878                                     //        throws org.pegasus.jmpi.CIMException
3879                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3880                                                           "associatorNames",
3881                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
3882                      
3883                                     if (id != NULL)
3884                                     {
3885                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3886                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3887                                     }
3888                                 }
3889                              }
3890                              else if (interfaceType == "JMPIExperimental")
3891 mark.hamzy      1.24         {
3892 mark.hamzy      1.43            // public java.util.Vector associatorNames (org.pegasus.jmpi.OperationContext oc,
3893                                 //                                          org.pegasus.jmpi.CIMObjectPath    assocName,
3894                                 //                                          org.pegasus.jmpi.CIMObjectPath    pathName,
3895                                 //                                          java.lang.String                  resultClass,
3896                                 //                                          java.lang.String                  role,
3897                                 //                                          java.lang.String                  resultRole)
3898                                 //        throws org.pegasus.jmpi.CIMException
3899                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3900                                                       "associatorNames",
3901                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
3902 mark.hamzy      1.24 
3903 mark.hamzy      1.43            if (id != NULL)
3904                                 {
3905                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3906                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3907                                 }
3908 mark.hamzy      1.24 
3909 mark.hamzy      1.43            if (id == NULL)
3910                                 {
3911                                     env->ExceptionClear();
3912 mark.hamzy      1.24 
3913 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.OperationContext oc,
3914                                     //                                                          org.pegasus.jmpi.CIMObjectPath    assocName,
3915                                     //                                                          org.pegasus.jmpi.CIMObjectPath    pathName,
3916                                     //                                                          java.lang.String                  resultClass,
3917                                     //                                                          java.lang.String                  role,
3918                                     //                                                          java.lang.String                  resultRole)
3919                                     //        throws org.pegasus.jmpi.CIMException
3920                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3921                                                           "associatorNames",
3922                                                           "(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;");
3923                      
3924                                     if (id != NULL)
3925                                     {
3926                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
3927                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3928                                     }
3929                                 }
3930 mark.hamzy      1.24         }
3931 schuur          1.13 
3932 mark.hamzy      1.24         if (id == NULL)
3933                              {
3934                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
3935 mark.hamzy      1.43 
3936                                  PEG_METHOD_EXIT();
3937                      
3938                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3939                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
3940                                                                                     "Could not find a method for the provider based on InterfaceType."));
3941 mark.hamzy      1.23         }
3942 mark.hamzy      1.24 
3943 schuur          1.1          JMPIjvm::checkException(env);
3944                      
3945 mark.hamzy      1.24         switch (eMethodFound)
3946                              {
3947 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
3948                              {
3949                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3950                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3951                      
3952                                  JMPIjvm::checkException(env);
3953                      
3954                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3955                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3956                      
3957                                  JMPIjvm::checkException(env);
3958                      
3959                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3960                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3961                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3962                      
3963                                  JMPIjvm::checkException(env);
3964                      
3965                      #ifdef PEGASUS_DEBUG
3966                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3967                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
3968 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
3969                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
3970                      #endif
3971                      
3972 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3973                      
3974 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3975 mark.hamzy      1.43                                                                   id,
3976                                                                                        jAssociationName,
3977                                                                                        jPathName,
3978                                                                                        jResultClass,
3979                                                                                        jRole,
3980                                                                                        jResultRole);
3981                      
3982                                  JMPIjvm::checkException(env);
3983                      
3984                                  handler.processing();
3985 mark.hamzy      1.45             if (jAr) {
3986                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3987 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3988                      
3989 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
3990 mark.hamzy      1.43 
3991                                          JMPIjvm::checkException(env);
3992                      
3993                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
3994 mark.hamzy      1.50                     CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
3995 mark.hamzy      1.43 
3996                                          JMPIjvm::checkException(env);
3997                      
3998                                          handler.deliver(*copRet);
3999                                      }
4000                                  }
4001                                  handler.complete();
4002                                  break;
4003                              }
4004                      
4005                              case METHOD_CIMASSOCIATORPROVIDER2:
4006 mark.hamzy      1.24         {
4007 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4008                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4009 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4010 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4011                      
4012                                  JMPIjvm::checkException(env);
4013                      
4014 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4015                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4016                      
4017                                  JMPIjvm::checkException(env);
4018                      
4019 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4020                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4021                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4022                      
4023                                  JMPIjvm::checkException(env);
4024                      
4025 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4026                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4027                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4028                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4029                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4030                      #endif
4031                      
4032 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4033                      
4034 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4035 mark.hamzy      1.24                                                                   id,
4036 mark.hamzy      1.43                                                                   joc,
4037 mark.hamzy      1.24                                                                   jAssociationName,
4038 mark.hamzy      1.43                                                                   jPathName,
4039 mark.hamzy      1.24                                                                   jResultClass,
4040                                                                                        jRole,
4041                                                                                        jResultRole);
4042 mark.hamzy      1.25 
4043 mark.hamzy      1.23             JMPIjvm::checkException(env);
4044                      
4045 mark.hamzy      1.43             if (joc)
4046                                  {
4047                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4048                      
4049                                     JMPIjvm::checkException(env);
4050                                  }
4051                      
4052 mark.hamzy      1.23             handler.processing();
4053 mark.hamzy      1.45             if (jAr) {
4054                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4055 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4056                      
4057 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
4058 mark.hamzy      1.24 
4059 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4060                      
4061 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4062 mark.hamzy      1.50                     CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4063 mark.hamzy      1.23 
4064                                          JMPIjvm::checkException(env);
4065                      
4066 mark.hamzy      1.29                     handler.deliver(*copRet);
4067 mark.hamzy      1.23                 }
4068                                  }
4069                                  handler.complete();
4070 mark.hamzy      1.24             break;
4071 mark.hamzy      1.23         }
4072 mark.hamzy      1.24 
4073 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
4074                              {
4075                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4076                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4077                      
4078                                  JMPIjvm::checkException(env);
4079                      
4080                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4081                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4082                      
4083                                  JMPIjvm::checkException(env);
4084                      
4085                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4086                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4087                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4088                      
4089                                  JMPIjvm::checkException(env);
4090                      
4091                      #ifdef PEGASUS_DEBUG
4092                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4093                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName    = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4094 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4095                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4096                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4097                      #endif
4098                      
4099 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4100                      
4101 mark.hamzy      1.43             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4102                                                                                        id,
4103                                                                                        jAssociationName,
4104                                                                                        jPathName,
4105                                                                                        jResultClass,
4106                                                                                        jRole,
4107                                                                                        jResultRole);
4108                      
4109                                  JMPIjvm::checkException(env);
4110                      
4111                                  handler.processing();
4112                                  if (jVec) {
4113                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4114                                          JMPIjvm::checkException(env);
4115                      
4116                                          jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4117                      
4118                                          JMPIjvm::checkException(env);
4119                      
4120                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4121                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4122 mark.hamzy      1.43 
4123                                          JMPIjvm::checkException(env);
4124                      
4125                                          handler.deliver(*copRet);
4126                                      }
4127                                  }
4128                                  handler.complete();
4129                                  break;
4130                              }
4131                      
4132                              case METHOD_ASSOCIATORPROVIDER2:
4133 mark.hamzy      1.24         {
4134 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4135                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4136                      
4137 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4138 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4139                      
4140                                  JMPIjvm::checkException(env);
4141                      
4142 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4143 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4144                      
4145                                  JMPIjvm::checkException(env);
4146                      
4147 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4148                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4149                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4150                      
4151                                  JMPIjvm::checkException(env);
4152                      
4153 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4154                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4155                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName    = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4156                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4157                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4158                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4159                      #endif
4160                      
4161 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4162                      
4163 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4164                                                                                        id,
4165 mark.hamzy      1.43                                                                   joc,
4166 mark.hamzy      1.24                                                                   jAssociationName,
4167 mark.hamzy      1.29                                                                   jPathName,
4168 mark.hamzy      1.24                                                                   jResultClass,
4169                                                                                        jRole,
4170                                                                                        jResultRole);
4171 mark.hamzy      1.25 
4172 mark.hamzy      1.23             JMPIjvm::checkException(env);
4173                      
4174 mark.hamzy      1.43             if (joc)
4175                                  {
4176                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4177                      
4178                                     JMPIjvm::checkException(env);
4179                                  }
4180                      
4181 mark.hamzy      1.23             handler.processing();
4182 mark.hamzy      1.24             if (jVec) {
4183 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4184 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4185 schuur          1.13 
4186 mark.hamzy      1.29                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4187 mark.hamzy      1.24 
4188 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4189 schuur          1.13 
4190 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4191                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4192 schuur          1.1  
4193 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4194 schuur          1.1  
4195 mark.hamzy      1.29                     handler.deliver(*copRet);
4196 mark.hamzy      1.23                 }
4197                                  }
4198                                  handler.complete();
4199 mark.hamzy      1.24             break;
4200                              }
4201                      
4202                              case METHOD_UNKNOWN:
4203                              {
4204                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
4205                                  break;
4206                              }
4207 mark.hamzy      1.23         }
4208 schuur          1.1      }
4209                          HandlerCatch(handler);
4210 schuur          1.12 
4211 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
4212 schuur          1.12 
4213 schuur          1.1      PEG_METHOD_EXIT();
4214                      
4215                          return(response);
4216                      }
4217                      
4218                      Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
4219                      {
4220 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
4221                      
4222 kumpf           1.55     HandlerIntro(References,message,request,response,handler);
4223 schuur          1.1  
4224 mark.hamzy      1.24     typedef enum {
4225                             METHOD_UNKNOWN = 0,
4226 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
4227                             METHOD_CIMASSOCIATORPROVIDER2,
4228                             METHOD_ASSOCIATORPROVIDER,
4229                             METHOD_ASSOCIATORPROVIDER2,
4230 mark.hamzy      1.24     } METHOD_VERSION;
4231                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4232                          JNIEnv          *env           = NULL;
4233 schuur          1.13 
4234 schuur          1.1      try {
4235                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4236 konrad.r        1.15             "JMPIProviderManager::handleReferencesRequest - Host name: $0  Name space: $1  Class name: $2",
4237 schuur          1.1              System::getHostName(),
4238                                  request->nameSpace.getString(),
4239                                  request->objectName.getClassName().getString());
4240                      
4241 mark.hamzy      1.29         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<", result = "<<request->resultClass.getString()<<PEGASUS_STD(endl));
4242 mark.hamzy      1.23 
4243 schuur          1.1          // make target object path
4244 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4245                                                                             request->nameSpace,
4246                                                                             request->objectName.getClassName(),
4247                                                                             request->objectName.getKeyBindings());
4248                              CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4249                                                                             request->nameSpace,
4250                                                                             request->resultClass.getString());
4251 schuur          1.1  
4252                              // resolve provider name
4253 kumpf           1.2          ProviderName name = _resolveProviderName(
4254                                  request->operationContext.get(ProviderIdContainer::NAME));
4255 schuur          1.1  
4256 mark.hamzy      1.43         // get cached or load new provider module
4257                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4258                                                                                               name.getLogicalName(),
4259                                                                                               String::EMPTY);
4260                      
4261                              // convert arguments
4262                              OperationContext context;
4263                      
4264                              context.insert(request->operationContext.get(IdentityContainer::NAME));
4265                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
4266                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
4267                      
4268                              // forward request
4269                              JMPIProvider &pr = ph.GetProvider();
4270                      
4271                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
4272                      
4273                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
4274                      
4275                              JvmVector *jv = 0;
4276                      
4277 mark.hamzy      1.43         env = JMPIjvm::attachThread(&jv);
4278                      
4279                              if (!env)
4280                              {
4281                                  PEG_METHOD_EXIT();
4282                      
4283                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4284                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4285                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4286                              }
4287                      
4288                              JMPIProvider::pm_service_op_lock op_lock(&pr);
4289                      
4290                              jmethodID id               = NULL;
4291                              String    interfaceType;
4292                              String    interfaceVersion;
4293                      
4294                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4295                                                interfaceType,
4296                                                interfaceVersion);
4297                      
4298 mark.hamzy      1.43         if (interfaceType == "JMPI")
4299                              {
4300                                 // public java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
4301                                 //                                     org.pegasus.jmpi.CIMObjectPath pathName,
4302                                 //                                     java.lang.String               role,
4303                                 //                                     boolean                        includeQualifiers,
4304                                 //                                     boolean                        includeClassOrigin,
4305                                 //                                     java.lang.String[]             propertyList)
4306                                 //        throws org.pegasus.jmpi.CIMException
4307                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4308                                                       "references",
4309                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4310                      
4311                                 if (id != NULL)
4312                                 {
4313                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
4314                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4315                                 }
4316                      
4317                                 if (id == NULL)
4318                                 {
4319 mark.hamzy      1.43                env->ExceptionClear();
4320                      
4321                                     // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.CIMObjectPath assocName,
4322                                     //                                                   org.pegasus.jmpi.CIMObjectPath pathName,
4323                                     //                                                   java.lang.String               role,
4324                                     //                                                   boolean                        includeQualifiers,
4325                                     //                                                   boolean                        includeClassOrigin,
4326                                     //                                                   java.lang.String[]             propertyList)
4327                                     //        throws org.pegasus.jmpi.CIMException
4328                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4329                                                           "references",
4330                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
4331                      
4332                                     if (id != NULL)
4333                                     {
4334                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4335                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4336                                     }
4337                                 }
4338                              }
4339                              else if (interfaceType == "JMPIExperimental")
4340 mark.hamzy      1.43         {
4341                                 // public java.util.Vector references (org.pegasus.jmpi.OperationContext oc,
4342                                 //                                     org.pegasus.jmpi.CIMObjectPath    assocName,
4343                                 //                                     org.pegasus.jmpi.CIMObjectPath    pathName,
4344                                 //                                     java.lang.String                  role,
4345                                 //                                     boolean                           includeQualifiers,
4346                                 //                                     boolean                           includeClassOrigin,
4347                                 //                                     java.lang.String[]                propertyList)
4348                                 //        throws org.pegasus.jmpi.CIMException
4349                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4350                                                       "references",
4351 mark.hamzy      1.46                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4352 mark.hamzy      1.43 
4353                                 if (id != NULL)
4354                                 {
4355                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
4356                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4357                                 }
4358                      
4359                                 if (id == NULL)
4360                                 {
4361                                     env->ExceptionClear();
4362                      
4363                                     // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.OperationContext oc,
4364                                     //                                                   org.pegasus.jmpi.CIMObjectPath    assocName,
4365                                     //                                                   org.pegasus.jmpi.CIMObjectPath    pathName,
4366                                     //                                                   java.lang.String                  role,
4367                                     //                                                   boolean                           includeQualifiers,
4368                                     //                                                   boolean                           includeClassOrigin,
4369                                     //                                                   java.lang.String[]                propertyList)
4370                                     //        throws org.pegasus.jmpi.CIMException
4371                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4372                                                           "references",
4373 mark.hamzy      1.43                                      "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
4374                      
4375                                     if (id != NULL)
4376                                     {
4377                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4378                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4379                                     }
4380                                 }
4381                              }
4382                      
4383                              if (id == NULL)
4384                              {
4385                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found no method!"<<PEGASUS_STD(endl));
4386                      
4387                                  PEG_METHOD_EXIT();
4388                      
4389                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4390                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4391                                                                                     "Could not find a method for the provider based on InterfaceType."));
4392                              }
4393                      
4394 mark.hamzy      1.43         JMPIjvm::checkException(env);
4395                      
4396                              switch (eMethodFound)
4397                              {
4398                              case METHOD_CIMASSOCIATORPROVIDER:
4399                              {
4400                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4401                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4402                      
4403                                  JMPIjvm::checkException(env);
4404                      
4405                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4406                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4407                      
4408                                  JMPIjvm::checkException(env);
4409                      
4410                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4411                      
4412                                  JMPIjvm::checkException(env);
4413                      
4414                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4415 mark.hamzy      1.43 
4416                      #ifdef PEGASUS_DEBUG
4417                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4418                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4419                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4420                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4421                      #endif
4422                      
4423 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4424                      
4425 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4426 mark.hamzy      1.43                                                                   id,
4427                                                                                        jAssociationName,
4428                                                                                        jPathName,
4429                                                                                        jRole,
4430                                                                                        JMPI_INCLUDE_QUALIFIERS,
4431                                                                                        request->includeClassOrigin,
4432                                                                                        jPropertyList);
4433                      
4434                                  JMPIjvm::checkException(env);
4435                      
4436                                  handler.processing();
4437 mark.hamzy      1.45             if (jAr) {
4438                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4439 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4440                      
4441 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4442 mark.hamzy      1.43 
4443                                          JMPIjvm::checkException(env);
4444                      
4445                                          jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4446                      
4447                                          JMPIjvm::checkException(env);
4448                      
4449                                          CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4450                                          CIMClass             cls;
4451                      
4452                                          try
4453                                          {
4454                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4455                                             AutoMutex lock (pr._cimomMutex);
4456                      
4457                                             cls = pr._cimom_handle->getClass(context,
4458                                                                              request->nameSpace,
4459                                                                              ciRet->getClassName(),
4460                                                                              false,
4461                                                                              true,
4462                                                                              true,
4463 mark.hamzy      1.43                                                         CIMPropertyList());
4464                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4465                                          }
4466                                          catch (CIMException e)
4467                                          {
4468                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4469                                             throw;
4470                                          }
4471                      
4472                                          const CIMObjectPath& op    = ciRet->getPath();
4473                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
4474                      
4475                                          JMPIjvm::checkException(env);
4476                      
4477                                          iop.setNameSpace(op.getNameSpace());
4478                                          ciRet->setPath(iop);
4479                      
4480                                          handler.deliver(*ciRet);
4481                                      }
4482                                  }
4483                                  handler.complete();
4484 mark.hamzy      1.43             break;
4485                              }
4486                      
4487                              case METHOD_CIMASSOCIATORPROVIDER2:
4488                              {
4489                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4490                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4491                      
4492                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4493                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4494                      
4495                                  JMPIjvm::checkException(env);
4496                      
4497                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4498                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4499                      
4500                                  JMPIjvm::checkException(env);
4501                      
4502                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4503                      
4504                                  JMPIjvm::checkException(env);
4505 mark.hamzy      1.43 
4506                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4507 schuur          1.1  
4508 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
4509                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4510                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4511                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4512                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4513                      #endif
4514 schuur          1.1  
4515 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4516                      
4517 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4518 mark.hamzy      1.43                                                                   id,
4519                                                                                        joc,
4520                                                                                        jAssociationName,
4521                                                                                        jPathName,
4522                                                                                        jRole,
4523                                                                                        JMPI_INCLUDE_QUALIFIERS,
4524                                                                                        request->includeClassOrigin,
4525                                                                                        jPropertyList);
4526 schuur          1.1  
4527 mark.hamzy      1.43             JMPIjvm::checkException(env);
4528 mark.hamzy      1.24 
4529 mark.hamzy      1.43             if (joc)
4530                                  {
4531                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4532 schuur          1.1  
4533 mark.hamzy      1.43                JMPIjvm::checkException(env);
4534                                  }
4535 schuur          1.1  
4536 mark.hamzy      1.43             handler.processing();
4537 mark.hamzy      1.45             if (jAr) {
4538                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4539 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4540 schuur          1.1  
4541 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4542 mark.hamzy      1.37 
4543 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4544 mark.hamzy      1.37 
4545 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4546 mark.hamzy      1.37 
4547 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4548 schuur          1.1  
4549 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4550                                          CIMClass             cls;
4551 schuur          1.1  
4552 mark.hamzy      1.43                     try
4553                                          {
4554                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4555                                             AutoMutex lock (pr._cimomMutex);
4556 mark.hamzy      1.24 
4557 mark.hamzy      1.43                        cls = pr._cimom_handle->getClass(context,
4558                                                                              request->nameSpace,
4559                                                                              ciRet->getClassName(),
4560                                                                              false,
4561                                                                              true,
4562                                                                              true,
4563                                                                              CIMPropertyList());
4564                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4565                                          }
4566                                          catch (CIMException e)
4567                                          {
4568                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4569                                             throw;
4570                                          }
4571 mark.hamzy      1.24 
4572 mark.hamzy      1.43                     const CIMObjectPath& op    = ciRet->getPath();
4573                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
4574 mark.hamzy      1.24 
4575 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4576 mark.hamzy      1.24 
4577 mark.hamzy      1.43                     iop.setNameSpace(op.getNameSpace());
4578                                          ciRet->setPath(iop);
4579 mark.hamzy      1.24 
4580 mark.hamzy      1.43                     handler.deliver(*ciRet);
4581                                      }
4582 mark.hamzy      1.24             }
4583 mark.hamzy      1.43             handler.complete();
4584                                  break;
4585 mark.hamzy      1.24         }
4586 schuur          1.12 
4587 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
4588 mark.hamzy      1.24         {
4589 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4590                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4591 mark.hamzy      1.24 
4592 mark.hamzy      1.43             JMPIjvm::checkException(env);
4593 schuur          1.1  
4594 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4595                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4596 mark.hamzy      1.25 
4597                                  JMPIjvm::checkException(env);
4598                      
4599                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4600                      
4601                                  JMPIjvm::checkException(env);
4602                      
4603                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4604                      
4605 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4606                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4607 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4608 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4609                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4610                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4611                      #endif
4612                      
4613 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4614                      
4615 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4616                                                                                        id,
4617                                                                                        jAssociationName,
4618 mark.hamzy      1.43                                                                   jPathName,
4619 mark.hamzy      1.24                                                                   jRole,
4620 mark.hamzy      1.36                                                                   JMPI_INCLUDE_QUALIFIERS,
4621                                                                                        request->includeClassOrigin,
4622 mark.hamzy      1.24                                                                   jPropertyList);
4623 mark.hamzy      1.25 
4624 mark.hamzy      1.23             JMPIjvm::checkException(env);
4625                      
4626                                  handler.processing();
4627                                  if (jVec) {
4628 mark.hamzy      1.43                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4629 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4630                      
4631 mark.hamzy      1.43                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4632 mark.hamzy      1.24 
4633 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4634                      
4635 mark.hamzy      1.43                     jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4636                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4637 mark.hamzy      1.40                     CIMClass             cls;
4638                      
4639                                          try
4640                                          {
4641                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4642                                             AutoMutex lock (pr._cimomMutex);
4643                      
4644                                             cls = pr._cimom_handle->getClass(context,
4645                                                                              request->nameSpace,
4646                                                                              ciRet->getClassName(),
4647                                                                              false,
4648                                                                              true,
4649                                                                              true,
4650                                                                              CIMPropertyList());
4651                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4652                                          }
4653                                          catch (CIMException e)
4654                                          {
4655                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4656                                             throw;
4657                                          }
4658 mark.hamzy      1.40 
4659 mark.hamzy      1.43                     const CIMObjectPath& op        = ciRet->getPath();
4660                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
4661 mark.hamzy      1.24 
4662 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4663                      
4664 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
4665 mark.hamzy      1.29                     ciRet->setPath(iop);
4666 schuur          1.13 
4667 mark.hamzy      1.29                     handler.deliver(*ciRet);
4668 mark.hamzy      1.23                 }
4669                                  }
4670                                  handler.complete();
4671 mark.hamzy      1.24             break;
4672 mark.hamzy      1.23         }
4673 schuur          1.1  
4674 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
4675 mark.hamzy      1.24         {
4676 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4677                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4678                      
4679 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4680 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4681                      
4682                                  JMPIjvm::checkException(env);
4683                      
4684 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4685 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4686                      
4687                                  JMPIjvm::checkException(env);
4688                      
4689 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
4690                      
4691                                  JMPIjvm::checkException(env);
4692                      
4693                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4694                      
4695 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4696                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4697                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4698                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4699                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4700                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4701                      #endif
4702                      
4703 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4704                      
4705 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4706                                                                                        id,
4707 mark.hamzy      1.43                                                                   joc,
4708 mark.hamzy      1.24                                                                   jAssociationName,
4709                                                                                        jPathName,
4710                                                                                        jRole,
4711 mark.hamzy      1.32                                                                   JMPI_INCLUDE_QUALIFIERS,
4712                                                                                        request->includeClassOrigin,
4713 mark.hamzy      1.24                                                                   jPropertyList);
4714 mark.hamzy      1.25 
4715 mark.hamzy      1.24             JMPIjvm::checkException(env);
4716                      
4717 mark.hamzy      1.43             if (joc)
4718                                  {
4719                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4720                      
4721                                     JMPIjvm::checkException(env);
4722                                  }
4723                      
4724 mark.hamzy      1.24             handler.processing();
4725                                  if (jVec) {
4726 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4727 mark.hamzy      1.24                     JMPIjvm::checkException(env);
4728                      
4729 mark.hamzy      1.29                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4730 mark.hamzy      1.24 
4731                                          JMPIjvm::checkException(env);
4732                      
4733 mark.hamzy      1.29                     jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4734                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4735 mark.hamzy      1.40                     CIMClass             cls;
4736                      
4737                                          try
4738                                          {
4739                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4740                                             AutoMutex lock (pr._cimomMutex);
4741                      
4742                                             cls = pr._cimom_handle->getClass(context,
4743                                                                              request->nameSpace,
4744                                                                              ciRet->getClassName(),
4745                                                                              false,
4746                                                                              true,
4747                                                                              true,
4748                                                                              CIMPropertyList());
4749                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4750                                          }
4751                                          catch (CIMException e)
4752                                          {
4753                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4754                                             throw;
4755                                          }
4756 mark.hamzy      1.40 
4757 mark.hamzy      1.29                     const CIMObjectPath& op        = ciRet->getPath();
4758                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
4759 schuur          1.1  
4760 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4761                      
4762 mark.hamzy      1.24                     iop.setNameSpace(op.getNameSpace());
4763 mark.hamzy      1.29                     ciRet->setPath(iop);
4764 schuur          1.12 
4765 mark.hamzy      1.29                     handler.deliver(*ciRet);
4766 mark.hamzy      1.24                 }
4767                                  }
4768                                  handler.complete();
4769                                  break;
4770                              }
4771 mark.hamzy      1.23 
4772 mark.hamzy      1.24         case METHOD_UNKNOWN:
4773                              {
4774 mark.hamzy      1.25             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: should not be here!"<<PEGASUS_STD(endl));
4775 mark.hamzy      1.24             break;
4776                              }
4777 mark.hamzy      1.23         }
4778 schuur          1.1      }
4779                          HandlerCatch(handler);
4780 schuur          1.12 
4781                          if (env) JMPIjvm::detachThread();
4782                      
4783 schuur          1.1      PEG_METHOD_EXIT();
4784                      
4785                          return(response);
4786                      }
4787                      
4788                      Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
4789                      {
4790 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
4791                      
4792 kumpf           1.55     HandlerIntro(ReferenceNames,message,request,response,handler);
4793 schuur          1.1  
4794 mark.hamzy      1.24     typedef enum {
4795                             METHOD_UNKNOWN = 0,
4796 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
4797                             METHOD_CIMASSOCIATORPROVIDER2,
4798                             METHOD_ASSOCIATORPROVIDER,
4799                             METHOD_ASSOCIATORPROVIDER2,
4800 mark.hamzy      1.24     } METHOD_VERSION;
4801                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4802                          JNIEnv          *env           = NULL;
4803 schuur          1.13 
4804 schuur          1.1      try {
4805                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4806                                  "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
4807                                  System::getHostName(),
4808                                  request->nameSpace.getString(),
4809                                  request->objectName.getClassName().getString());
4810                      
4811 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
4812                      
4813 schuur          1.1          // make target object path
4814 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4815                                                                             request->nameSpace,
4816                                                                             request->objectName.getClassName(),
4817                                                                             request->objectName.getKeyBindings());
4818                              CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4819                                                                             request->nameSpace,
4820                                                                             request->resultClass.getString());
4821 schuur          1.1  
4822                              // resolve provider name
4823 kumpf           1.2          ProviderName name = _resolveProviderName(
4824                                  request->operationContext.get(ProviderIdContainer::NAME));
4825 schuur          1.1  
4826                              // get cached or load new provider module
4827 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4828                                                                                               name.getLogicalName(),
4829                                                                                               String::EMPTY);
4830 schuur          1.1  
4831 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
4832 schuur          1.1  
4833 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.referenceNames: " + pr.getName());
4834 schuur          1.1  
4835 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
4836 schuur          1.12 
4837 mark.hamzy      1.24         JvmVector *jv = 0;
4838                      
4839                              env = JMPIjvm::attachThread(&jv);
4840 schuur          1.1  
4841 mark.hamzy      1.37         if (!env)
4842                              {
4843                                  PEG_METHOD_EXIT();
4844                      
4845                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4846                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4847                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4848                              }
4849                      
4850 mark.hamzy      1.43         JMPIProvider::pm_service_op_lock op_lock(&pr);
4851                      
4852                              jmethodID id               = NULL;
4853                              String    interfaceType;
4854                              String    interfaceVersion;
4855                      
4856                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4857                                                interfaceType,
4858                                                interfaceVersion);
4859                      
4860                              if (interfaceType == "JMPI")
4861                              {
4862                                 // public java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4863                                 //                                         org.pegasus.jmpi.CIMObjectPath pathName,
4864                                 //                                         java.lang.String               role)
4865                                 //        throws org.pegasus.jmpi.CIMException
4866                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4867                                                       "referenceNames",
4868                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
4869                      
4870                                 if (id != NULL)
4871 mark.hamzy      1.43            {
4872                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
4873                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4874                                 }
4875                      
4876                                 if (id == NULL)
4877                                 {
4878                                     env->ExceptionClear();
4879                      
4880                                     // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4881                                     //                                                         org.pegasus.jmpi.CIMObjectPath pathName,
4882                                     //                                                         java.lang.String               role)
4883                                     //        throws org.pegasus.jmpi.CIMException
4884                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4885                                                           "referenceNames",
4886                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
4887                      
4888                                     if (id != NULL)
4889                                     {
4890                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4891                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4892 mark.hamzy      1.43                }
4893                                 }
4894                              }
4895                              else if (interfaceType == "JMPIExperimental")
4896                              {
4897                                 // public java.util.Vector referenceNames (org.pegasus.jmpi.OperationContext oc,
4898                                 //                                         org.pegasus.jmpi.CIMObjectPath    assocName,
4899                                 //                                         org.pegasus.jmpi.CIMObjectPath    pathName,
4900                                 //                                         java.lang.String                  role)
4901                                 //        throws org.pegasus.jmpi.CIMException
4902                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4903                                                       "referenceNames",
4904                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
4905                      
4906                                 if (id != NULL)
4907                                 {
4908                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
4909                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4910                                 }
4911                      
4912                                 if (id == NULL)
4913 mark.hamzy      1.43            {
4914                                     env->ExceptionClear();
4915                      
4916                                     // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.OperationContext oc,
4917                                     //                                                         org.pegasus.jmpi.CIMObjectPath    assocName,
4918                                     //                                                         org.pegasus.jmpi.CIMObjectPath    pathName,
4919                                     //                                                         java.lang.String                  role)
4920                                     //        throws org.pegasus.jmpi.CIMException
4921                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4922                                                           "referenceNames",
4923                                                           "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
4924                      
4925                                     if (id != NULL)
4926                                     {
4927                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4928                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4929                                     }
4930                                 }
4931                              }
4932                      
4933                              if (id == NULL)
4934 mark.hamzy      1.43         {
4935                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found no method!"<<PEGASUS_STD(endl));
4936                      
4937                                  PEG_METHOD_EXIT();
4938                      
4939                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4940                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4941                                                                                     "Could not find a method for the provider based on InterfaceType."));
4942                              }
4943                      
4944                              JMPIjvm::checkException(env);
4945                      
4946                              switch (eMethodFound)
4947                              {
4948                              case METHOD_CIMASSOCIATORPROVIDER:
4949                              {
4950                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4951                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4952                      
4953                                  JMPIjvm::checkException(env);
4954                      
4955 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4956                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4957                      
4958                                  JMPIjvm::checkException(env);
4959                      
4960                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4961                      
4962                                  JMPIjvm::checkException(env);
4963                      
4964                      #ifdef PEGASUS_DEBUG
4965                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4966                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4967                      #endif
4968                      
4969 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4970                      
4971 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4972 mark.hamzy      1.43                                                                   id,
4973                                                                                        jPathName,
4974                                                                                        jAssociationName,
4975                                                                                        jRole);
4976                      
4977                                  JMPIjvm::checkException(env);
4978                      
4979                                  handler.processing();
4980 mark.hamzy      1.45             if (jAr) {
4981                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4982 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4983                      
4984 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
4985 mark.hamzy      1.43 
4986                                          JMPIjvm::checkException(env);
4987                      
4988                                          jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4989                      
4990                                          JMPIjvm::checkException(env);
4991                      
4992                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4993                      
4994                                          handler.deliver(*copRet);
4995                                      }
4996                                  }
4997                                  handler.complete();
4998                                  break;
4999                              }
5000                      
5001                              case METHOD_CIMASSOCIATORPROVIDER2:
5002                              {
5003                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5004                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5005                      
5006 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5007                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5008                      
5009                                  JMPIjvm::checkException(env);
5010                      
5011                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5012                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5013                      
5014                                  JMPIjvm::checkException(env);
5015                      
5016                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5017                      
5018                                  JMPIjvm::checkException(env);
5019                      
5020                      #ifdef PEGASUS_DEBUG
5021                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5022                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5023                      #endif
5024                      
5025 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5026                      
5027 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5028 mark.hamzy      1.43                                                                   id,
5029                                                                                        joc,
5030                                                                                        jPathName,
5031                                                                                        jAssociationName,
5032                                                                                        jRole);
5033                      
5034                                  JMPIjvm::checkException(env);
5035                      
5036                                  if (joc)
5037                                  {
5038                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5039                      
5040                                     JMPIjvm::checkException(env);
5041                                  }
5042                      
5043                                  handler.processing();
5044 mark.hamzy      1.45             if (jAr) {
5045                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
5046 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5047 schuur          1.1  
5048 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
5049 schuur          1.1  
5050 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5051 mark.hamzy      1.24 
5052 mark.hamzy      1.43                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5053 mark.hamzy      1.24 
5054 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5055 mark.hamzy      1.24 
5056 mark.hamzy      1.43                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5057 mark.hamzy      1.24 
5058 mark.hamzy      1.43                     handler.deliver(*copRet);
5059                                      }
5060 mark.hamzy      1.24             }
5061 mark.hamzy      1.43             handler.complete();
5062                                  break;
5063 mark.hamzy      1.24         }
5064 schuur          1.11 
5065 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
5066 mark.hamzy      1.24         {
5067 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5068                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5069 mark.hamzy      1.24 
5070 mark.hamzy      1.43             JMPIjvm::checkException(env);
5071 schuur          1.1  
5072 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5073                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5074 mark.hamzy      1.25 
5075                                  JMPIjvm::checkException(env);
5076                      
5077                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5078                      
5079                                  JMPIjvm::checkException(env);
5080                      
5081 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5082                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5083 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName           = "<<resultPath->toString ()<<PEGASUS_STD(endl));
5084 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5085                      #endif
5086                      
5087 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5088                      
5089 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5090                                                                                        id,
5091                                                                                        jAssociationName,
5092 mark.hamzy      1.43                                                                   jPathName,
5093 mark.hamzy      1.24                                                                   jRole);
5094 mark.hamzy      1.25 
5095 mark.hamzy      1.23             JMPIjvm::checkException(env);
5096                      
5097                                  handler.processing();
5098                                  if (jVec) {
5099 mark.hamzy      1.43                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
5100 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5101                      
5102 mark.hamzy      1.43                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
5103 mark.hamzy      1.24 
5104 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5105                      
5106 mark.hamzy      1.29                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5107 mark.hamzy      1.23 
5108                                          JMPIjvm::checkException(env);
5109                      
5110 mark.hamzy      1.29                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5111 mark.hamzy      1.24 
5112 mark.hamzy      1.29                     handler.deliver(*copRet);
5113 mark.hamzy      1.23                 }
5114                                  }
5115                                  handler.complete();
5116 mark.hamzy      1.24             break;
5117 mark.hamzy      1.23         }
5118 mark.hamzy      1.24 
5119 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
5120 mark.hamzy      1.24         {
5121 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5122                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5123                      
5124 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5125 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5126                      
5127                                  JMPIjvm::checkException(env);
5128                      
5129 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5130 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5131                      
5132                                  JMPIjvm::checkException(env);
5133                      
5134 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
5135                      
5136                                  JMPIjvm::checkException(env);
5137                      
5138 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5139                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5140                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName           = "<<resultPath->toString ()<<PEGASUS_STD(endl));
5141                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5142                      #endif
5143                      
5144 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5145                      
5146 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5147                                                                                        id,
5148 mark.hamzy      1.43                                                                   joc,
5149 mark.hamzy      1.24                                                                   jAssociationName,
5150                                                                                        jPathName,
5151                                                                                        jRole);
5152 mark.hamzy      1.25 
5153 mark.hamzy      1.23             JMPIjvm::checkException(env);
5154                      
5155 mark.hamzy      1.43             if (joc)
5156                                  {
5157                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5158                      
5159                                     JMPIjvm::checkException(env);
5160                                  }
5161                      
5162 mark.hamzy      1.23             handler.processing();
5163 mark.hamzy      1.24             if (jVec) {
5164 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
5165 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5166 schuur          1.13 
5167 mark.hamzy      1.29                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
5168 mark.hamzy      1.24 
5169 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5170 schuur          1.13 
5171 mark.hamzy      1.29                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5172 schuur          1.1  
5173 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5174 schuur          1.1  
5175 mark.hamzy      1.29                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5176 mark.hamzy      1.24 
5177 mark.hamzy      1.29                     handler.deliver(*copRet);
5178 mark.hamzy      1.23                 }
5179                                  }
5180                                  handler.complete();
5181 mark.hamzy      1.24             break;
5182                              }
5183                      
5184                              case METHOD_UNKNOWN:
5185                              {
5186 mark.hamzy      1.25             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
5187 mark.hamzy      1.24             break;
5188                              }
5189 mark.hamzy      1.23         }
5190 schuur          1.1      }
5191                          HandlerCatch(handler);
5192 schuur          1.11 
5193                          if (env) JMPIjvm::detachThread();
5194                      
5195 schuur          1.1      PEG_METHOD_EXIT();
5196                      
5197                          return(response);
5198                      }
5199                      
5200 mark.hamzy      1.26 Message * JMPIProviderManager::handleGetPropertyRequest(const Message * message) throw()
5201                      {
5202                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetPropertyRequest");
5203                      
5204 kumpf           1.55     HandlerIntro(GetProperty,message,request,response,handler);
5205 mark.hamzy      1.26 
5206                          typedef enum {
5207                             METHOD_UNKNOWN = 0,
5208 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
5209                             METHOD_PROPERTYPROVIDER2,
5210 mark.hamzy      1.26     } METHOD_VERSION;
5211                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5212                          JNIEnv          *env           = NULL;
5213                      
5214                          try {
5215                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5216                                  "JMPIProviderManager::handleGetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
5217                                  System::getHostName(),
5218                                  request->nameSpace.getString(),
5219                                  request->instanceName.getClassName().getString());
5220                      
5221                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5222                      
5223                              // make target object path
5224 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5225                                                                             request->nameSpace,
5226                                                                             request->instanceName.getClassName(),
5227                                                                             request->instanceName.getKeyBindings());
5228 mark.hamzy      1.26 
5229                              // resolve provider name
5230                              ProviderName name = _resolveProviderName(
5231                                  request->operationContext.get(ProviderIdContainer::NAME));
5232                      
5233                              // get cached or load new provider module
5234 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5235                                                                                               name.getLogicalName(),
5236                                                                                               String::EMPTY);
5237 mark.hamzy      1.26 
5238                              // forward request
5239                              JMPIProvider &pr = ph.GetProvider();
5240                      
5241                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.getPropertyValue: " + pr.getName());
5242                      
5243                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: Calling provider getPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5244                      
5245                              JvmVector *jv = 0;
5246                      
5247                              env = JMPIjvm::attachThread(&jv);
5248                      
5249 mark.hamzy      1.37         if (!env)
5250                              {
5251                                  PEG_METHOD_EXIT();
5252                      
5253                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5254                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5255                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5256                              }
5257                      
5258 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
5259                      
5260 mark.hamzy      1.43         jmethodID id               = NULL;
5261                              String    interfaceType;
5262                              String    interfaceVersion;
5263                      
5264                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5265                                                interfaceType,
5266                                                interfaceVersion);
5267                      
5268                              if (interfaceType == "JMPI")
5269                              {
5270                                 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5271                                 //                                                             java.lang.String               oclass,
5272                                 //                                                             java.lang.String               pName)
5273                                 //        throws org.pegasus.jmpi.CIMException
5274                                 //
5275                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5276                                                       "getPropertyValue",
5277                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
5278 mark.hamzy      1.26 
5279 mark.hamzy      1.43            if (id != NULL)
5280                                 {
5281                                     eMethodFound = METHOD_PROPERTYPROVIDER;
5282                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5283                                 }
5284                              }
5285                              else if (interfaceType == "JMPIExperimental")
5286                              {
5287                                 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.OperationContext oc,
5288                                 //                                                             org.pegasus.jmpi.CIMObjectPath    cop,
5289                                 //                                                             java.lang.String                  oclass,
5290                                 //                                                             java.lang.String                  pName)
5291                                 //        throws org.pegasus.jmpi.CIMException
5292                                 //
5293                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5294                                                       "getPropertyValue",
5295 mark.hamzy      1.46                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
5296 mark.hamzy      1.26 
5297 mark.hamzy      1.43            if (id != NULL)
5298                                 {
5299                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
5300                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5301                                 }
5302 mark.hamzy      1.26         }
5303                      
5304                              if (id == NULL)
5305                              {
5306                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
5307 mark.hamzy      1.43 
5308                                  PEG_METHOD_EXIT();
5309                      
5310                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5311                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5312                                                                                     "Could not find a method for the provider based on InterfaceType."));
5313 mark.hamzy      1.26         }
5314                      
5315                              JMPIjvm::checkException(env);
5316                      
5317                              switch (eMethodFound)
5318                              {
5319 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
5320 mark.hamzy      1.26         {
5321 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5322 mark.hamzy      1.26             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5323                      
5324                                  JMPIjvm::checkException(env);
5325                      
5326                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5327                      
5328                                  JMPIjvm::checkException(env);
5329                      
5330                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5331                      
5332                                  JMPIjvm::checkException(env);
5333                      
5334 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5335 mark.hamzy      1.26 
5336 mark.hamzy      1.29             jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5337                                                                           id,
5338                                                                           jcop,
5339                                                                           joclass,
5340                                                                           jpName);
5341 mark.hamzy      1.26 
5342                                  JMPIjvm::checkException(env);
5343                      
5344                                  handler.processing();
5345                      
5346 mark.hamzy      1.29             if (jvalRet)
5347 mark.hamzy      1.26             {
5348 mark.hamzy      1.29                jint      jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5349                                     CIMValue *valRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
5350 mark.hamzy      1.26 
5351                                     JMPIjvm::checkException(env);
5352                      
5353 mark.hamzy      1.29                handler.deliver(*valRet);
5354 mark.hamzy      1.26             }
5355                                  handler.complete();
5356                                  break;
5357                              }
5358                      
5359 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER2:
5360                              {
5361                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5362                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5363                      
5364                                  jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5365                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5366                      
5367                                  JMPIjvm::checkException(env);
5368                      
5369                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5370                      
5371                                  JMPIjvm::checkException(env);
5372                      
5373                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5374                      
5375                                  JMPIjvm::checkException(env);
5376                      
5377 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5378 mark.hamzy      1.43 
5379                                  jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5380                                                                           id,
5381                                                                           joc,
5382                                                                           jcop,
5383                                                                           joclass,
5384                                                                           jpName);
5385                      
5386                                  JMPIjvm::checkException(env);
5387                      
5388                                  if (joc)
5389                                  {
5390                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5391                      
5392                                     JMPIjvm::checkException(env);
5393                                  }
5394                      
5395                                  handler.processing();
5396                      
5397                                  if (jvalRet)
5398                                  {
5399 mark.hamzy      1.43                jint      jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5400                                     CIMValue *valRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
5401                      
5402                                     JMPIjvm::checkException(env);
5403                      
5404                                     handler.deliver(*valRet);
5405                                  }
5406                                  handler.complete();
5407                                  break;
5408                              }
5409                      
5410 mark.hamzy      1.26         case METHOD_UNKNOWN:
5411                              {
5412                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5413                                  break;
5414                              }
5415                              }
5416                          }
5417                          HandlerCatch(handler);
5418                      
5419                          if (env) JMPIjvm::detachThread();
5420                      
5421                          PEG_METHOD_EXIT();
5422                      
5423                          return(response);
5424                      }
5425                      
5426                      Message * JMPIProviderManager::handleSetPropertyRequest(const Message * message) throw()
5427                      {
5428                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleSetPropertyRequest");
5429                      
5430 kumpf           1.55     HandlerIntro(SetProperty,message,request,response,handler);
5431 mark.hamzy      1.26 
5432                          typedef enum {
5433                             METHOD_UNKNOWN = 0,
5434 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
5435                             METHOD_PROPERTYPROVIDER2,
5436 mark.hamzy      1.26     } METHOD_VERSION;
5437                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5438                          JNIEnv          *env           = NULL;
5439                      
5440                          try {
5441                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5442                                  "JMPIProviderManager::handleSetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
5443                                  System::getHostName(),
5444                                  request->nameSpace.getString(),
5445                                  request->instanceName.getClassName().getString());
5446                      
5447                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5448                      
5449                              // make target object path
5450 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5451                                                                             request->nameSpace,
5452                                                                             request->instanceName.getClassName(),
5453                                                                             request->instanceName.getKeyBindings());
5454 mark.hamzy      1.26 
5455                              // resolve provider name
5456                              ProviderName name = _resolveProviderName(
5457                                  request->operationContext.get(ProviderIdContainer::NAME));
5458                      
5459                              // get cached or load new provider module
5460 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5461                                                                                               name.getLogicalName(),
5462                                                                                               String::EMPTY);
5463 mark.hamzy      1.26 
5464                              // forward request
5465                              JMPIProvider &pr = ph.GetProvider();
5466                      
5467                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.setPropertyValue: " + pr.getName());
5468                      
5469                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: Calling provider setPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5470                      
5471                              JvmVector *jv = 0;
5472                      
5473                              env = JMPIjvm::attachThread(&jv);
5474                      
5475 mark.hamzy      1.37         if (!env)
5476                              {
5477                                  PEG_METHOD_EXIT();
5478                      
5479                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5480                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5481                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5482                              }
5483                      
5484 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
5485                      
5486 mark.hamzy      1.43         jmethodID id               = NULL;
5487                              String    interfaceType;
5488                              String    interfaceVersion;
5489                      
5490                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5491                                                interfaceType,
5492                                                interfaceVersion);
5493                      
5494                              if (interfaceType == "JMPI")
5495                              {
5496                                 // public abstract void setPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5497                                 //                                        java.lang.String               oclass,
5498                                 //                                        java.lang.String               pName,
5499                                 //                                        org.pegasus.jmpi.CIMValue      val)
5500                                 //        throws org.pegasus.jmpi.CIMException
5501                                 //
5502                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5503                                                       "setPropertyValue",
5504                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
5505 mark.hamzy      1.26 
5506 mark.hamzy      1.43            if (id != NULL)
5507                                 {
5508                                     eMethodFound = METHOD_PROPERTYPROVIDER;
5509                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5510                                 }
5511                              }
5512                              else if (interfaceType == "JMPIExperimental")
5513                              {
5514                                 // public abstract void setPropertyValue (org.pegasus.jmpi.OperationContext oc,
5515                                 //                                        org.pegasus.jmpi.CIMObjectPath    cop,
5516                                 //                                        java.lang.String                  oclass,
5517                                 //                                        java.lang.String                  pName,
5518                                 //                                        org.pegasus.jmpi.CIMValue         val)
5519                                 //        throws org.pegasus.jmpi.CIMException
5520                                 //
5521                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5522                                                       "setPropertyValue",
5523 mark.hamzy      1.46                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
5524 mark.hamzy      1.26 
5525 mark.hamzy      1.43            if (id != NULL)
5526                                 {
5527                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
5528                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5529                                 }
5530 mark.hamzy      1.26         }
5531                      
5532                              if (id == NULL)
5533                              {
5534                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
5535 mark.hamzy      1.43 
5536                                  PEG_METHOD_EXIT();
5537                      
5538                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5539                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5540                                                                                     "Could not find a method for the provider based on InterfaceType."));
5541 mark.hamzy      1.26         }
5542                      
5543                              JMPIjvm::checkException(env);
5544                      
5545                              switch (eMethodFound)
5546                              {
5547 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
5548                              {
5549                                  jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5550                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5551                      
5552                                  JMPIjvm::checkException(env);
5553                      
5554                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5555                      
5556                                  JMPIjvm::checkException(env);
5557                      
5558                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5559                      
5560                                  JMPIjvm::checkException(env);
5561                      
5562                                  CIMValue *val = new CIMValue (request->newValue);
5563                      
5564                                  JMPIjvm::checkException(env);
5565                      
5566                                  jint    jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
5567                                  jobject jval    = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5568 mark.hamzy      1.43 
5569                                  JMPIjvm::checkException(env);
5570                      
5571 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5572 mark.hamzy      1.43 
5573                                  env->CallVoidMethod ((jobject)pr.jProvider,
5574                                                       id,
5575                                                       jcop,
5576                                                       joclass,
5577                                                       jpName,
5578                                                       jval);
5579                      
5580                                  JMPIjvm::checkException(env);
5581                                  break;
5582                              }
5583                      
5584                              case METHOD_PROPERTYPROVIDER2:
5585 mark.hamzy      1.26         {
5586 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5587                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5588                      
5589 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5590 mark.hamzy      1.26             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5591                      
5592                                  JMPIjvm::checkException(env);
5593                      
5594                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5595                      
5596                                  JMPIjvm::checkException(env);
5597                      
5598                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5599                      
5600                                  JMPIjvm::checkException(env);
5601                      
5602 mark.hamzy      1.27             CIMValue *val = new CIMValue (request->newValue);
5603 mark.hamzy      1.26 
5604                                  JMPIjvm::checkException(env);
5605                      
5606 mark.hamzy      1.27             jint    jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
5607 mark.hamzy      1.26             jobject jval    = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5608                      
5609                                  JMPIjvm::checkException(env);
5610                      
5611 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5612 mark.hamzy      1.26 
5613                                  env->CallVoidMethod ((jobject)pr.jProvider,
5614                                                       id,
5615 mark.hamzy      1.43                                  joc,
5616 mark.hamzy      1.26                                  jcop,
5617                                                       joclass,
5618                                                       jpName,
5619                                                       jval);
5620                      
5621                                  JMPIjvm::checkException(env);
5622                      
5623 mark.hamzy      1.43             if (joc)
5624                                  {
5625                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5626                      
5627                                     JMPIjvm::checkException(env);
5628                                  }
5629 mark.hamzy      1.26             break;
5630                              }
5631                      
5632                              case METHOD_UNKNOWN:
5633                              {
5634                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5635                                  break;
5636                              }
5637                              }
5638                          }
5639                          HandlerCatch(handler);
5640                      
5641                          if (env) JMPIjvm::detachThread();
5642                      
5643                          PEG_METHOD_EXIT();
5644                      
5645                          return(response);
5646                      }
5647                      
5648 schuur          1.1  Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
5649                      {
5650 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
5651                      
5652 kumpf           1.55     HandlerIntro(InvokeMethod,message,request,response,handler);
5653 schuur          1.1  
5654 mark.hamzy      1.25     typedef enum {
5655                             METHOD_UNKNOWN = 0,
5656 mark.hamzy      1.43        METHOD_CIMMETHODPROVIDER,
5657                             METHOD_CIMMETHODPROVIDER2,
5658                             METHOD_METHODPROVIDER,
5659                             METHOD_METHODPROVIDER2,
5660 mark.hamzy      1.25     } METHOD_VERSION;
5661                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5662                          JNIEnv          *env           = NULL;
5663 schuur          1.13 
5664 schuur          1.1      try {
5665                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5666                                  "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0  Name space: $1  Class name: $2",
5667                                  System::getHostName(),
5668                                  request->nameSpace.getString(),
5669                                  request->instanceName.getClassName().getString());
5670                      
5671 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->instanceName.getClassName().getString()<<PEGASUS_STD(endl));
5672                      
5673 schuur          1.1          // make target object path
5674 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5675                                                                             request->nameSpace,
5676                                                                             request->instanceName.getClassName(),
5677                                                                             request->instanceName.getKeyBindings());
5678 schuur          1.1  
5679                              // resolve provider name
5680 kumpf           1.2          ProviderName name = _resolveProviderName(
5681                                  request->operationContext.get(ProviderIdContainer::NAME));
5682 schuur          1.1  
5683                              // get cached or load new provider module
5684 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5685                                                                                               name.getLogicalName(),
5686                                                                                               String::EMPTY);
5687 schuur          1.1  
5688 mark.hamzy      1.25         JMPIProvider &pr=ph.GetProvider();
5689 schuur          1.1  
5690 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.invokeMethod: " + pr.getName());
5691 schuur          1.1  
5692 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
5693 schuur          1.11 
5694 mark.hamzy      1.25         JvmVector *jv = 0;
5695 mark.hamzy      1.23 
5696 mark.hamzy      1.25         env = JMPIjvm::attachThread(&jv);
5697 schuur          1.11 
5698 mark.hamzy      1.37         if (!env)
5699                              {
5700 mark.hamzy      1.43             PEG_METHOD_EXIT();
5701                      
5702                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5703                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5704                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5705                              }
5706                      
5707                              JMPIProvider::pm_service_op_lock op_lock(&pr);
5708                      
5709                              jmethodID id               = NULL;
5710                              String    interfaceType;
5711                              String    interfaceVersion;
5712                      
5713                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5714                                                interfaceType,
5715                                                interfaceVersion);
5716                      
5717                              if (interfaceType == "JMPI")
5718                              {
5719                                 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath cop,
5720                                 //                                                         java.lang.String               name,
5721 mark.hamzy      1.43            //                                                         java.util.Vector               in,
5722                                 //                                                         java.util.Vector               out)
5723                                 //        throws org.pegasus.jmpi.CIMException
5724                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5725                                                       "invokeMethod",
5726                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5727                      
5728                                 if (id != NULL)
5729                                 {
5730                                     eMethodFound = METHOD_METHODPROVIDER;
5731                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER."<<PEGASUS_STD(endl));
5732                                 }
5733                      
5734                                 if (id == NULL)
5735                                 {
5736                                     env->ExceptionClear();
5737                      
5738                                     // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath op,
5739                                     //                                                java.lang.String               methodName,
5740                                     //                                                org.pegasus.jmpi.CIMArgument[] inArgs,
5741                                     //                                                org.pegasus.jmpi.CIMArgument[] outArgs)
5742 mark.hamzy      1.43                //        throws org.pegasus.jmpi.CIMException
5743                                     id = env->GetMethodID((jclass)pr.jProviderClass,
5744                                                           "invokeMethod",
5745                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5746                      
5747                                     if (id != NULL)
5748                                     {
5749                                         eMethodFound = METHOD_CIMMETHODPROVIDER;
5750                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER."<<PEGASUS_STD(endl));
5751                                     }
5752                                 }
5753                              }
5754                              else if (interfaceType == "JMPIExperimental")
5755                              {
5756                                 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5757                                 //                                                         org.pegasus.jmpi.CIMObjectPath    cop,
5758                                 //                                                         java.lang.String                  name,
5759                                 //                                                         java.util.Vector                  in,
5760                                 //                                                         java.util.Vector                  out)
5761                                 //        throws org.pegasus.jmpi.CIMException
5762                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5763 mark.hamzy      1.43                                  "invokeMethod",
5764                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5765                      
5766                                 if (id != NULL)
5767                                 {
5768                                     eMethodFound = METHOD_METHODPROVIDER2;
5769                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER2."<<PEGASUS_STD(endl));
5770                                 }
5771                      
5772                                 if (id == NULL)
5773                                 {
5774                                     env->ExceptionClear();
5775                      
5776                                     // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5777                                     //                                                org.pegasus.jmpi.CIMObjectPath    op,
5778                                     //                                                java.lang.String                  methodName,
5779                                     //                                                org.pegasus.jmpi.CIMArgument[]    inArgs,
5780                                     //                                                org.pegasus.jmpi.CIMArgument[]    outArgs)
5781                                     //        throws org.pegasus.jmpi.CIMException
5782                                     id = env->GetMethodID((jclass)pr.jProviderClass,
5783                                                           "invokeMethod",
5784 mark.hamzy      1.43                                      "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5785                      
5786                                     if (id != NULL)
5787                                     {
5788                                         eMethodFound = METHOD_CIMMETHODPROVIDER2;
5789                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER2."<<PEGASUS_STD(endl));
5790                                     }
5791                                 }
5792                              }
5793                      
5794                              if (id == NULL)
5795                              {
5796                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: No method found!"<<PEGASUS_STD(endl));
5797                      
5798                                 PEG_METHOD_EXIT();
5799                      
5800                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5801                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5802                                                                                    "Could not find a method for the provider based on InterfaceType."));
5803                              }
5804                      
5805 mark.hamzy      1.43         JMPIjvm::checkException(env);
5806                      
5807                              switch (eMethodFound)
5808                              {
5809                              case METHOD_CIMMETHODPROVIDER:
5810                              {
5811                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5812                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
5813                      
5814                                  JMPIjvm::checkException(env);
5815                      
5816                                  jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
5817                      
5818                                  JMPIjvm::checkException(env);
5819                      
5820                                  Uint32 m=request->inParameters.size();
5821                      
5822                                  jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
5823                      
5824                                  for (Uint32 i=0; i<m; i++) {
5825                                    CIMParamValue *parm    = new CIMParamValue(request->inParameters[i]);
5826 mark.hamzy      1.43               jint           jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
5827                                    jobject        jArg    = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
5828                      
5829                                    env->SetObjectArrayElement(jArIn,i,jArg);
5830                                  }
5831                      
5832                                  jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
5833                      
5834 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5835                      
5836 mark.hamzy      1.43             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
5837                                                                            id,
5838                                                                            jcop,
5839                                                                            jMethod,
5840                                                                            jArIn,
5841                                                                            jArOut);
5842                                  JMPIjvm::checkException(env);
5843 mark.hamzy      1.37 
5844 mark.hamzy      1.43             handler.processing();
5845 mark.hamzy      1.37 
5846 mark.hamzy      1.43             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
5847                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
5848 schuur          1.11 
5849 mark.hamzy      1.43             handler.deliver(*valueRet);
5850 schuur          1.1  
5851 mark.hamzy      1.43             for (int i=0; i<24; i++) {
5852                                      jobject jArg = env->GetObjectArrayElement(jArOut,i);
5853 mark.hamzy      1.25 
5854 mark.hamzy      1.43                 JMPIjvm::checkException(env);
5855 mark.hamzy      1.25 
5856 mark.hamzy      1.43                 if (jArg==NULL)
5857                                         break;
5858 mark.hamzy      1.25 
5859 mark.hamzy      1.43                 jint           jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
5860                                      CIMParamValue *p     = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
5861 mark.hamzy      1.25 
5862 mark.hamzy      1.43                 JMPIjvm::checkException(env);
5863 mark.hamzy      1.25 
5864 mark.hamzy      1.43                 handler.deliverParamValue(*p);
5865 mark.hamzy      1.25             }
5866 mark.hamzy      1.43 
5867                                  handler.complete();
5868                                  break;
5869 mark.hamzy      1.23         }
5870 mark.hamzy      1.25 
5871 mark.hamzy      1.43         case METHOD_CIMMETHODPROVIDER2:
5872                              {
5873                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5874                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5875 schuur          1.11 
5876 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5877                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
5878 mark.hamzy      1.25 
5879                                  JMPIjvm::checkException(env);
5880                      
5881 mark.hamzy      1.29             jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
5882                      
5883 mark.hamzy      1.23             JMPIjvm::checkException(env);
5884                      
5885 mark.hamzy      1.25             Uint32 m=request->inParameters.size();
5886                      
5887                                  jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
5888 mark.hamzy      1.29 
5889 mark.hamzy      1.25             for (Uint32 i=0; i<m; i++) {
5890 mark.hamzy      1.29               CIMParamValue *parm    = new CIMParamValue(request->inParameters[i]);
5891                                    jint           jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
5892                                    jobject        jArg    = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
5893 mark.hamzy      1.23 
5894 mark.hamzy      1.25               env->SetObjectArrayElement(jArIn,i,jArg);
5895                                  }
5896 mark.hamzy      1.23 
5897 mark.hamzy      1.25             jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
5898 mark.hamzy      1.23 
5899 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5900                      
5901 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
5902                                                                            id,
5903 mark.hamzy      1.43                                                       joc,
5904 mark.hamzy      1.29                                                       jcop,
5905                                                                            jMethod,
5906                                                                            jArIn,
5907                                                                            jArOut);
5908 mark.hamzy      1.23             JMPIjvm::checkException(env);
5909                      
5910 mark.hamzy      1.43             if (joc)
5911                                  {
5912                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5913                      
5914                                     JMPIjvm::checkException(env);
5915                                  }
5916                      
5917 mark.hamzy      1.23             handler.processing();
5918                      
5919 mark.hamzy      1.29             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
5920                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
5921 mark.hamzy      1.23 
5922 mark.hamzy      1.29             handler.deliver(*valueRet);
5923 schuur          1.13 
5924 mark.hamzy      1.25             for (int i=0; i<24; i++) {
5925 mark.hamzy      1.29                 jobject jArg = env->GetObjectArrayElement(jArOut,i);
5926                      
5927 mark.hamzy      1.23                 JMPIjvm::checkException(env);
5928 schuur          1.13 
5929 mark.hamzy      1.29                 if (jArg==NULL)
5930                                         break;
5931 schuur          1.13 
5932 mark.hamzy      1.29                 jint           jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
5933                                      CIMParamValue *p     = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
5934 schuur          1.13 
5935 mark.hamzy      1.23                 JMPIjvm::checkException(env);
5936 schuur          1.1  
5937 mark.hamzy      1.25                 handler.deliverParamValue(*p);
5938 mark.hamzy      1.23             }
5939 schuur          1.1  
5940 mark.hamzy      1.23             handler.complete();
5941 mark.hamzy      1.25             break;
5942 mark.hamzy      1.23         }
5943 schuur          1.11 
5944 mark.hamzy      1.43         case METHOD_METHODPROVIDER:
5945                              {
5946                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5947                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
5948                      
5949                                  JMPIjvm::checkException(env);
5950                      
5951                                  jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
5952                      
5953                                  JMPIjvm::checkException(env);
5954                      
5955                                  jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
5956                      
5957                                  JMPIjvm::checkException(env);
5958                      
5959                                  for (int i=0,m=request->inParameters.size(); i<m; i++)
5960                                  {
5961                                      const CIMParamValue &parm  = request->inParameters[i];
5962                                      const CIMValue       v     = parm.getValue();
5963                                      CIMProperty         *p     = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
5964                                      jint                 jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
5965 mark.hamzy      1.43                 jobject              jp    = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
5966                      
5967                                      env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
5968                                   }
5969                      
5970                                  jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
5971                                  JMPIjvm::checkException(env);
5972                      
5973 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5974                      
5975 mark.hamzy      1.43             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
5976                                                                            id,
5977                                                                            jcop,
5978                                                                            jMethod,
5979                                                                            jVecIn,
5980                                                                            jVecOut);
5981                                  JMPIjvm::checkException(env);
5982                      
5983                                  handler.processing();
5984                      
5985                                  jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
5986                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
5987                      
5988                                  handler.deliver(*valueRet);
5989                      
5990                                  for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
5991                                  {
5992                                      JMPIjvm::checkException(env);
5993                      
5994                                      jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
5995                      
5996 mark.hamzy      1.43                 JMPIjvm::checkException(env);
5997                      
5998                                      jint         jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
5999                                      CIMProperty *p     = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
6000                      
6001                                      JMPIjvm::checkException(env);
6002                      
6003                                      handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6004                                  }
6005                      
6006                                  handler.complete();
6007                                  break;
6008                              }
6009                      
6010                              case METHOD_METHODPROVIDER2:
6011 mark.hamzy      1.25         {
6012 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6013                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6014                      
6015 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6016                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6017 mark.hamzy      1.25 
6018                                  JMPIjvm::checkException(env);
6019                      
6020 mark.hamzy      1.29             jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6021                      
6022 mark.hamzy      1.25             JMPIjvm::checkException(env);
6023                      
6024 mark.hamzy      1.29             jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
6025                      
6026 mark.hamzy      1.25             JMPIjvm::checkException(env);
6027                      
6028 mark.hamzy      1.29             for (int i=0,m=request->inParameters.size(); i<m; i++)
6029                                  {
6030                                      const CIMParamValue &parm  = request->inParameters[i];
6031                                      const CIMValue       v     = parm.getValue();
6032                                      CIMProperty         *p     = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
6033                                      jint                 jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
6034                                      jobject              jp    = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
6035 mark.hamzy      1.23 
6036 mark.hamzy      1.29                 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
6037 mark.hamzy      1.25              }
6038 mark.hamzy      1.23 
6039 mark.hamzy      1.25             jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
6040                                  JMPIjvm::checkException(env);
6041 mark.hamzy      1.23 
6042 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6043                      
6044 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6045                                                                            id,
6046 mark.hamzy      1.43                                                       joc,
6047 mark.hamzy      1.29                                                       jcop,
6048                                                                            jMethod,
6049                                                                            jVecIn,
6050                                                                            jVecOut);
6051 mark.hamzy      1.23             JMPIjvm::checkException(env);
6052                      
6053 mark.hamzy      1.43             if (joc)
6054                                  {
6055                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6056                      
6057                                     JMPIjvm::checkException(env);
6058                                  }
6059                      
6060 mark.hamzy      1.23             handler.processing();
6061 schuur          1.1  
6062 mark.hamzy      1.29             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6063                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
6064 mark.hamzy      1.23 
6065 mark.hamzy      1.29             handler.deliver(*valueRet);
6066 mark.hamzy      1.23 
6067 mark.hamzy      1.29             for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
6068                                  {
6069 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6070 schuur          1.13 
6071 mark.hamzy      1.29                 jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
6072                      
6073 mark.hamzy      1.25                 JMPIjvm::checkException(env);
6074 schuur          1.13 
6075 mark.hamzy      1.29                 jint         jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
6076                                      CIMProperty *p     = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
6077 schuur          1.13 
6078 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6079 schuur          1.13 
6080 mark.hamzy      1.25                 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6081                                  }
6082                      
6083                                  handler.complete();
6084                                  break;
6085                              }
6086 mark.hamzy      1.23 
6087 mark.hamzy      1.25         case METHOD_UNKNOWN:
6088                              {
6089                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: should not be here!"<<PEGASUS_STD(endl));
6090                                  break;
6091                              }
6092 mark.hamzy      1.23         }
6093 schuur          1.1      }
6094                          HandlerCatch(handler);
6095 schuur          1.11 
6096                          if (env) JMPIjvm::detachThread();
6097                      
6098 schuur          1.1      PEG_METHOD_EXIT();
6099                      
6100 schuur          1.11     return(response);
6101 schuur          1.1  }
6102 mark.hamzy      1.23 
6103 schuur          1.1  int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
6104                                                        String& providerName, String& location)
6105                      {
6106                          Uint32 pos = pInstance.findProperty(CIMName ("Name"));
6107                          pInstance.getProperty(pos).getValue().get(providerName);
6108                      
6109                          pos = pmInstance.findProperty(CIMName ("Location"));
6110                          pmInstance.getProperty(pos).getValue().get(location);
6111                          return 0;
6112                      }
6113                      
6114 mark.hamzy      1.52 WQLSelectStatement *
6115                      newSelectExp (String& query,
6116                                    String& queryLanguage)
6117 mark.hamzy      1.44 {
6118 mark.hamzy      1.52    WQLSelectStatement *stmt = new WQLSelectStatement (queryLanguage, query);
6119 mark.hamzy      1.44 
6120 mark.hamzy      1.52    try
6121 mark.hamzy      1.44    {
6122 mark.hamzy      1.52       WQLParser::parse (query, *stmt);
6123 mark.hamzy      1.44    }
6124 mark.hamzy      1.52    catch (const Exception &e)
6125 mark.hamzy      1.44    {
6126 mark.hamzy      1.52       cerr << "Error: newSelectExp caught: " << e.getMessage () << endl;
6127 mark.hamzy      1.44    }
6128                      
6129 mark.hamzy      1.52    return stmt;
6130 mark.hamzy      1.44 }
6131                      
6132 schuur          1.1  Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
6133                      {
6134 konrad.r        1.15     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
6135 schuur          1.1  
6136 mark.hamzy      1.23     HandlerIntroInd(CreateSubscription,message,request,response,handler);
6137                      
6138 mark.hamzy      1.25     typedef enum {
6139                             METHOD_UNKNOWN = 0,
6140 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
6141                             METHOD_EVENTPROVIDER2,
6142 mark.hamzy      1.25     } METHOD_VERSION;
6143 mark.hamzy      1.44     METHOD_VERSION  eMethodFound = METHOD_UNKNOWN;
6144                          JNIEnv         *env          = NULL;
6145 mark.hamzy      1.25 
6146 schuur          1.1      try {
6147 mark.hamzy      1.44         String               fileName,
6148                                                   providerName,
6149 mark.hamzy      1.25                              providerLocation;
6150                              CIMInstance          req_provider,
6151                                                   req_providerModule;
6152 mark.hamzy      1.44         ProviderIdContainer  pidc               = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
6153 mark.hamzy      1.25 
6154 mark.hamzy      1.44         req_provider       = pidc.getProvider ();
6155                              req_providerModule = pidc.getModule ();
6156 mark.hamzy      1.25 
6157 mark.hamzy      1.44         LocateIndicationProviderNames (req_provider,
6158                                                             req_providerModule,
6159                                                             providerName,
6160                                                             providerLocation);
6161                      
6162                              fileName = resolveFileName (providerLocation);
6163                      
6164                              Logger::put (Logger::STANDARD_LOG,
6165                                           System::CIMSERVER,
6166                                           Logger::TRACE,
6167                                           "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
6168                                           System::getHostName(),
6169                                           request->nameSpace.getString(),
6170                                           providerName);
6171                      
6172                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "
6173                                                   <<System::getHostName()
6174                                                   <<", namespace = "
6175                                                   <<request->nameSpace.getString()
6176                                                   <<", providername = "
6177                                                   <<providerName
6178 mark.hamzy      1.44                              <<", fileName = "
6179                                                   <<fileName
6180                                                   <<PEGASUS_STD(endl));
6181 schuur          1.1  
6182                              // get cached or load new provider module
6183 mark.hamzy      1.44         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6184                                                                                               providerName,
6185 mark.hamzy      1.43                                                                          String::EMPTY);
6186 schuur          1.1  
6187 carolann.graves 1.21         //
6188                              //  Save the provider instance from the request
6189                              //
6190                              ph.GetProvider ().setProviderInstance (req_provider);
6191                      
6192 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
6193 mark.hamzy      1.25 
6194 mark.hamzy      1.44         //
6195                              //  Increment count of current subscriptions for this provider
6196                              //
6197                              pr.testIfZeroAndIncrementSubscriptions ();
6198 schuur          1.1  
6199 mark.hamzy      1.44         SubscriptionFilterConditionContainer  sub_cntr = request->operationContext.get (SubscriptionFilterConditionContainer::NAME);
6200                              indProvRecord                        *prec     = NULL;
6201                              bool                                  fNewPrec = false;
6202 schuur          1.1  
6203 mark.hamzy      1.25         {
6204 mark.hamzy      1.44            AutoMutex lock (mutexProvTab);
6205                      
6206                                 provTab.lookup (providerName, prec);
6207 schuur          1.12 
6208 mark.hamzy      1.44            if (!prec)
6209                                 {
6210                                     fNewPrec = true;
6211 schuur          1.1  
6212 mark.hamzy      1.44                prec = new indProvRecord ();
6213 schuur          1.1  
6214 mark.hamzy      1.44                // convert arguments
6215                                     prec->ctx = new OperationContext ();
6216 schuur          1.12 
6217 mark.hamzy      1.44                prec->ctx->insert (request->operationContext.get (IdentityContainer::NAME));
6218                                     prec->ctx->insert (request->operationContext.get (AcceptLanguageListContainer::NAME));
6219                                     prec->ctx->insert (request->operationContext.get (ContentLanguageListContainer::NAME));
6220                                     prec->ctx->insert (request->operationContext.get (SubscriptionInstanceContainer::NAME));
6221                                     prec->ctx->insert (request->operationContext.get (SubscriptionFilterConditionContainer::NAME));
6222 konrad.r        1.22 
6223 mark.hamzy      1.44                prec->enabled = true;
6224 konrad.r        1.22 
6225 mark.hamzy      1.44                prec->handler = new EnableIndicationsResponseHandler (0,
6226                                                                                           0,
6227                                                                                           req_provider,
6228                                                                                           _indicationCallback,
6229                                                                                           _responseChunkCallback);
6230 konrad.r        1.22 
6231 mark.hamzy      1.44                DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to provTab "<<providerName<<PEGASUS_STD(endl));
6232 schuur          1.1  
6233 mark.hamzy      1.44                provTab.insert (providerName, prec);
6234                                 }
6235                              }
6236 schuur          1.1  
6237 mark.hamzy      1.44         {
6238                                 AutoMutex lock (prec->mutex);
6239 schuur          1.1  
6240 mark.hamzy      1.44            prec->count++;
6241 schuur          1.1          }
6242                      
6243 mark.hamzy      1.44         // Add a selection record for JNI CIMOMHandle deliverEvent calls
6244                              indSelectRecord *srec = new indSelectRecord ();
6245 mark.hamzy      1.29 
6246                              {
6247 mark.hamzy      1.44            srec->query         = request->query;
6248                                 srec->queryLanguage = sub_cntr.getQueryLanguage ();
6249                                 srec->propertyList  = request->propertyList;
6250                      
6251                                 CIMOMHandleQueryContext *qContext = new CIMOMHandleQueryContext (CIMNamespaceName (request->nameSpace.getString ()),
6252                                                                                                  *pr._cimom_handle);
6253                                 srec->qContext = qContext;
6254                      
6255                                 CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6256                      
6257                                 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
6258 mark.hamzy      1.29 
6259 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
6260 mark.hamzy      1.29 
6261 mark.hamzy      1.44            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to selxTab "<<sPath.toString ()<<PEGASUS_STD(endl));
6262                      
6263                                 selxTab.insert (sPath.toString (), srec);
6264                      
6265 mark.hamzy      1.52            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: For selxTab "<<sPath.toString ()<<", srec = "<<PEGASUS_STD(hex)<<(int)srec<<PEGASUS_STD(dec)<<", qContext = "<<PEGASUS_STD(hex)<<(int)qContext<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
6266 schuur          1.1          }
6267                      
6268 mark.hamzy      1.44         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createSubscriptionRequest: " + pr.getName());
6269                      
6270                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
6271                      
6272 mark.hamzy      1.25         JvmVector *jv = 0;
6273                      
6274                              env = JMPIjvm::attachThread(&jv);
6275                      
6276 mark.hamzy      1.37         if (!env)
6277                              {
6278                                  PEG_METHOD_EXIT();
6279                      
6280                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6281                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6282                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6283                              }
6284                      
6285 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
6286                      
6287 mark.hamzy      1.43         jmethodID id               = NULL;
6288                              String    interfaceType;
6289                              String    interfaceVersion;
6290                      
6291 mark.hamzy      1.44         getInterfaceType (pidc,
6292 mark.hamzy      1.43                           interfaceType,
6293                                                interfaceVersion);
6294                      
6295                              if (interfaceType == "JMPI")
6296                              {
6297                                 // public void activateFilter (org.pegasus.jmpi.SelectExp     filter,
6298                                 //                             java.lang.String               eventType,
6299                                 //                             org.pegasus.jmpi.CIMObjectPath classPath,
6300                                 //                             boolean                        firstActivation)
6301                                 //        throws org.pegasus.jmpi.CIMException
6302 mark.hamzy      1.44            id = env->GetMethodID ((jclass)pr.jProviderClass,
6303                                                        "activateFilter",
6304                                                        "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6305 mark.hamzy      1.43 
6306                                 if (id != NULL)
6307                                 {
6308                                     eMethodFound = METHOD_EVENTPROVIDER;
6309                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6310                                 }
6311                              }
6312                              else if (interfaceType == "JMPIExperimental")
6313                              {
6314                                 // public void activateFilter (org.pegasus.jmpi.OperationContext oc,
6315                                 //                             org.pegasus.jmpi.SelectExp        filter,
6316                                 //                             java.lang.String                  eventType,
6317                                 //                             org.pegasus.jmpi.CIMObjectPath    classPath,
6318                                 //                             boolean                           firstActivation)
6319                                 //        throws org.pegasus.jmpi.CIMException
6320 mark.hamzy      1.44            id = env->GetMethodID ((jclass)pr.jProviderClass,
6321                                                        "activateFilter",
6322                                                        "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6323 mark.hamzy      1.25 
6324 mark.hamzy      1.43            if (id != NULL)
6325                                 {
6326                                     eMethodFound = METHOD_EVENTPROVIDER2;
6327                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6328                                 }
6329                              }
6330 schuur          1.12 
6331 mark.hamzy      1.43         if (id == NULL)
6332 mark.hamzy      1.25         {
6333 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6334                      
6335                                 PEG_METHOD_EXIT();
6336                      
6337                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6338                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6339                                                                                    "Could not find a method for the provider based on InterfaceType."));
6340 mark.hamzy      1.25         }
6341 mark.hamzy      1.23 
6342                              JMPIjvm::checkException(env);
6343                      
6344 mark.hamzy      1.25         switch (eMethodFound)
6345                              {
6346 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
6347                              {
6348 mark.hamzy      1.52             WQLSelectStatement *stmt       = newSelectExp (srec->query,
6349                                                                                 srec->queryLanguage);
6350 mark.hamzy      1.58             jint                jStmtRef   = DEBUG_ConvertCToJava (WQLSelectStatement *, jint, stmt);
6351 mark.hamzy      1.52             jobject             jSelectExp = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jStmtRef);
6352 mark.hamzy      1.43 
6353                                  JMPIjvm::checkException(env);
6354                      
6355 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6356 mark.hamzy      1.43 
6357                                  JMPIjvm::checkException(env);
6358                      
6359 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6360                                                                              request->nameSpace,
6361                                                                              request->classNames[0]);
6362                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6363                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6364 mark.hamzy      1.43 
6365                                  JMPIjvm::checkException(env);
6366                      
6367 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6368                      
6369 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6370                                                       id,
6371 mark.hamzy      1.52                                  jSelectExp,
6372 mark.hamzy      1.44                                  jType,
6373                                                       jcop,
6374                                                       (jboolean)fNewPrec);
6375 mark.hamzy      1.43 
6376                                  JMPIjvm::checkException(env);
6377                                  break;
6378                              }
6379                      
6380                              case METHOD_EVENTPROVIDER2:
6381 mark.hamzy      1.25         {
6382 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6383                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6384                      
6385 mark.hamzy      1.52             WQLSelectStatement *stmt       = newSelectExp (srec->query,
6386                                                                                 srec->queryLanguage);
6387 mark.hamzy      1.58             jint                jStmtRef   = DEBUG_ConvertCToJava (WQLSelectStatement *, jint, stmt);
6388 mark.hamzy      1.52             jobject             jSelectExp = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jStmtRef);
6389 mark.hamzy      1.25 
6390                                  JMPIjvm::checkException(env);
6391                      
6392 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6393 schuur          1.12 
6394 mark.hamzy      1.25             JMPIjvm::checkException(env);
6395 schuur          1.1  
6396 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6397                                                                              request->nameSpace,
6398                                                                              request->classNames[0]);
6399                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6400                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6401 schuur          1.1  
6402 mark.hamzy      1.25             JMPIjvm::checkException(env);
6403 schuur          1.1  
6404 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6405                      
6406 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6407                                                       id,
6408                                                       joc,
6409 mark.hamzy      1.52                                  jSelectExp,
6410 mark.hamzy      1.44                                  jType,
6411                                                       jcop,
6412                                                       (jboolean)fNewPrec);
6413 schuur          1.12 
6414 mark.hamzy      1.25             JMPIjvm::checkException(env);
6415 schuur          1.1  
6416 mark.hamzy      1.43             if (joc)
6417                                  {
6418                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6419                      
6420                                     JMPIjvm::checkException(env);
6421                                  }
6422 mark.hamzy      1.25             break;
6423 carolann.graves 1.21         }
6424                      
6425 mark.hamzy      1.25         case METHOD_UNKNOWN:
6426                              {
6427                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6428                                  break;
6429                              }
6430                              }
6431 schuur          1.1      }
6432                          HandlerCatch(handler);
6433 schuur          1.12 
6434 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
6435                      
6436 schuur          1.1      PEG_METHOD_EXIT();
6437                      
6438                          return(response);
6439                      }
6440                      
6441                      Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
6442                      {
6443                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
6444                      
6445 mark.hamzy      1.23     HandlerIntroInd(DeleteSubscription,message,request,response,handler);
6446                      
6447 mark.hamzy      1.25     typedef enum {
6448                             METHOD_UNKNOWN = 0,
6449 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
6450                             METHOD_EVENTPROVIDER2,
6451 mark.hamzy      1.25     } METHOD_VERSION;
6452 mark.hamzy      1.44     METHOD_VERSION           eMethodFound = METHOD_UNKNOWN;
6453                          JNIEnv                  *env          = NULL;
6454                          bool                     fFreePrec    = false;
6455                          indProvRecord           *prec         = NULL;
6456                          indSelectRecord         *srec         = NULL;
6457 mark.hamzy      1.25 
6458 schuur          1.1      try {
6459 mark.hamzy      1.44         String              fileName,
6460                                                  providerName,
6461 mark.hamzy      1.25                             providerLocation;
6462                              CIMInstance         req_provider,
6463                                                  req_providerModule;
6464                              ProviderIdContainer pidc               = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
6465                      
6466 mark.hamzy      1.44         req_provider       = pidc.getProvider ();
6467                              req_providerModule = pidc.getModule ();
6468                      
6469                              LocateIndicationProviderNames (req_provider,
6470                                                             req_providerModule,
6471                                                             providerName,
6472                                                             providerLocation);
6473                      
6474                              fileName = resolveFileName (providerLocation);
6475                      
6476                              Logger::put (Logger::STANDARD_LOG,
6477                                           System::CIMSERVER,
6478                                           Logger::TRACE,
6479                                           "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
6480                                           System::getHostName(),
6481                                           request->nameSpace.getString(),
6482                                           providerName);
6483                      
6484                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "
6485                                                   <<System::getHostName()
6486                                                   <<", namespace = "
6487 mark.hamzy      1.44                              <<request->nameSpace.getString()
6488                                                   <<", providername = "
6489                                                   <<providerName
6490                                                   <<", fileName = "
6491                                                   <<fileName
6492                                                   <<PEGASUS_STD(endl));
6493 se.gupta        1.9  
6494 mark.hamzy      1.44         // get cached or load new provider module
6495                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6496                                                                                               providerName,
6497                                                                                               String::EMPTY);
6498 schuur          1.1  
6499 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
6500                      
6501                              {
6502                                 AutoMutex lock (mutexProvTab);
6503                      
6504                                 provTab.lookup (providerName, prec);
6505                              }
6506 schuur          1.1  
6507 mark.hamzy      1.44         {
6508                                 AutoMutex lock (prec->mutex);
6509 mark.hamzy      1.23 
6510 mark.hamzy      1.44            if (--prec->count <= 0)
6511                                 {
6512                                     DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing provTab "<<providerName<<PEGASUS_STD(endl));
6513 schuur          1.1  
6514 mark.hamzy      1.44                provTab.remove (providerName);
6515 schuur          1.1  
6516 mark.hamzy      1.44                fFreePrec = true;
6517                                 }
6518                              }
6519 mark.hamzy      1.25 
6520                              {
6521 mark.hamzy      1.44            CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6522                      
6523                                 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
6524 schuur          1.1  
6525 mark.hamzy      1.44            String sPathString = sPath.toString ();
6526 mark.hamzy      1.25 
6527 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
6528 schuur          1.1  
6529 mark.hamzy      1.44            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing selxTab "<<sPathString<<PEGASUS_STD(endl));
6530 konrad.r        1.22 
6531 mark.hamzy      1.44            selxTab.lookup (sPathString, srec);
6532 schuur          1.1  
6533 mark.hamzy      1.52            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: For selxTab "<<sPathString<<", srec = "<<PEGASUS_STD(hex)<<(int)srec<<PEGASUS_STD(dec)<<", qContext = "<<PEGASUS_STD(hex)<<(int)srec->qContext<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
6534 schuur          1.1  
6535 mark.hamzy      1.44            selxTab.remove (sPathString);
6536                              }
6537 schuur          1.1  
6538 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteSubscriptionRequest: " + pr.getName());
6539 schuur          1.1  
6540 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
6541 schuur          1.1  
6542 mark.hamzy      1.25         JvmVector *jv = 0;
6543                      
6544                              env = JMPIjvm::attachThread(&jv);
6545                      
6546 mark.hamzy      1.37         if (!env)
6547                              {
6548                                  PEG_METHOD_EXIT();
6549                      
6550                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6551                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6552                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6553                              }
6554                      
6555 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
6556                      
6557 mark.hamzy      1.43         jmethodID id               = NULL;
6558                              String    interfaceType;
6559                              String    interfaceVersion;
6560                      
6561                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
6562                                                interfaceType,
6563                                                interfaceVersion);
6564                      
6565                              if (interfaceType == "JMPI")
6566                              {
6567                                 // public void deActivateFilter (org.pegasus.jmpi.SelectExp    filter,
6568                                 //                              java.lang.String               eventType,
6569                                 //                              org.pegasus.jmpi.CIMObjectPath classPath,
6570                                 //                              boolean                        lastActivation)
6571                                 //        throws org.pegasus.jmpi.CIMException
6572                                 id = env->GetMethodID((jclass)pr.jProviderClass,
6573                                                       "deActivateFilter",
6574                                                       "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6575                      
6576                                 if (id != NULL)
6577                                 {
6578 mark.hamzy      1.43                eMethodFound = METHOD_EVENTPROVIDER;
6579                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6580                                 }
6581                              }
6582                              else if (interfaceType == "JMPIExperimental")
6583                              {
6584                                 // public void deActivateFilter (org.pegasus.jmpi.OperationContext oc,
6585                                 //                               org.pegasus.jmpi.SelectExp        filter,
6586                                 //                               java.lang.String                  eventType,
6587                                 //                               org.pegasus.jmpi.CIMObjectPath    classPath,
6588                                 //                               boolean                           lastActivation)
6589                                 //        throws org.pegasus.jmpi.CIMException
6590                                 id = env->GetMethodID((jclass)pr.jProviderClass,
6591                                                       "deActivateFilter",
6592 mark.hamzy      1.44                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6593 mark.hamzy      1.25 
6594 mark.hamzy      1.43            if (id != NULL)
6595                                 {
6596                                     eMethodFound = METHOD_EVENTPROVIDER2;
6597                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6598                                 }
6599                              }
6600 schuur          1.12 
6601 mark.hamzy      1.43         if (id == NULL)
6602 mark.hamzy      1.25         {
6603 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6604                      
6605                                 PEG_METHOD_EXIT();
6606                      
6607                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6608                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6609                                                                                    "Could not find a method for the provider based on InterfaceType."));
6610 mark.hamzy      1.25         }
6611 mark.hamzy      1.23 
6612                              JMPIjvm::checkException(env);
6613                      
6614 mark.hamzy      1.25         switch (eMethodFound)
6615                              {
6616 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
6617                              {
6618 mark.hamzy      1.52             WQLSelectStatement *stmt       = newSelectExp (srec->query,
6619                                                                                 srec->queryLanguage);
6620 mark.hamzy      1.58             jint                jStmtRef   = DEBUG_ConvertCToJava (WQLSelectStatement *, jint, stmt);
6621 mark.hamzy      1.52             jobject             jSelectExp = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jStmtRef);
6622 mark.hamzy      1.43 
6623                                  JMPIjvm::checkException(env);
6624                      
6625 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6626 mark.hamzy      1.43 
6627                                  JMPIjvm::checkException(env);
6628                      
6629 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6630                                                                              request->nameSpace,
6631                                                                              request->classNames[0]);
6632                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6633                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6634 mark.hamzy      1.43 
6635                                  JMPIjvm::checkException(env);
6636                      
6637 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6638                      
6639 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6640                                                       id,
6641 mark.hamzy      1.52                                  jSelectExp,
6642 mark.hamzy      1.44                                  jType,
6643                                                       jcop,
6644                                                       (jboolean)fFreePrec);
6645 mark.hamzy      1.43 
6646                                  JMPIjvm::checkException(env);
6647                                  break;
6648                              }
6649                      
6650                              case METHOD_EVENTPROVIDER2:
6651 mark.hamzy      1.25         {
6652 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6653                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6654                      
6655 mark.hamzy      1.52             WQLSelectStatement *stmt       = newSelectExp (srec->query,
6656                                                                                 srec->queryLanguage);
6657 mark.hamzy      1.58             jint                jStmtRef   = DEBUG_ConvertCToJava (WQLSelectStatement *, jint, stmt);
6658 mark.hamzy      1.52             jobject             jSelectExp = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jStmtRef);
6659 mark.hamzy      1.25 
6660                                  JMPIjvm::checkException(env);
6661                      
6662 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6663 schuur          1.12 
6664 mark.hamzy      1.25             JMPIjvm::checkException(env);
6665 schuur          1.12 
6666 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6667                                                                              request->nameSpace,
6668                                                                              request->classNames[0]);
6669                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6670                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6671 schuur          1.1  
6672 mark.hamzy      1.25             JMPIjvm::checkException(env);
6673 schuur          1.1  
6674 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6675                      
6676 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6677                                                       id,
6678                                                       joc,
6679 mark.hamzy      1.52                                  jSelectExp,
6680 mark.hamzy      1.44                                  jType,
6681                                                       jcop,
6682                                                       (jboolean)fFreePrec);
6683 schuur          1.1  
6684 mark.hamzy      1.25             JMPIjvm::checkException(env);
6685 schuur          1.1  
6686 mark.hamzy      1.43             if (joc)
6687                                  {
6688                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6689                      
6690                                     JMPIjvm::checkException(env);
6691                                  }
6692 mark.hamzy      1.25             break;
6693                              }
6694 schuur          1.12 
6695 mark.hamzy      1.25         case METHOD_UNKNOWN:
6696                              {
6697                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6698                                  break;
6699                              }
6700                              }
6701 mark.hamzy      1.44 
6702                              //
6703                              //  Decrement count of current subscriptions for this provider
6704                              //
6705                              pr.decrementSubscriptionsAndTestIfZero ();
6706 schuur          1.1      }
6707                          HandlerCatch(handler);
6708 schuur          1.12 
6709 mark.hamzy      1.44     if (srec)
6710                          {
6711                             delete srec->qContext;
6712                          }
6713                          delete srec;
6714                      
6715                          if (fFreePrec)
6716                          {
6717                             delete prec->ctx;
6718                             delete prec->handler;
6719                             delete prec;
6720                          }
6721                      
6722 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
6723                      
6724 schuur          1.1      PEG_METHOD_EXIT();
6725                      
6726                          return(response);
6727                      }
6728                      
6729                      Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
6730                      {
6731                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
6732                      
6733                          CIMDisableModuleRequestMessage * request =
6734                              dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
6735                      
6736                          PEGASUS_ASSERT(request != 0);
6737                      
6738                          // get provider module name
6739                          String moduleName;
6740                          CIMInstance mInstance = request->providerModule;
6741                          Uint32 pos = mInstance.findProperty(CIMName ("Name"));
6742                      
6743                          if(pos != PEG_NOT_FOUND)
6744                          {
6745 schuur          1.1          mInstance.getProperty(pos).getValue().get(moduleName);
6746                          }
6747                      
6748                          Boolean disableProviderOnly = request->disableProviderOnly;
6749                      
6750                          Array<Uint16> operationalStatus;
6751 kumpf           1.2      // Assume success.
6752 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
6753 schuur          1.1  
6754 kumpf           1.2      //
6755 schuur          1.1      // Unload providers
6756 kumpf           1.2      //
6757 schuur          1.1      Array<CIMInstance> _pInstances = request->providers;
6758                      
6759                          CIMDisableModuleResponseMessage * response =
6760                              new CIMDisableModuleResponseMessage(
6761                              request->messageId,
6762                              CIMException(),
6763                              request->queueIds.copyAndPop(),
6764                              operationalStatus);
6765                      
6766                          PEGASUS_ASSERT(response != 0);
6767                      
6768                          //
6769                          //  Set HTTP method in response from request
6770                          //
6771                          response->setHttpMethod (request->getHttpMethod ());
6772                      
6773                          PEG_METHOD_EXIT();
6774                      
6775                          return(response);
6776                      }
6777                      
6778 schuur          1.1  Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
6779                      {
6780                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
6781                      
6782                          CIMEnableModuleRequestMessage * request =
6783                              dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
6784                      
6785                          PEGASUS_ASSERT(request != 0);
6786                      
6787                          Array<Uint16> operationalStatus;
6788 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
6789 schuur          1.1  
6790                          CIMEnableModuleResponseMessage * response =
6791                              new CIMEnableModuleResponseMessage(
6792                              request->messageId,
6793                              CIMException(),
6794                              request->queueIds.copyAndPop(),
6795                              operationalStatus);
6796                      
6797                          PEGASUS_ASSERT(response != 0);
6798                      
6799                          //  Set HTTP method in response from request
6800                          response->setHttpMethod (request->getHttpMethod ());
6801                      
6802                          PEG_METHOD_EXIT();
6803                      
6804                          return(response);
6805                      }
6806                      
6807                      Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
6808                      {
6809                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
6810 schuur          1.1  
6811                          CIMStopAllProvidersRequestMessage * request =
6812                              dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
6813                      
6814                          PEGASUS_ASSERT(request != 0);
6815                      
6816                          CIMStopAllProvidersResponseMessage * response =
6817                              new CIMStopAllProvidersResponseMessage(
6818                              request->messageId,
6819                              CIMException(),
6820                              request->queueIds.copyAndPop());
6821                      
6822                          PEGASUS_ASSERT(response != 0);
6823                      
6824                          //  Set HTTP method in response from request
6825                          response->setHttpMethod (request->getHttpMethod ());
6826                      
6827                          // tell the provider manager to shutdown all the providers
6828                          providerManager.shutdownAllProviders();
6829                      
6830                          PEG_METHOD_EXIT();
6831 schuur          1.1  
6832                          return(response);
6833                      }
6834                      
6835 kumpf           1.4  Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
6836                      {
6837                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
6838                      
6839                          HandlerIntroInit(InitializeProvider,message,request,response,handler);
6840                      
6841                          try
6842                          {
6843                              // resolve provider name
6844 mark.hamzy      1.23         ProviderName name = _resolveProviderName(
6845                                 request->operationContext.get(ProviderIdContainer::NAME));
6846 kumpf           1.4  
6847                              // get cached or load new provider module
6848 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
6849                                                                                               name.getLogicalName(),
6850                                                                                               String::EMPTY);
6851 kumpf           1.4  
6852                          }
6853                          HandlerCatch(handler);
6854                      
6855                          PEG_METHOD_EXIT();
6856                      
6857                          return(response);
6858                      }
6859                      
6860 mark.hamzy      1.25 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest (const Message * message)
6861 carolann.graves 1.21 {
6862                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
6863                           "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
6864                      
6865                          CIMSubscriptionInitCompleteRequestMessage * request =
6866                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
6867                                  (const_cast <Message *> (message));
6868                      
6869                          PEGASUS_ASSERT (request != 0);
6870                      
6871                          CIMSubscriptionInitCompleteResponseMessage * response =
6872                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
6873                                  (request->buildResponse ());
6874                      
6875                          PEGASUS_ASSERT (response != 0);
6876                      
6877                          //
6878                          //  Set indicator
6879                          //
6880                          _subscriptionInitComplete = true;
6881                      
6882 carolann.graves 1.21     //
6883                          //  For each provider that has at least one subscription, call
6884                          //  provider's enableIndications method
6885                          //
6886                          Array <JMPIProvider *> enableProviders;
6887 mark.hamzy      1.44 
6888 carolann.graves 1.21     enableProviders = providerManager.getIndicationProvidersToEnable ();
6889                      
6890                          Uint32 numProviders = enableProviders.size ();
6891 mark.hamzy      1.44 
6892                          DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: numProviders = "<<numProviders<<PEGASUS_STD(endl));
6893                      
6894                      #if 0
6895 carolann.graves 1.21     for (Uint32 i = 0; i < numProviders; i++)
6896                          {
6897                              try
6898                              {
6899                                  CIMInstance provider;
6900 mark.hamzy      1.44 
6901                                  provider = enableProviders[i]->getProviderInstance ();
6902                      
6903                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: name = "<<enableProviders[i]->getName ()<<PEGASUS_STD(endl));
6904 carolann.graves 1.21 
6905                                  //
6906                                  //  Get cached or load new provider module
6907                                  //
6908 mark.hamzy      1.44             JMPIProvider::OpProviderHolder  ph   = providerManager.getProvider (enableProviders[i]->getModule ()->getFileName (),
6909                                                                                                      enableProviders[i]->getName ());
6910                                  indProvRecord                  *prec = NULL;
6911                      
6912                                  {
6913                                     AutoMutex lock (mutexProvTab);
6914                      
6915                                     provTab.lookup (enableProviders[i]->getName (), prec);
6916 carolann.graves 1.21             }
6917                              }
6918                              catch (CIMException & e)
6919                              {
6920                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6921                                      "CIMException: " + e.getMessage ());
6922                              }
6923                              catch (Exception & e)
6924                              {
6925                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6926                                      "Exception: " + e.getMessage ());
6927                              }
6928                              catch(...)
6929                              {
6930                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6931                                      "Unknown error in handleSubscriptionInitCompleteRequest");
6932                              }
6933                          }
6934 mark.hamzy      1.44 #endif
6935 carolann.graves 1.21 
6936                          PEG_METHOD_EXIT ();
6937                          return (response);
6938                      }
6939                      
6940 schuur          1.1  Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
6941                      {
6942 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
6943                      
6944 konrad.r        1.16     CIMRequestMessage* request =
6945                              dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
6946                          PEGASUS_ASSERT(request != 0 );
6947                      
6948                          CIMResponseMessage* response = request->buildResponse();
6949                          response->cimException =
6950                              PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
6951 schuur          1.1  
6952                          PEG_METHOD_EXIT();
6953 konrad.r        1.16     return response;
6954 schuur          1.1  }
6955                      
6956 kumpf           1.2  ProviderName JMPIProviderManager::_resolveProviderName(
6957                          const ProviderIdContainer & providerId)
6958 schuur          1.1  {
6959 kumpf           1.2      String providerName;
6960                          String fileName;
6961                          String interfaceName;
6962                          CIMValue genericValue;
6963                      
6964                          genericValue = providerId.getProvider().getProperty(
6965                              providerId.getProvider().findProperty("Name")).getValue();
6966                          genericValue.get(providerName);
6967                      
6968                          genericValue = providerId.getModule().getProperty(
6969                              providerId.getModule().findProperty("Location")).getValue();
6970                          genericValue.get(fileName);
6971                          fileName = resolveFileName(fileName);
6972                      
6973                          // ATTN: This attribute is probably not required
6974                          genericValue = providerId.getModule().getProperty(
6975                              providerId.getModule().findProperty("InterfaceType")).getValue();
6976                          genericValue.get(interfaceName);
6977                      
6978                          return ProviderName(providerName, fileName, interfaceName, 0);
6979 schuur          1.1  }
6980                      
6981                      String JMPIProviderManager::resolveFileName(String fileName)
6982                      {
6983 marek           1.54     String name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
6984                          // physfilename = everything up to the delimiter pointing at class start
6985                          // in case there is no delimiter anymore, it takes the entire filename
6986                          String physfilename = fileName.subString(0, fileName.find(":"));
6987                          // look in all(multiple) homed pathes for the physical file
6988                          name = FileSystem::getAbsoluteFileName(name, physfilename);
6989                          // construct back the fully specified jar:<classname> provider name
6990                          name = FileSystem::extractFilePath(name) + fileName;
6991 schuur          1.1      return name;
6992                      }
6993                      
6994                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2