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

   1 martin 1.74 //%LICENSE////////////////////////////////////////////////////////////////
   2 martin 1.75 //
   3 martin 1.74 // Licensed to The Open Group (TOG) under one or more contributor license
   4             // agreements.  Refer to the OpenPegasusNOTICE.txt file distributed with
   5             // this work for additional information regarding copyright ownership.
   6             // Each contributor licenses this file to you under the OpenPegasus Open
   7             // Source License; you may not use this file except in compliance with the
   8             // License.
   9 martin 1.75 //
  10 martin 1.74 // Permission is hereby granted, free of charge, to any person obtaining a
  11             // copy of this software and associated documentation files (the "Software"),
  12             // to deal in the Software without restriction, including without limitation
  13             // the rights to use, copy, modify, merge, publish, distribute, sublicense,
  14             // and/or sell copies of the Software, and to permit persons to whom the
  15             // Software is furnished to do so, subject to the following conditions:
  16 martin 1.75 //
  17 martin 1.74 // The above copyright notice and this permission notice shall be included
  18             // in all copies or substantial portions of the Software.
  19 martin 1.75 //
  20 martin 1.74 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  21 martin 1.75 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  22 martin 1.74 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
  23             // IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
  24             // CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  25             // TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  26             // SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27 martin 1.75 //
  28 martin 1.74 //////////////////////////////////////////////////////////////////////////
  29 schuur 1.1  //
  30             //%/////////////////////////////////////////////////////////////////////////////
  31             #include "JMPIProviderManager.h"
  32             
  33             #include "JMPIImpl.h"
  34             
  35             #include <Pegasus/Common/CIMMessage.h>
  36             #include <Pegasus/Common/OperationContext.h>
  37             #include <Pegasus/Common/Tracer.h>
  38             #include <Pegasus/Common/StatisticalData.h>
  39             #include <Pegasus/Common/MessageLoader.h> //l10n
  40 kumpf  1.10 #include <Pegasus/Common/Constants.h>
  41 marek  1.54 #include <Pegasus/Common/FileSystem.h>
  42 kumpf  1.56 #include <Pegasus/Common/ArrayInternal.h>
  43 schuur 1.1  
  44             #include <Pegasus/Config/ConfigManager.h>
  45             
  46             #include <Pegasus/ProviderManager2/ProviderName.h>
  47             #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
  48 konrad.r 1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
  49 schuur   1.1  
  50               PEGASUS_USING_STD;
  51               PEGASUS_NAMESPACE_BEGIN
  52               
  53 kumpf    1.77 // request->localOnly is replaced with JMPI_LOCALONLY for
  54 marek    1.68 // getInstance () and enumerateInstances ()
  55 mark.hamzy 1.30 #define JMPI_LOCALONLY false
  56 mark.hamzy 1.36 
  57 mark.hamzy 1.32 /* Fix for 4092 */
  58 kumpf      1.77 // request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS
  59 marek      1.68 // for getInstance (), setInstance (), enumerateInstances (), associators ()
  60                 // and references ()
  61 mark.hamzy 1.32 #define JMPI_INCLUDE_QUALIFIERS false
  62 mark.hamzy 1.23 
  63                 #include "Convert.h"
  64 schuur     1.1  
  65 karl       1.78 
  66                 //
  67                 //  The following tests were added to allow the provider to supply a
  68                 //  CIMObjectPath in the response.  Before this, the path was always
  69                 //  rebuild by the response functions from the instance.  This resulted
  70                 //  in cases where the key properties were not in the returned instance
  71                 //  (ex. excluded by the property list) so that the path could not be built.
  72                 //  The preferred behavior is for the provider to build the path on response.
  73                 //  However, to cover existing providers the alternate of allowing the
  74                 //  ProviderManager has been kept if the path in the instance is not considered
  75                 //  to exist.
  76                 //  PLEASE: provider writers build/set a proper path into returned objects
  77                 //  See bug 8062
  78                 
  79                 /*
  80                     local function to implement the CIMObjectPath required for a response
  81                     object.
  82                     If there is a path defined in the instance, we simply return this path.
  83                     If not, we use the class to build a path from the instance.
  84                     Note that we are depending on some value in the keybindings to determine
  85                     if we have a path.
  86 karl       1.78 */
  87                 
  88                 void _fixCIMObjectPath(CIMInstance* instance, CIMClass& cls)
  89                 {
  90                     CIMObjectPath op = instance->getPath();
  91                     const Array<CIMKeyBinding> kb = op.getKeyBindings();
  92                     if (kb.size() == 0)
  93                     {
  94                         CIMObjectPath iop = instance->buildPath(cls);
  95                         /* Fix for 4237*/
  96 venkat.puvvada 1.79         iop.setNameSpace(op.getNameSpace());
  97 karl           1.78         instance->setPath(iop);
  98                         }
  99                     }
 100                     
 101 mark.hamzy     1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
 102                     {
 103 thilo.boehm    1.69    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 104                            "JMPIProviderManager::debugPrintMethodPointers");
 105                     
 106 mark.hamzy     1.35    static const char *methodNames[][3] = {
 107 marek          1.68        // CIMProvider
 108                           {"snia 2.0",
 109                            "initialize",
 110                            "(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
 111                           {"snia 2.0",
 112                            "cleanup",
 113                            "()V"},
 114 mark.hamzy     1.24       // InstanceProvider
 115 marek          1.68       {"snia 2.0",
 116                            "enumInstances",
 117                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;"
 118                               "Z)Ljava/util/Vector;"},
 119                           {"pegasus 2.4",
 120                            "enumInstances",
 121                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;"
 122                               "Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
 123 mark.hamzy     1.35       /* Begin Fix for 4189 */
 124 marek          1.68       {"pegasus 2.5",
 125                            "enumerateInstances",
 126                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
 127                               "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 128 mark.hamzy     1.35       /* End Fix for 4189 */
 129 marek          1.68       {"snia 2.0",
 130                            "enumInstances",
 131                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)"
 132                               "Ljava/util/Vector;"},
 133                           {"pegasus 2.4",
 134                            "enumerateInstanceNames",
 135                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
 136                               "[Lorg/pegasus/jmpi/CIMObjectPath;"},
 137                           {"pegasus 2.5",
 138                            "enumerateInstanceNames",
 139                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
 140                               "Ljava/util/Vector;"},
 141                           {"snia 2.0",
 142                            "getInstance",
 143                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)"
 144                               "Lorg/pegasus/jmpi/CIMInstance;"},
 145                           {"pegasus 2.4",
 146                            "getInstance",
 147                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;"
 148                               "Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"},
 149 mark.hamzy     1.35       /* Begin Fix for 4238 */
 150 marek          1.68       {"pegasus 2.5",
 151                            "getInstance",
 152                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
 153                               "ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"},
 154 mark.hamzy     1.35       /* End Fix for 4238 */
 155 marek          1.68       {"snia 2.0",
 156                            "createInstance",
 157                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)"
 158                               "Lorg/pegasus/jmpi/CIMObjectPath;"},
 159                           {"snia 2.0",
 160                            "setInstance",
 161                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
 162                           {"pegasus 2.4",
 163                            "setInstance",
 164                            "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"},
 165                           {"snia 2.0",
 166                            "deleteInstance",
 167                            "(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
 168                           {"snia 2.0",
 169                            "execQuery",
 170                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
 171                               "ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
 172                           {"pegasus 2.4",
 173                            "execQuery",
 174                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
 175                               "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 176 marek          1.68               "[Lorg/pegasus/jmpi/CIMInstance;"},
 177                           {"pegasus 2.5",
 178                            "execQuery",
 179                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;"
 180                               "Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 181 mark.hamzy     1.24       // MethodProvider
 182 marek          1.68       {"snia 2.0",
 183                            "invokeMethod",
 184                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
 185                               "Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
 186                           {"pegasus 2.4",
 187                            "invokeMethod",
 188                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
 189                               "[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)"
 190                               "Lorg/pegasus/jmpi/CIMValue;"},
 191 mark.hamzy     1.24       // PropertyProvider
 192 marek          1.68       {"snia 2.0",
 193                            "getPropertyValue",
 194                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)"
 195                               "Lorg/pegasus/jmpi/CIMValue;"},
 196                           {"snia 2.0",
 197                            "setPropertyValue",
 198                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
 199                               "Lorg/pegasus/jmpi/CIMValue;)V"},
 200 mark.hamzy     1.24       // AssociatorProvider
 201 marek          1.68       {"snia 2.0",
 202                            "associators",
 203                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
 204                               "Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;"
 205                                  "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 206                           {"pegasus 2.4",
 207                            "associators",
 208                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
 209                               "Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 210                           {"snia 2.0",
 211                            "associatorNames",
 212                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
 213                               "Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)"
 214                                  "Ljava/util/Vector;"},
 215                           {"pegasus 2.4",
 216                            "associatorNames",
 217                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
 218                               "Ljava/lang/String;)Ljava/util/Vector;"},
 219                           {"snia 2.0",
 220                            "references",
 221                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
 222 marek          1.68           "Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 223                           {"pegasus 2.4",
 224                            "references",
 225                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
 226                               "ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 227                           {"snia 2.0",
 228                            "referenceNames",
 229                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;"
 230                               "Ljava/lang/String;)Ljava/util/Vector;"},
 231                           {"pegasus 2.4",
 232                            "referenceNames",
 233                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)"
 234                               "Ljava/util/Vector;"},
 235 mark.hamzy     1.24       // CIMProviderRouter
 236                           // EventProvider
 237 marek          1.68       {"snia 2.0",
 238                            "activateFilter",
 239                            "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
 240                               "Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 241                           {"snia 2.0",
 242                            "deActivateFilter",
 243                            "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
 244                               "Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 245 mark.hamzy     1.24       // IndicationHandler
 246                           // ProviderAdapter
 247                           // JMPI_TestPropertyTypes
 248 marek          1.68       {"JMPI_TestPropertyTypes",
 249                            "findObjectPath",
 250                            "(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
 251                           {"JMPI_TestPropertyTypes",
 252                            "testPropertyTypesValue",
 253                            "(Lorg/pegasus/jmpi/CIMInstance;)V"}
 254 mark.hamzy     1.23    };
 255                     
 256                        if (!env)
 257                        {
 258 thilo.boehm    1.69       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 259                               "No JNI environment specified. (JNIEnv==NULL)");
 260                           PEG_METHOD_EXIT();
 261 mark.hamzy     1.23       return;
 262                        }
 263                        if (!jc)
 264                        {
 265 thilo.boehm    1.69       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 266                               "No Java class specified. (jc==NULL)");
 267                           PEG_METHOD_EXIT();
 268 mark.hamzy     1.23       return;
 269                        }
 270                     
 271                        for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
 272                        {
 273 mark.hamzy     1.35       jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]);
 274 marek          1.71       PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 275 thilo.boehm    1.70           "Method: %s, %s, id = %p",
 276                               methodNames[i][0],methodNames[i][1],id));
 277 thilo.boehm    1.69 
 278 mark.hamzy     1.23       env->ExceptionClear();
 279                        }
 280 mark.hamzy     1.29 
 281                        env->ExceptionClear();
 282 thilo.boehm    1.69    PEG_METHOD_EXIT();
 283                        return;
 284 mark.hamzy     1.29 }
 285                     
 286 thilo.boehm    1.69 void debugIntrospectJavaObject (JNIEnv *env, jobject jInst)
 287 mark.hamzy     1.29 {
 288 thilo.boehm    1.69     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 289                             "JMPIProviderManager::debugIntrospectJavaObject");
 290                     
 291 mark.hamzy     1.29    jclass       jInstClass             = env->GetObjectClass(jInst);
 292                        jclass       jInstSuperClass        = env->GetSuperclass(jInstClass);
 293 marek          1.68    jmethodID    jmidGetDeclaredMethods = env->GetMethodID(
 294                                                                  jInstClass,
 295                                                                  "getDeclaredMethods",
 296                                                                  "()[Ljava/lang/reflect/Method;");
 297 mark.hamzy     1.29 
 298                        if (!jmidGetDeclaredMethods)
 299                        {
 300                           env->ExceptionClear();
 301 marek          1.68       jmidGetDeclaredMethods = env->GetMethodID(
 302                                                        jInstSuperClass,
 303                                                        "getDeclaredMethods",
 304                                                        "()[Ljava/lang/reflect/Method;");
 305 mark.hamzy     1.29    }
 306                     
 307                        if (jmidGetDeclaredMethods)
 308                        {
 309 marek          1.68       jobjectArray jarrayDeclaredMethods = (jobjectArray)env->CallObjectMethod(
 310                                                                    jInstClass,
 311                                                                    jmidGetDeclaredMethods);
 312 mark.hamzy     1.29 
 313                           if (jarrayDeclaredMethods)
 314                           {
 315 marek          1.68          for (int i=0,iLen=env->GetArrayLength(jarrayDeclaredMethods);
 316                                    i < iLen;
 317                                    i++)
 318 mark.hamzy     1.29          {
 319                                 JMPIjvm::checkException(env);
 320                     
 321 marek          1.68             jobject jDeclaredMethod = env->GetObjectArrayElement(
 322                                                                    jarrayDeclaredMethods,
 323                                                                    i);
 324                                 jclass jDeclaredMethodClass = env->GetObjectClass(jDeclaredMethod);
 325 mark.hamzy     1.29 
 326                                 JMPIjvm::checkException(env);
 327                     
 328 marek          1.68             jmethodID   jmidToString  = env->GetMethodID(
 329                                                                 jDeclaredMethodClass,
 330                                                                 "toString",
 331                                                                 "()Ljava/lang/String;");
 332                                 jstring     jstringResult = (jstring)env->CallObjectMethod(
 333                                                                 jDeclaredMethod,
 334                                                                 jmidToString);
 335                                 const char *pszResult = env->GetStringUTFChars(jstringResult, 0);
 336 mark.hamzy     1.29 
 337 marek          1.71             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 338 thilo.boehm    1.69                 "Introspect java object: %s",pszResult));
 339 mark.hamzy     1.29 
 340                                 env->ReleaseStringUTFChars (jstringResult, pszResult);
 341                              }
 342                           }
 343                        }
 344                     
 345                        env->ExceptionClear();
 346 thilo.boehm    1.69    PEG_METHOD_EXIT();
 347                        return;
 348 mark.hamzy     1.29 }
 349                     
 350 thilo.boehm    1.69 void debugDumpJavaObject (JNIEnv *env, jobject jInst)
 351 mark.hamzy     1.29 {
 352 thilo.boehm    1.69    PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 353                            "JMPIProviderManager::debugDumpJavaObject");
 354 marek          1.68    jclass jInstClass = env->GetObjectClass(jInst);
 355                        jclass jInstSuperClass = env->GetSuperclass(jInstClass);
 356                        jmethodID jmidToString1 = env->GetMethodID(
 357                                                     jInstClass,
 358                                                     "toString",
 359                                                     "()Ljava/lang/String;");
 360                        jmethodID jmidToString2 = env->GetMethodID(
 361                                                     jInstSuperClass,
 362                                                     "toString",
 363                                                     "()Ljava/lang/String;");
 364 mark.hamzy     1.29    if (!jmidToString1 || !jmidToString2)
 365                        {
 366 thilo.boehm    1.69       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 367                                "No class or super class description.");
 368 mark.hamzy     1.29       env->ExceptionClear();
 369 thilo.boehm    1.69       PEG_METHOD_EXIT();
 370 mark.hamzy     1.29       return;
 371                        }
 372 marek          1.68    jstring jstringResult1 = (jstring)env->CallObjectMethod(
 373                                                     jInstClass,
 374                                                     jmidToString1);
 375                        jstring jstringResult2 = (jstring)env->CallObjectMethod(
 376                                                     jInstSuperClass,
 377                                                     jmidToString2);
 378                        jstring jstringResult3 = (jstring)env->CallObjectMethod(
 379                                                     jInst,
 380                                                     jmidToString1);
 381 mark.hamzy     1.29    const char *pszResult1      = env->GetStringUTFChars(jstringResult1, 0);
 382                        const char *pszResult2      = env->GetStringUTFChars(jstringResult2, 0);
 383                        const char *pszResult3      = env->GetStringUTFChars(jstringResult3, 0);
 384                     
 385 marek          1.68    jmethodID jmidCInst = env->GetMethodID(
 386                                                  env->GetObjectClass(jInst),
 387                                                  JMPIjvm::jv.instanceMethodNames[22].methodName,
 388                                                  JMPIjvm::jv.instanceMethodNames[22].signature);
 389                     
 390 thilo.boehm    1.69    PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 391 thilo.boehm    1.70        "Dumping class %p:\n "
 392                                "    jInstSuperClass = %p\n"
 393                                "    jClassShouldBe = %p\n"
 394                                "    jmidCInst = %p\n"
 395 thilo.boehm    1.69            "    pszResult1 = %s\n"
 396                                "    pszResult2 = %s\n"
 397                                "    pszResult3 = %s",
 398                            jInstClass,jInstSuperClass,JMPIjvm::jv.classRefs[18],jmidCInst,
 399                            pszResult1,pszResult2,pszResult3 ));
 400 mark.hamzy     1.29 
 401                        env->ReleaseStringUTFChars (jstringResult1, pszResult1);
 402                        env->ReleaseStringUTFChars (jstringResult2, pszResult2);
 403                        env->ReleaseStringUTFChars (jstringResult3, pszResult3);
 404                     
 405                        env->ExceptionClear();
 406 thilo.boehm    1.69    PEG_METHOD_EXIT();
 407                        return;
 408 mark.hamzy     1.23 }
 409 schuur         1.1  
 410 marek          1.68 bool JMPIProviderManager::getInterfaceType(
 411                         ProviderIdContainer pidc,
 412                         String& interfaceType,
 413                         String& interfaceVersion)
 414 mark.hamzy     1.43 {
 415 thilo.boehm    1.69     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 416                             "JMPIProviderManager::getInterfaceType");
 417                     
 418 mark.hamzy     1.43    CIMInstance ciProviderModule = pidc.getModule ();
 419                        Uint32      idx;
 420                        bool        fRet             = true;
 421                     
 422                        idx = ciProviderModule.findProperty ("InterfaceType");
 423                     
 424                        if (idx != PEG_NOT_FOUND)
 425                        {
 426                           CIMValue itValue;
 427                     
 428                           itValue = ciProviderModule.getProperty (idx).getValue ();
 429                     
 430                           itValue.get (interfaceType);
 431                     
 432 thilo.boehm    1.69       PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 433                               "interfaceType = %s",(const char*)interfaceType.getCString()));
 434 mark.hamzy     1.43    }
 435                        else
 436                        {
 437 marek          1.71       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 438 thilo.boehm    1.69           "inferfaceType not found.");
 439 mark.hamzy     1.43       fRet = false;
 440                        }
 441                     
 442                        idx = ciProviderModule.findProperty ("InterfaceVersion");
 443                     
 444                        if (idx != PEG_NOT_FOUND)
 445                        {
 446                           CIMValue itValue;
 447                     
 448                           itValue = ciProviderModule.getProperty (idx).getValue ();
 449                     
 450                           itValue.get (interfaceVersion);
 451                     
 452 thilo.boehm    1.69       PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 453                               "interfaceVersion = %s",(const char*)interfaceVersion.getCString()));
 454 mark.hamzy     1.43    }
 455                        else
 456                        {
 457 marek          1.71       PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 458 thilo.boehm    1.69           "inferfaceVersion not found.");
 459 mark.hamzy     1.43       fRet = false;
 460                        }
 461 thilo.boehm    1.69    PEG_METHOD_EXIT();
 462 mark.hamzy     1.43    return fRet;
 463                     }
 464                     
 465                     bool JMPIProviderManager::interfaceIsUsed (JNIEnv  *env,
 466                                                                jobject  jObject,
 467                                                                String   searchInterfaceName)
 468                     {
 469                        jobjectArray jInterfaces       = 0;
 470                        jsize        jInterfacesLength = 0;
 471                        bool         fFound            = false;
 472                     
 473                        if (!jObject)
 474                        {
 475                           return false;
 476                        }
 477                     
 478 marek          1.68    jInterfaces = (jobjectArray)env->CallObjectMethod(
 479                                          env->GetObjectClass (jObject),
 480                                         JMPIjvm::jv.ClassGetInterfaces);
 481 mark.hamzy     1.43 
 482                        if (!jInterfaces)
 483                        {
 484                           return false;
 485                        }
 486                     
 487                        jInterfacesLength = env->GetArrayLength (jInterfaces);
 488                     
 489                        for (jsize i = 0; !fFound && i < jInterfacesLength; i++)
 490                        {
 491                           jobject jInterface = env->GetObjectArrayElement (jInterfaces, i);
 492                     
 493                           if (jInterface)
 494                           {
 495 marek          1.68          jstring jInterfaceName = (jstring)env->CallObjectMethod(
 496                                                           jInterface,
 497                                                           JMPIjvm::jv.ClassGetName);
 498 mark.hamzy     1.43 
 499                              if (jInterfaceName)
 500                              {
 501 marek          1.68             const char *pszInterfaceName = env->GetStringUTFChars(
 502                                                                    jInterfaceName,
 503                                                                    0);
 504 mark.hamzy     1.43             String      interfaceName    = pszInterfaceName;
 505                     
 506                                 if (String::equal (interfaceName, searchInterfaceName))
 507                                 {
 508                                    fFound = true;
 509                                 }
 510                     
 511                                 env->ReleaseStringUTFChars (jInterfaceName, pszInterfaceName);
 512                              }
 513                           }
 514                        }
 515                     
 516                        return fFound;
 517                     }
 518                     
 519 schuur         1.1  JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;
 520 mark.hamzy     1.44 Mutex                              JMPIProviderManager::mutexProvTab;
 521 schuur         1.1  JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;
 522 mark.hamzy     1.44 Mutex                              JMPIProviderManager::mutexSelxTab;
 523 schuur         1.1  JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
 524 mark.hamzy     1.44 Mutex                              JMPIProviderManager::mutexProvReg;
 525 schuur         1.1  
 526 mark.hamzy     1.57 JMPIProviderManager::JMPIProviderManager()
 527 schuur         1.1  {
 528 carolann.graves 1.21    _subscriptionInitComplete = false;
 529 schuur          1.1  }
 530                      
 531                      JMPIProviderManager::~JMPIProviderManager(void)
 532                      {
 533                      }
 534                      
 535 schuur          1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
 536 schuur          1.1              const String &ns, const String &cn)
 537                      {
 538 thilo.boehm     1.69     PEG_METHOD_ENTER( TRC_PROVIDERMANAGER,
 539                              "JMPIProviderManager::insertProvider");
 540                      
 541 dmitry.mikulin  1.64     String key(ns + String("::") + cn);
 542 thilo.boehm     1.69     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 543                              "insertProvider: %s",(const char*)key.getCString()));
 544 mark.hamzy      1.23 
 545 mark.hamzy      1.44     Boolean ret = false;
 546                      
 547                          {
 548                             AutoMutex lock (mutexProvReg);
 549                      
 550                             ret = provReg.insert(key,name);
 551                          }
 552                      
 553 thilo.boehm     1.69     PEG_METHOD_EXIT();
 554 mark.hamzy      1.44     return ret;
 555 schuur          1.1  }
 556 mark.hamzy      1.23 
 557 schuur          1.1  Message * JMPIProviderManager::processMessage(Message * request) throw()
 558                      {
 559 marek           1.68     PEG_METHOD_ENTER(
 560                              TRC_PROVIDERMANAGER,
 561                              "JMPIProviderManager::processMessage()");
 562 schuur          1.1  
 563                          Message * response = 0;
 564 mark.hamzy      1.23 
 565 schuur          1.1      // pass the request message to a handler method based on message type
 566                          switch(request->getType())
 567                          {
 568                          case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 569                              response = handleGetInstanceRequest(request);
 570 mark.hamzy      1.25         break;
 571 schuur          1.1  
 572                          case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 573                              response = handleEnumerateInstancesRequest(request);
 574 mark.hamzy      1.25         break;
 575 schuur          1.1  
 576                          case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 577                              response = handleEnumerateInstanceNamesRequest(request);
 578 mark.hamzy      1.25         break;
 579 schuur          1.1  
 580                          case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 581                              response = handleCreateInstanceRequest(request);
 582 mark.hamzy      1.25         break;
 583 schuur          1.1  
 584                          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 585                              response = handleModifyInstanceRequest(request);
 586 mark.hamzy      1.25         break;
 587 schuur          1.1  
 588                          case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 589                              response = handleDeleteInstanceRequest(request);
 590 mark.hamzy      1.25         break;
 591 schuur          1.1  
 592 mark.hamzy      1.25     case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 593                              response = handleExecQueryRequest(request);
 594 schuur          1.1          break;
 595                      
 596                          case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 597                              response = handleAssociatorsRequest(request);
 598 mark.hamzy      1.25         break;
 599 schuur          1.1  
 600                          case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 601                              response = handleAssociatorNamesRequest(request);
 602 mark.hamzy      1.25         break;
 603 schuur          1.1  
 604                          case CIM_REFERENCES_REQUEST_MESSAGE:
 605                              response = handleReferencesRequest(request);
 606 mark.hamzy      1.25         break;
 607 schuur          1.1  
 608                          case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 609                              response = handleReferenceNamesRequest(request);
 610 mark.hamzy      1.25         break;
 611 schuur          1.1  
 612 mark.hamzy      1.26     case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 613                              response = handleGetPropertyRequest(request);
 614                              break;
 615                      
 616                          case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 617                              response = handleSetPropertyRequest(request);
 618                              break;
 619                      
 620 schuur          1.11     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 621 schuur          1.1          response = handleInvokeMethodRequest(request);
 622 mark.hamzy      1.25         break;
 623 schuur          1.1  
 624 schuur          1.12     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 625 schuur          1.1          response = handleCreateSubscriptionRequest(request);
 626 mark.hamzy      1.25         break;
 627 schuur          1.1  
 628 mark.hamzy      1.25 /*  case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 629 schuur          1.1          response = handleModifySubscriptionRequest(request);
 630                              break;
 631 schuur          1.12 */
 632 schuur          1.1      case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 633                              response = handleDeleteSubscriptionRequest(request);
 634 mark.hamzy      1.25         break;
 635 schuur          1.1  
 636 mark.hamzy      1.26 /*  case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 637 kumpf           1.7          response = handleExportIndicationRequest(request);
 638 schuur          1.1          break;
 639 schuur          1.12 */
 640 schuur          1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 641                              response = handleDisableModuleRequest(request);
 642 mark.hamzy      1.25         break;
 643 schuur          1.1  
 644                          case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 645                              response = handleEnableModuleRequest(request);
 646 mark.hamzy      1.25         break;
 647 schuur          1.1  
 648                          case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 649                              response = handleStopAllProvidersRequest(request);
 650 mark.hamzy      1.25         break;
 651 schuur          1.1  
 652 carolann.graves 1.21     case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 653                              response = handleSubscriptionInitCompleteRequest (request);
 654 mark.hamzy      1.25         break;
 655 carolann.graves 1.21 
 656 venkat.puvvada  1.79     case CIM_INDICATION_SERVICE_DISABLED_REQUEST_MESSAGE:
 657                              response = handleIndicationServiceDisabledRequest (request);
 658                              break;
 659                      
 660 schuur          1.1      default:
 661 marek           1.71         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 662 thilo.boehm     1.69                    "Unsupported Request %d",
 663 marek           1.61                    request->getType()
 664                                        ));
 665 mark.hamzy      1.25 
 666 schuur          1.1          response = handleUnsupportedRequest(request);
 667                              break;
 668                          }
 669                      
 670                          PEG_METHOD_EXIT();
 671                      
 672                          return(response);
 673                      }
 674                      
 675 kumpf           1.6  Boolean JMPIProviderManager::hasActiveProviders()
 676                      {
 677                           return providerManager.hasActiveProviders();
 678                      }
 679                      
 680                      void JMPIProviderManager::unloadIdleProviders()
 681 schuur          1.1  {
 682 kumpf           1.6       providerManager.unloadIdleProviders();
 683 schuur          1.1  }
 684                      
 685                      #define STRDUPA(s,o) \
 686                         if (s) { \
 687                            o=(const char*)alloca(strlen(s)); \
 688                            strcpy((char*)(o),(s)); \
 689                         } \
 690                         else o=NULL;
 691                      
 692                      #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 693                      
 694                      
 695 kumpf           1.55 #define HandlerIntroBase(type,type1,message,request,response,handler) \
 696 schuur          1.1      CIM##type##RequestMessage * request = \
 697 marek           1.68         dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *> \
 698                              (message)); \
 699 schuur          1.1      PEGASUS_ASSERT(request != 0); \
 700                          CIM##type##ResponseMessage * response = \
 701 kumpf           1.55         dynamic_cast<CIM##type##ResponseMessage*>(request->buildResponse()); \
 702 schuur          1.1      PEGASUS_ASSERT(response != 0); \
 703 kumpf           1.42     type1##ResponseHandler handler(request, response, _responseChunkCallback);
 704 schuur          1.1  
 705                      #define HandlerIntroInd(type,message,request,response,handler) \
 706 kumpf           1.55      HandlerIntroBase(type,Operation,message,request,response,handler)
 707 schuur          1.1  
 708 kumpf           1.4  #define HandlerIntroInit(type,message,request,response,handler) \
 709 kumpf           1.55      HandlerIntroBase(type,Operation,message,request,response,handler)
 710 kumpf           1.4  
 711 kumpf           1.55 #define HandlerIntro(type,message,request,response,handler) \
 712                           HandlerIntroBase(type,type,message,request,response,handler)
 713 schuur          1.1  
 714                      #define HandlerCatch(handler) \
 715                          catch(CIMException & e)  \
 716 thilo.boehm     1.72     {   PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"CIMException: %s", \
 717                                  (const char*)e.getMessage().getCString())); \
 718 marek           1.68         handler.setStatus(e.getCode(), e.getContentLanguages(), \
 719                              e.getMessage()); \
 720 schuur          1.1      } \
 721                          catch(Exception & e) \
 722 thilo.boehm     1.72     {   PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,"Exception: %s", \
 723                                  (const char*)e.getMessage().getCString())); \
 724 marek           1.68         handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), \
 725                              e.getMessage()); \
 726 schuur          1.1      } \
 727                          catch(...) \
 728 marek           1.71     { PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1, \
 729 schuur          1.1                  "Exception: Unknown"); \
 730                              handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 731                          }
 732                      
 733 schuur          1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
 734                      {
 735 karl            1.76     jobjectArray pl= NULL;
 736                          if (!list.isNull())
 737                          {
 738                              Uint32 s=list.size();
 739                              jstring initial=env->NewString(NULL,0);
 740                              pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
 741                              for (Uint32 i=0; i<s; i++)
 742                              {
 743                                  env->SetObjectArrayElement
 744                                      (pl,i,env->NewStringUTF(list[i].getString().getCString()));
 745                              }
 746 schuur          1.13     }
 747                          return pl;
 748                      }
 749 schuur          1.1  
 750 marek           1.68 Message * JMPIProviderManager::handleGetInstanceRequest(
 751                          const Message * message) throw()
 752 schuur          1.1  {
 753 marek           1.68     PEG_METHOD_ENTER(
 754                              TRC_PROVIDERMANAGER,
 755                              "JMPIProviderManager::handleGetInstanceRequest");
 756 schuur          1.1  
 757 kumpf           1.55     HandlerIntro(GetInstance,message,request,response,handler);
 758 schuur          1.1  
 759 mark.hamzy      1.25     typedef enum {
 760                             METHOD_UNKNOWN = 0,
 761 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
 762                             METHOD_INSTANCEPROVIDER,
 763                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
 764 mark.hamzy      1.25     } METHOD_VERSION;
 765                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
 766                          JNIEnv          *env           = NULL;
 767 schuur          1.13 
 768 marek           1.68     try
 769                          {
 770 marek           1.71         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 771 thilo.boehm     1.69              "handleGetInstanceRequest: "
 772 kumpf           1.77                  "name space = %s class name = %s",
 773 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
 774                                   (const char*)request->
 775                                        instanceName.getClassName().getString().getCString()
 776                                   ));
 777 mark.hamzy      1.23 
 778 schuur          1.1          // make target object path
 779 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
 780                                                              System::getHostName(),
 781                                                              request->nameSpace,
 782                                                              request->instanceName.getClassName(),
 783                                                              request->instanceName.getKeyBindings());
 784 schuur          1.1  
 785                              // resolve provider name
 786 kumpf           1.2          ProviderName name = _resolveProviderName(
 787                                  request->operationContext.get(ProviderIdContainer::NAME));
 788 schuur          1.1  
 789                              // get cached or load new provider module
 790 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
 791                                                                      name.getPhysicalName(),
 792                                                                      name.getLogicalName());
 793 schuur          1.1          OperationContext context;
 794                      
 795 marek           1.68         context.insert(
 796                                  request->operationContext.get(IdentityContainer::NAME));
 797                              context.insert(
 798                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
 799                              context.insert(
 800                                  request->operationContext.get(ContentLanguageListContainer::NAME));
 801 mark.hamzy      1.43 
 802 mark.hamzy      1.23         // forward request
 803 mark.hamzy      1.25         JMPIProvider &pr=ph.GetProvider();
 804 schuur          1.1  
 805 thilo.boehm     1.69         PEG_TRACE(( TRC_PROVIDERMANAGER, Tracer::LEVEL3,
 806 kumpf           1.77             "handleGetInstanceRequest:Calling provider instance: %s" ,
 807 thilo.boehm     1.69             (const char*)pr.getName().getCString()));
 808 schuur          1.1  
 809 mark.hamzy      1.25         JvmVector *jv = 0;
 810                      
 811                              env = JMPIjvm::attachThread(&jv);
 812                      
 813 mark.hamzy      1.37         if (!env)
 814                              {
 815 marek           1.71             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 816 thilo.boehm     1.69                 "handleGetInstanceRequest:"
 817                                          "Could not initialize the JVM (Java Virtual Machine) "
 818                                          "runtime environment.");
 819                      
 820 mark.hamzy      1.37             PEG_METHOD_EXIT();
 821                      
 822 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
 823                                      CIM_ERR_FAILED,
 824                                      MessageLoaderParms(
 825 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
 826 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
 827                                              "runtime environment."));
 828 mark.hamzy      1.37         }
 829                      
 830 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
 831                      
 832 mark.hamzy      1.43         jmethodID id               = NULL;
 833                              String    interfaceType;
 834                              String    interfaceVersion;
 835                      
 836 marek           1.68         getInterfaceType(
 837                                  request->operationContext.get(ProviderIdContainer::NAME),
 838                                  interfaceType,
 839                                  interfaceVersion);
 840 mark.hamzy      1.43 
 841                              if (interfaceType == "JMPI")
 842                              {
 843 marek           1.68            id = env->GetMethodID(
 844                                          (jclass)pr.jProviderClass,
 845                                          "getInstance",
 846                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
 847                                               "Lorg/pegasus/jmpi/CIMClass;Z)"
 848                                                   "Lorg/pegasus/jmpi/CIMInstance;");
 849 mark.hamzy      1.25 
 850 mark.hamzy      1.43            if (id != NULL)
 851                                 {
 852                                     eMethodFound = METHOD_INSTANCEPROVIDER;
 853 marek           1.71                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 854 thilo.boehm     1.69                    "handleGetInstanceRequest: "
 855                                             "Found METHOD_INSTANCEPROVIDER.");
 856 mark.hamzy      1.43            }
 857                      
 858                                 if (id == NULL)
 859                                 {
 860                                     env->ExceptionClear();
 861 mark.hamzy      1.25 
 862 marek           1.68                id = env->GetMethodID(
 863                                              (jclass)pr.jProviderClass,
 864                                              "getInstance",
 865                                              "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ["
 866                                                  "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 867                                                      "Lorg/pegasus/jmpi/CIMInstance;");
 868 mark.hamzy      1.43 
 869                                     if (id != NULL)
 870                                     {
 871                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
 872 marek           1.71                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 873 thilo.boehm     1.69                        "handleGetInstanceRequest: "
 874                                                 "Found METHOD_CIMINSTANCEPROVIDER.");
 875 mark.hamzy      1.43                }
 876                                 }
 877 mark.hamzy      1.34         }
 878 mark.hamzy      1.43         else if (interfaceType == "JMPIExperimental")
 879 mark.hamzy      1.34         {
 880 marek           1.68            id = env->GetMethodID(
 881                                          (jclass)pr.jProviderClass,
 882                                          "getInstance",
 883                                          "(Lorg/pegasus/jmpi/OperationContext;"
 884                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
 885                                                  "Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)"
 886                                                      "Lorg/pegasus/jmpi/CIMInstance;");
 887 mark.hamzy      1.34 
 888 mark.hamzy      1.43            if (id != NULL)
 889                                 {
 890                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
 891 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 892                                         "handleGetInstanceRequest: "
 893                                             "Found METHOD_INSTANCEPROVIDER2.");
 894 mark.hamzy      1.43            }
 895                                 /* Fix for 4238 */
 896 mark.hamzy      1.25         }
 897                      
 898                              if (id == NULL)
 899                              {
 900 marek           1.71            PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 901 thilo.boehm     1.69                "handleGetInstanceRequest: No method provider found!");
 902 mark.hamzy      1.43 
 903                                 PEG_METHOD_EXIT();
 904 mark.hamzy      1.25 
 905 kumpf           1.65            throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
 906                                     MessageLoaderParms(
 907                                         "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
 908                                         "Could not find a method for the provider based on "
 909                                             "InterfaceType."));
 910 mark.hamzy      1.25         }
 911                      
 912 schuur          1.1          JMPIjvm::checkException(env);
 913 mark.hamzy      1.23 
 914 mark.hamzy      1.25         switch (eMethodFound)
 915                              {
 916 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
 917 mark.hamzy      1.25         {
 918 marek           1.68             jlong jopRef=DEBUG_ConvertCToJava(CIMObjectPath*,jlong,objectPath);
 919                                  jobject jop=env->NewObject(
 920                                                  jv->CIMObjectPathClassRef,
 921                                                  jv->CIMObjectPathNewJ,
 922                                                  jopRef);
 923 mark.hamzy      1.25 
 924                                  JMPIjvm::checkException(env);
 925                      
 926 mark.hamzy      1.40             CIMClass cls;
 927                      
 928                                  try
 929                                  {
 930 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 931                                         "handleGetInstanceRequest: "
 932                                             "enter(METHOD_CIMINSTANCEPROVIDER): "
 933                                             "cimom_handle->getClass(%s).",
 934                                         (const char*)request->
 935                                             instanceName.getClassName().getString().getCString()
 936                                         ));
 937 marek           1.68 
 938 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
 939                      
 940 marek           1.68                cls = pr._cimom_handle->getClass(
 941                                               context,
 942                                               request->nameSpace,
 943                                               request->instanceName.getClassName(),
 944                                               false,
 945                                               true,
 946                                               true,
 947                                               CIMPropertyList());
 948                      
 949 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 950                                         "handleGetInstanceRequest: "
 951                                         "exit(METHOD_CIMINSTANCEPROVIDER): "
 952                                             "cimom_handle->getClass(%s).",
 953                                         (const char*)request->
 954                                             instanceName.getClassName().getString().getCString()
 955                                          ));
 956                      
 957 mark.hamzy      1.40             }
 958                                  catch (CIMException e)
 959                                  {
 960 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
 961 thilo.boehm     1.69                    "handleGetInstanceRequest: "
 962                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
 963                                             "during cimom_handle->getClass(%s): %s ",
 964                                         (const char*)request->
 965                                            instanceName.getClassName().getString().getCString(),
 966                                         (const char*)e.getMessage().getCString()
 967                                         ));
 968                      
 969                                     PEG_METHOD_EXIT();
 970 mark.hamzy      1.40                throw;
 971                                  }
 972                      
 973 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
 974                      
 975                                  JMPIjvm::checkException(env);
 976 mark.hamzy      1.25 
 977 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava(
 978                                                           CIMClass*,
 979                                                           jlong,
 980                                                           pcls);
 981                                  jobject jcimClass = env->NewObject(
 982                                                          jv->CIMClassClassRef,
 983                                                          jv->CIMClassNewJ,
 984                                                          jcimClassRef);
 985 mark.hamzy      1.25 
 986                                  JMPIjvm::checkException(env);
 987 mark.hamzy      1.23 
 988 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
 989 schuur          1.1  
 990 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
 991                      
 992 mark.hamzy      1.29             jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
 993                                                                         id,
 994                                                                         jop,
 995 mark.hamzy      1.36                                                    JMPI_LOCALONLY,
 996                                                                         JMPI_INCLUDE_QUALIFIERS,
 997 mark.hamzy      1.29                                                    request->includeClassOrigin,
 998                                                                         jPropertyList,
 999                                                                         jcimClass);
1000 mark.hamzy      1.23 
1001 mark.hamzy      1.25             JMPIjvm::checkException(env);
1002 mark.hamzy      1.23 
1003 mark.hamzy      1.25             handler.processing();
1004 schuur          1.1  
1005 mark.hamzy      1.29             if (jciRet) {
1006 marek           1.68                jlong jciRetRef = env->CallLongMethod(
1007                                                           jciRet,
1008                                                           JMPIjvm::jv.CIMInstanceCInst);
1009                                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1010                                                              jlong,
1011                                                              CIMInstance*,
1012                                                              jciRetRef);
1013 schuur          1.13 
1014 mark.hamzy      1.29                handler.deliver(*ciRet);
1015 mark.hamzy      1.25             }
1016                                  handler.complete();
1017                                  break;
1018 mark.hamzy      1.23         }
1019 schuur          1.13 
1020 mark.hamzy      1.34         /* Fix for 4238 */
1021 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
1022 mark.hamzy      1.34         {
1023 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
1024                                                     OperationContext*,
1025                                                     jlong,
1026                                                     &request->operationContext);
1027                                  jobject joc = env->NewObject(
1028                                                    jv->OperationContextClassRef,
1029                                                    jv->OperationContextNewJ,
1030                                                    jocRef);
1031                      
1032                                  jlong jopRef = DEBUG_ConvertCToJava(
1033                                                     CIMObjectPath*,
1034                                                     jlong,
1035                                                     objectPath);
1036                                  jobject jop = env->NewObject(
1037                                                    jv->CIMObjectPathClassRef,
1038                                                    jv->CIMObjectPathNewJ,
1039                                                    jopRef);
1040 mark.hamzy      1.34 
1041                                  JMPIjvm::checkException(env);
1042                      
1043 mark.hamzy      1.40             CIMClass cls;
1044                      
1045                                  try
1046                                  {
1047 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1048                                         "handleGetInstanceRequest: "
1049                                         "enter(METHOD_INSTANCEPROVIDER2): "
1050                                             "cimom_handle->getClass(%s).",
1051                                         (const char*)request->
1052                                             instanceName.getClassName().getString().getCString()
1053                                         ));
1054                      
1055 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
1056                      
1057 marek           1.68                cls = pr._cimom_handle->getClass(
1058                                               context,
1059                                               request->nameSpace,
1060                                               request->instanceName.getClassName(),
1061                                               false,
1062                                               true,
1063                                               true,
1064                                               CIMPropertyList());
1065 thilo.boehm     1.69 
1066                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1067                                         "handleGetInstanceRequest: "
1068                                         "exit(METHOD_INSTANCEPROVIDER2): "
1069                                             "cimom_handle->getClass(%s).",
1070                                         (const char*)request->
1071                                             instanceName.getClassName().getString().getCString()
1072                                         ));
1073 mark.hamzy      1.40             }
1074                                  catch (CIMException e)
1075                                  {
1076 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1077 thilo.boehm     1.69                    "handleGetInstanceRequest: "
1078                                         "Caught CIMExcetion (METHOD_INSTANCEPROVIDER2) "
1079                                             "during cimom_handle->getClass(%s): %s ",
1080                                         (const char*)request->
1081                                             instanceName.getClassName().getString().getCString(),
1082                                         (const char*)e.getMessage().getCString()
1083                                         ));
1084                                     PEG_METHOD_EXIT();
1085 mark.hamzy      1.40                throw;
1086                                  }
1087                      
1088 mark.hamzy      1.34             CIMClass *pcls = new CIMClass (cls);
1089                      
1090                                  JMPIjvm::checkException(env);
1091                      
1092 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1093                                  jobject jcimClass = env->NewObject(
1094                                                          jv->CIMClassClassRef,
1095                                                          jv->CIMClassNewJ,
1096                                                          jcimClassRef);
1097 mark.hamzy      1.34 
1098                                  JMPIjvm::checkException(env);
1099                      
1100                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1101 kumpf           1.55 
1102                                  StatProviderTimeMeasurement providerTime(response);
1103                      
1104 marek           1.68             jobject jciRet = env->CallObjectMethod(
1105                                                       (jobject)pr.jProvider,
1106                                                       id,
1107                                                       joc,
1108                                                       jop,
1109                                                       jcimClass,
1110                                                       JMPI_INCLUDE_QUALIFIERS,
1111                                                       request->includeClassOrigin,
1112                                                       jPropertyList);
1113 mark.hamzy      1.34 
1114                                  JMPIjvm::checkException(env);
1115                      
1116 mark.hamzy      1.43             if (joc)
1117                                  {
1118 marek           1.68                env->CallVoidMethod(
1119                                         joc,
1120                                         JMPIjvm::jv.OperationContextUnassociate);
1121 mark.hamzy      1.43 
1122                                     JMPIjvm::checkException(env);
1123                                  }
1124                      
1125 mark.hamzy      1.34             handler.processing();
1126                      
1127                                  if (jciRet) {
1128 marek           1.68                jlong jciRetRef = env->CallLongMethod(
1129                                                           jciRet,
1130                                                           JMPIjvm::jv.CIMInstanceCInst);
1131                                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1132                                                              jlong,
1133                                                              CIMInstance*,
1134                                                              jciRetRef);
1135 mark.hamzy      1.34 
1136                                     handler.deliver(*ciRet);
1137                                  }
1138                                  handler.complete();
1139                                  break;
1140                              }
1141                              /* Fix for 4238 */
1142                      
1143 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
1144 mark.hamzy      1.25         {
1145 marek           1.68             jlong jopRef = DEBUG_ConvertCToJava(
1146                                                     CIMObjectPath*,
1147                                                     jlong,
1148                                                     objectPath);
1149                                  jobject jop = env->NewObject(
1150                                                    jv->CIMObjectPathClassRef,
1151                                                    jv->CIMObjectPathNewJ,jopRef);
1152 mark.hamzy      1.25 
1153                                  JMPIjvm::checkException(env);
1154                      
1155 mark.hamzy      1.40             CIMClass cls;
1156                      
1157                                  try
1158                                  {
1159 thilo.boehm     1.69                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1160                                          "handleGetInstanceRequest: "
1161                                          "enter(METHOD_INSTANCEPROVIDER): "
1162                                              "cimom_handle->getClass(%s).",
1163                                          (const char*)request->
1164                                              instanceName.getClassName().getString().getCString()
1165                                          ));
1166                      
1167 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
1168                      
1169 marek           1.68                cls = pr._cimom_handle->getClass(
1170                                               context,
1171                                               request->nameSpace,
1172                                               request->instanceName.getClassName(),
1173                                               false,
1174                                               true,
1175                                               true,
1176                                               CIMPropertyList());
1177 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1178                                         "handleGetInstanceRequest: "
1179                                         "exit(METHOD_INSTANCEPROVIDER): "
1180                                             "cimom_handle->getClass(%s).",
1181                                         (const char*)request->
1182                                             instanceName.getClassName().getString().getCString()
1183                                         ));
1184 mark.hamzy      1.40             }
1185                                  catch (CIMException e)
1186                                  {
1187 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1188 thilo.boehm     1.69                    "handleGetInstanceRequest: "
1189                                         "Caught CIMExcetion (METHOD_INSTANCEPROVIDER) "
1190                                             "during cimom_handle->getClass(%s): %s ",
1191                                         (const char*)request->
1192                                             instanceName.getClassName().getString().getCString(),
1193                                         (const char*)e.getMessage().getCString()
1194                                         ));
1195                      
1196                                     PEG_METHOD_EXIT();
1197 mark.hamzy      1.40                throw;
1198                                  }
1199                      
1200 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1201 mark.hamzy      1.25 
1202 mark.hamzy      1.27             JMPIjvm::checkException(env);
1203                      
1204 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1205                                  jobject jcimClass = env->NewObject(
1206                                                          jv->CIMClassClassRef,
1207                                                          jv->CIMClassNewJ,
1208                                                          jcimClassRef);
1209 mark.hamzy      1.25 
1210                                  JMPIjvm::checkException(env);
1211                      
1212 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
1213                      
1214 mark.hamzy      1.30             // Modified for Bugzilla# 3679
1215 mark.hamzy      1.29             jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
1216                                                                         id,
1217                                                                         jop,
1218                                                                         jcimClass,
1219 mark.hamzy      1.30                                                    JMPI_LOCALONLY);
1220 mark.hamzy      1.25 
1221                                  JMPIjvm::checkException(env);
1222                      
1223                                  handler.processing();
1224 schuur          1.13 
1225 mark.hamzy      1.29             if (jciRet) {
1226 marek           1.68                jlong jciRetRef = env->CallLongMethod(
1227                                                           jciRet,
1228                                                           JMPIjvm::jv.CIMInstanceCInst);
1229                                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1230                                                              jlong,
1231                                                              CIMInstance*,
1232                                                              jciRetRef);
1233 schuur          1.13 
1234 mark.hamzy      1.29                handler.deliver(*ciRet);
1235 mark.hamzy      1.25             }
1236                                  handler.complete();
1237                                  break;
1238                              }
1239 mark.hamzy      1.23 
1240 mark.hamzy      1.25         case METHOD_UNKNOWN:
1241                              {
1242 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1243 thilo.boehm     1.69                 "handleGetInstanceRequest: Unknown method provider!");
1244 mark.hamzy      1.25             break;
1245                              }
1246 schuur          1.1          }
1247 schuur          1.13     }
1248 schuur          1.1      HandlerCatch(handler);
1249 schuur          1.13 
1250 schuur          1.1      if (env) JMPIjvm::detachThread();
1251 schuur          1.13 
1252 schuur          1.1      PEG_METHOD_EXIT();
1253                      
1254                          return(response);
1255                      }
1256                      
1257 marek           1.68 Message * JMPIProviderManager::handleEnumerateInstancesRequest(
1258                          const Message * message) throw()
1259 schuur          1.1  {
1260 marek           1.68     PEG_METHOD_ENTER(
1261                              TRC_PROVIDERMANAGER,
1262                              "JMPIProviderManager::handleEnumerateInstanceRequest");
1263 mark.hamzy      1.23 
1264 kumpf           1.55     HandlerIntro(EnumerateInstances,message,request,response,handler);
1265 schuur          1.1  
1266 mark.hamzy      1.25     typedef enum {
1267                             METHOD_UNKNOWN = 0,
1268 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
1269                             METHOD_CIMINSTANCEPROVIDER2,
1270                             METHOD_INSTANCEPROVIDER,
1271                             METHOD_INSTANCEPROVIDER2,
1272 mark.hamzy      1.25     } METHOD_VERSION;
1273                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1274                          JNIEnv          *env           = NULL;
1275 schuur          1.13 
1276 kumpf           1.77     try
1277 marek           1.68     {
1278 thilo.boehm     1.69        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
1279                                  "handleEnumerateInstanceRequest: "
1280 kumpf           1.77                 "name space = %s class name = %s",
1281 thilo.boehm     1.69             (const char*)request->nameSpace.getString().getCString(),
1282                                  (const char*)request->className.getString().getCString()
1283                                  ));
1284 mark.hamzy      1.23 
1285 schuur          1.1          // make target object path
1286 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1287                                                                             request->nameSpace,
1288                                                                             request->className);
1289 schuur          1.1  
1290                              // resolve provider name
1291 kumpf           1.2          ProviderName name = _resolveProviderName(
1292                                  request->operationContext.get(ProviderIdContainer::NAME));
1293 schuur          1.1  
1294                              // get cached or load new provider module
1295 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
1296                                                                      name.getPhysicalName(),
1297                                                                      name.getLogicalName(),
1298                                                                      String::EMPTY);
1299 schuur          1.1  
1300 schuur          1.12         // convert arguments
1301 schuur          1.1          OperationContext context;
1302                      
1303 marek           1.68         context.insert(
1304                                  request->operationContext.get(IdentityContainer::NAME));
1305                              context.insert(
1306                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
1307                              context.insert(
1308                                  request->operationContext.get(ContentLanguageListContainer::NAME));
1309 schuur          1.1  
1310                              // forward request
1311 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
1312 schuur          1.1  
1313 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
1314                                  "handleEnumerateInstanceRequest: "
1315                                  "Calling provider: %s", (const char*)pr.getName().getCString()));
1316 schuur          1.12 
1317 mark.hamzy      1.25         JvmVector *jv = 0;
1318                      
1319                              env = JMPIjvm::attachThread(&jv);
1320                      
1321 mark.hamzy      1.37         if (!env)
1322                              {
1323 marek           1.71             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1324 thilo.boehm     1.69                 "handleEnumerateInstanceRequest: "
1325                                          "Could not initialize the JVM (Java Virtual Machine) "
1326                                          "runtime environment.");
1327                      
1328 mark.hamzy      1.37             PEG_METHOD_EXIT();
1329                      
1330 kumpf           1.65             throw PEGASUS_CIM_EXCEPTION_L(CIM_ERR_FAILED,
1331                                      MessageLoaderParms(
1332                                          "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
1333                                          "Could not initialize the JVM (Java Virtual Machine) "
1334                                              "runtime environment."));
1335 mark.hamzy      1.37         }
1336                      
1337 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
1338                      
1339 mark.hamzy      1.43         jmethodID id               = NULL;
1340                              String    interfaceType;
1341                              String    interfaceVersion;
1342                      
1343 marek           1.68         getInterfaceType(
1344                                  request->operationContext.get (ProviderIdContainer::NAME),
1345                                  interfaceType,
1346                                  interfaceVersion);
1347 mark.hamzy      1.43 
1348                              if (interfaceType == "JMPI")
1349                              {
1350 marek           1.68            id = env->GetMethodID(
1351                                          (jclass)pr.jProviderClass,
1352                                          "enumInstances",
1353                                          "(Lorg/pegasus/jmpi/CIMObjectPath;Z"
1354                                               "Lorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
1355 mark.hamzy      1.25 
1356 mark.hamzy      1.43            if (id != NULL)
1357                                 {
1358                                     eMethodFound = METHOD_INSTANCEPROVIDER;
1359 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1360                                         "handleEnumerateInstances: Found METHOD_INSTANCEPROVIDER.");
1361 mark.hamzy      1.43            }
1362                      
1363                                 if (id == NULL)
1364                                 {
1365                                     env->ExceptionClear();
1366 mark.hamzy      1.25 
1367 marek           1.68                id = env->GetMethodID(
1368                                              (jclass)pr.jProviderClass,
1369                                              "enumerateInstances",
1370                                              "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ["
1371                                                  "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)["
1372                                                      "Lorg/pegasus/jmpi/CIMInstance;");
1373 mark.hamzy      1.43 
1374                                     if (id != NULL)
1375                                     {
1376                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
1377 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1378                                             "handleEnumerateInstances: "
1379                                                 "Found METHOD_CIMINSTANCEPROVIDER.");
1380 mark.hamzy      1.43                }
1381                                 }
1382                              }
1383                              else if (interfaceType == "JMPIExperimental")
1384 mark.hamzy      1.25         {
1385 marek           1.68            id = env->GetMethodID(
1386                                          (jclass)pr.jProviderClass,
1387                                          "enumerateInstances",
1388                                          "(Lorg/pegasus/jmpi/OperationContext;"
1389                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
1390                                                  "Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)"
1391                                                      "Ljava/util/Vector;");
1392 mark.hamzy      1.33 
1393 mark.hamzy      1.43            if (id != NULL)
1394                                 {
1395                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
1396 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1397                                         "handleEnumerateInstances: "
1398                                             "Found METHOD_INSTANCEPROVIDER2.");
1399 mark.hamzy      1.43            }
1400                                 if (id == NULL)
1401                                 {
1402                                     env->ExceptionClear();
1403 marek           1.68                id = env->GetMethodID(
1404                                              (jclass)pr.jProviderClass,
1405                                              "enumerateInstances",
1406                                              "(Lorg/pegasus/jmpi/OperationContext;"
1407                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
1408                                                      "Lorg/pegasus/jmpi/CIMClass;ZZ["
1409                                                          "Ljava/lang/String;)["
1410                                                              "Lorg/pegasus/jmpi/CIMInstance;");
1411 mark.hamzy      1.43 
1412                                     if (id != NULL)
1413                                     {
1414                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
1415 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1416                                             "handleEnumerateInstances: "
1417                                                 "Found METHOD_CIMINSTANCEPROVIDER2.");
1418 mark.hamzy      1.43                }
1419                                 }
1420 mark.hamzy      1.25         }
1421                      
1422                              if (id == NULL)
1423                              {
1424 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1425 thilo.boehm     1.69                 "handleEnumerateInstances: No method provider found!");
1426 mark.hamzy      1.43 
1427                                 PEG_METHOD_EXIT();
1428 schuur          1.1  
1429 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
1430                                     CIM_ERR_FAILED,
1431                                     MessageLoaderParms(
1432 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
1433 marek           1.68                    "Could not find a method for the provider based on "
1434                                             "InterfaceType."));
1435 mark.hamzy      1.25         }
1436 schuur          1.12 
1437                              JMPIjvm::checkException(env);
1438 mark.hamzy      1.23 
1439 mark.hamzy      1.25         switch (eMethodFound)
1440                              {
1441 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
1442 mark.hamzy      1.25         {
1443 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
1444                                                      CIMObjectPath*,
1445                                                      jlong,
1446                                                      objectPath);
1447                                  jobject jcop = env->NewObject(
1448                                                     jv->CIMObjectPathClassRef,
1449                                                     jv->CIMObjectPathNewJ,
1450                                                     jcopRef);
1451 mark.hamzy      1.23 
1452 mark.hamzy      1.25             JMPIjvm::checkException(env);
1453 schuur          1.1  
1454 mark.hamzy      1.40             CIMClass cls;
1455                      
1456                                  try
1457                                  {
1458 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1459                                         "handleEnumerateInstances: "
1460                                             "enter(METHOD_CIMINSTANCEPROVIDER): "
1461                                             "cimom_handle->getClass(%s).",
1462                                         (const char*)request->className.getString().getCString()
1463                                         ));
1464                      
1465 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
1466                      
1467                                     cls = pr._cimom_handle->getClass(context,
1468                                                                      request->nameSpace,
1469                                                                      request->className,
1470                                                                      false,
1471                                                                      true,
1472                                                                      true,
1473                                                                      CIMPropertyList());
1474 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1475                                         "handleEnumerateInstances: "
1476                                             "exit(METHOD_CIMINSTANCEPROVIDER): "
1477                                             "cimom_handle->getClass(%s).",
1478                                         (const char*)request->className.getString().getCString()
1479                                         ));
1480                      
1481 mark.hamzy      1.40             }
1482                                  catch (CIMException e)
1483                                  {
1484 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1485 thilo.boehm     1.69                    "handleEnumerateInstances: "
1486                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
1487                                             "during cimom_handle->getClass(%s): %s ",
1488                                         (const char*)request->className.getString().getCString(),
1489                                         (const char*)e.getMessage().getCString()
1490                                         ));
1491                      
1492                                     PEG_METHOD_EXIT();
1493 mark.hamzy      1.40                throw;
1494                                  }
1495                      
1496 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1497                      
1498 mark.hamzy      1.25             JMPIjvm::checkException(env);
1499 schuur          1.1  
1500 mark.hamzy      1.59             jlong   jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1501 marek           1.68             jobject jcc = env->NewObject(
1502                                                    jv->CIMClassClassRef,
1503                                                    jv->CIMClassNewJ,
1504                                                    jccRef);
1505 schuur          1.13 
1506 mark.hamzy      1.23             JMPIjvm::checkException(env);
1507 schuur          1.1  
1508 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1509 kumpf           1.55 
1510                                  StatProviderTimeMeasurement providerTime(response);
1511                      
1512 marek           1.68             jobjectArray jAr  = (jobjectArray)env->CallObjectMethod(
1513                                                          (jobject)pr.jProvider,
1514                                                          id,
1515                                                          jcop,
1516                                                          JMPI_LOCALONLY,
1517                                                          JMPI_INCLUDE_QUALIFIERS,
1518                                                          request->includeClassOrigin,
1519                                                          jPropertyList,
1520                                                          jcc);
1521 mark.hamzy      1.25 
1522 mark.hamzy      1.23             JMPIjvm::checkException(env);
1523                      
1524                                  handler.processing();
1525 mark.hamzy      1.25             if (jAr) {
1526                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1527 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1528                      
1529 mark.hamzy      1.29                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
1530                      
1531 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1532 schuur          1.13 
1533 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
1534                                                                jciRet,
1535                                                                JMPIjvm::jv.CIMInstanceCInst);
1536                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1537                                                                   jlong,
1538                                                                   CIMInstance*,
1539                                                                   jciRetRef);
1540 schuur          1.13 
1541 mark.hamzy      1.36                     /* Fix for 4237 */
1542 mark.hamzy      1.40                     CIMClass cls;
1543                      
1544                                          try
1545                                          {
1546 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1547                                                 "handleEnumerateInstances: "
1548                                                     "enter: cimom_handle->getClass(%s).",
1549                                                 (const char*)ciRet->
1550                                                     getClassName().getString().getCString()
1551                                                 ));
1552                      
1553 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
1554                      
1555                                             cls = pr._cimom_handle->getClass(context,
1556                                                                              request->nameSpace,
1557                                                                              ciRet->getClassName(),
1558                                                                              false,
1559                                                                              true,
1560                                                                              true,
1561                                                                              CIMPropertyList());
1562 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1563                                                 "handleEnumerateInstances: "
1564                                                     "exit: cimom_handle->getClass(%s).",
1565                                                 (const char*)ciRet->
1566                                                     getClassName().getString().getCString()
1567                                                 ));
1568                      
1569 mark.hamzy      1.40                     }
1570                                          catch (CIMException e)
1571                                          {
1572 marek           1.71                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1573 thilo.boehm     1.69                            "handleEnumerateInstances: "
1574                                                 "Caught CIMExcetion "
1575                                                     "during cimom_handle->getClass(%s): %s ",
1576                                                 (const char*)ciRet->
1577                                                      getClassName().getString().getCString(),
1578                                                 (const char*)e.getMessage().getCString()
1579                                                 ));
1580                      
1581                                             PEG_METHOD_EXIT();
1582 mark.hamzy      1.40                        throw;
1583                                          }
1584                      
1585 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1586 schuur          1.13 
1587 mark.hamzy      1.29                     handler.deliver(*ciRet);
1588 mark.hamzy      1.23                 }
1589                                  }
1590                                  handler.complete();
1591 mark.hamzy      1.25             break;
1592 schuur          1.13         }
1593 mark.hamzy      1.25 
1594 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
1595                              {
1596 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
1597                                                     OperationContext*,
1598                                                     jlong,
1599                                                     &request->operationContext);
1600                                  jobject joc = env->NewObject(
1601                                                    jv->OperationContextClassRef,
1602                                                    jv->OperationContextNewJ,
1603                                                    jocRef);
1604                      
1605                                  jlong jcopRef = DEBUG_ConvertCToJava(
1606                                                      CIMObjectPath*,
1607                                                      jlong,
1608                                                      objectPath);
1609                                  jobject jcop = env->NewObject(
1610                                                     jv->CIMObjectPathClassRef,
1611                                                     jv->CIMObjectPathNewJ,
1612                                                     jcopRef);
1613 mark.hamzy      1.43 
1614                                  JMPIjvm::checkException(env);
1615                      
1616                                  CIMClass cls;
1617                      
1618                                  try
1619                                  {
1620 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1621                                         "handleEnumerateInstances: "
1622                                             "enter(METHOD_CIMINSTANCEPROVIDER2): "
1623                                             "cimom_handle->getClass(%s).",
1624                                         (const char*)request->className.getString().getCString()
1625                                         ));
1626                      
1627 mark.hamzy      1.43                AutoMutex lock (pr._cimomMutex);
1628                      
1629                                     cls = pr._cimom_handle->getClass(context,
1630                                                                      request->nameSpace,
1631                                                                      request->className,
1632                                                                      false,
1633                                                                      true,
1634                                                                      true,
1635                                                                      CIMPropertyList());
1636 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1637                                         "handleEnumerateInstances: "
1638                                             "exit(METHOD_CIMINSTANCEPROVIDER2): "
1639                                             "cimom_handle->getClass(%s).",
1640                                         (const char*)request->className.getString().getCString()
1641                                         ));
1642 mark.hamzy      1.43             }
1643                                  catch (CIMException e)
1644                                  {
1645 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1646 thilo.boehm     1.69                    "handleEnumerateInstances: "
1647                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
1648                                             "during cimom_handle->getClass(%s): %s ",
1649                                         (const char*)request->className.getString().getCString(),
1650                                         (const char*)e.getMessage().getCString()
1651                                         ));
1652                      
1653                                     PEG_METHOD_EXIT();
1654 mark.hamzy      1.43                throw;
1655                                  }
1656                      
1657                                  CIMClass *pcls = new CIMClass (cls);
1658                      
1659                                  JMPIjvm::checkException(env);
1660                      
1661 mark.hamzy      1.59             jlong   jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1662 marek           1.68             jobject jcc = env->NewObject(
1663                                                    jv->CIMClassClassRef,
1664                                                    jv->CIMClassNewJ,
1665                                                    jccRef);
1666 mark.hamzy      1.43 
1667                                  JMPIjvm::checkException(env);
1668                      
1669                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1670 kumpf           1.55 
1671                                  StatProviderTimeMeasurement providerTime(response);
1672                      
1673 marek           1.68             jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
1674                                                         (jobject)pr.jProvider,
1675                                                         id,
1676                                                         joc,
1677                                                         jcop,
1678                                                         jcc,
1679                                                         JMPI_INCLUDE_QUALIFIERS,
1680                                                         request->includeClassOrigin,
1681                                                         jPropertyList);
1682 mark.hamzy      1.43 
1683                                  JMPIjvm::checkException(env);
1684                      
1685                                  if (joc)
1686                                  {
1687 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
1688 mark.hamzy      1.43 
1689                                     JMPIjvm::checkException(env);
1690                                  }
1691                      
1692                                  handler.processing();
1693                                  if (jAr) {
1694                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1695                                          JMPIjvm::checkException(env);
1696                      
1697                                          jobject jciRet = env->GetObjectArrayElement(jAr,i);
1698                      
1699                                          JMPIjvm::checkException(env);
1700                      
1701 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
1702                                                                jciRet,
1703                                                                JMPIjvm::jv.CIMInstanceCInst);
1704                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1705                                                                   jlong,
1706                                                                   CIMInstance*,
1707                                                                   jciRetRef);
1708 mark.hamzy      1.43 
1709                                          /* Fix for 4237 */
1710                                          CIMClass cls;
1711                      
1712                                          try
1713                                          {
1714 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1715                                                 "handleEnumerateInstancesRequest: "
1716                                                     "enter: cimom_handle->getClass(%s).",
1717                                                 (const char*)ciRet->
1718                                                      getClassName().getString().getCString()
1719                                                 ));
1720                      
1721 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
1722                      
1723                                             cls = pr._cimom_handle->getClass(context,
1724                                                                              request->nameSpace,
1725                                                                              ciRet->getClassName(),
1726                                                                              false,
1727                                                                              true,
1728                                                                              true,
1729                                                                              CIMPropertyList());
1730 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1731                                                 "handleEnumerateInstancesRequest: "
1732                                                     "exit: cimom_handle->getClass(%s).",
1733                                                 (const char*)ciRet->
1734                                                      getClassName().getString().getCString()
1735                                                 ));
1736 mark.hamzy      1.43                     }
1737                                          catch (CIMException e)
1738                                          {
1739 marek           1.71                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1740 thilo.boehm     1.69                            "handleEnumerateInstancesRequest: "
1741                                                 "Caught CIMExcetion "
1742                                                    "cimom_handle->getClass(%s): %s ",
1743                                                 (const char*)ciRet->
1744                                                     getClassName().getString().getCString(),
1745                                                 (const char*)e.getMessage().getCString()
1746                                                 ));
1747                      
1748                                             PEG_METHOD_EXIT();
1749 mark.hamzy      1.43                        throw;
1750                                          }
1751                      
1752                                          JMPIjvm::checkException(env);
1753                      
1754                                          handler.deliver(*ciRet);
1755                                      }
1756                                  }
1757                                  handler.complete();
1758                                  break;
1759                              }
1760                      
1761 mark.hamzy      1.33         /* Fix for 4189 */
1762 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
1763 mark.hamzy      1.33         {
1764 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
1765                                                     OperationContext*,
1766                                                     jlong,
1767                                                     &request->operationContext);
1768                                  jobject joc = env->NewObject(
1769                                                    jv->OperationContextClassRef,
1770                                                    jv->OperationContextNewJ,
1771                                                    jocRef);
1772                      
1773                                  jlong jcopRef = DEBUG_ConvertCToJava(
1774                                                      CIMObjectPath*,
1775                                                      jlong,
1776                                                      objectPath);
1777                                  jobject jcop = env->NewObject(
1778                                                     jv->CIMObjectPathClassRef,
1779                                                     jv->CIMObjectPathNewJ,
1780                                                     jcopRef);
1781 mark.hamzy      1.33 
1782                                  JMPIjvm::checkException(env);
1783                      
1784 mark.hamzy      1.40             CIMClass cls;
1785                      
1786                                  try
1787                                  {
1788 thilo.boehm     1.69                 PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1789                                          "handleEnumerateInstancesRequest: "
1790                                              "enter(METHOD_INSTANCEPROVIDER2): "
1791                                              "cimom_handle->getClass(%s).",
1792                                          (const char*)request->className.getString().getCString()
1793                                          ));
1794                      
1795 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
1796                      
1797                                     cls = pr._cimom_handle->getClass (context,
1798                                                                       request->nameSpace,
1799                                                                       request->className,
1800                                                                       false,
1801                                                                       true,
1802                                                                       true,
1803                                                                       CIMPropertyList());
1804 thilo.boehm     1.69 
1805                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1806                                         "handleEnumerateInstancesRequest: "
1807                                             "enter(METHOD_INSTANCEPROVIDER2): "
1808                                             "cimom_handle->getClass(%s).",
1809                                         (const char*)request->className.getString().getCString()
1810                                         ));
1811                      
1812 mark.hamzy      1.40             }
1813                                  catch (CIMException e)
1814                                  {
1815 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1816 thilo.boehm     1.69                    "handleEnumerateInstancesRequest: "
1817                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
1818                                             "during cimom_handle->getClass(%s): %s ",
1819                                         (const char*)request->className.getString().getCString(),
1820                                         (const char*)e.getMessage().getCString()
1821                                         ));
1822                      
1823                                     PEG_METHOD_EXIT();
1824 mark.hamzy      1.40                throw;
1825                                  }
1826                      
1827 mark.hamzy      1.33             CIMClass *pcls = new CIMClass (cls);
1828                      
1829                                  JMPIjvm::checkException(env);
1830                      
1831 mark.hamzy      1.59             jlong   jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1832 marek           1.68             jobject jcc = env->NewObject(
1833                                                    jv->CIMClassClassRef,
1834                                                    jv->CIMClassNewJ,
1835                                                    jccRef);
1836 mark.hamzy      1.33 
1837                                  JMPIjvm::checkException(env);
1838                      
1839                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1840 kumpf           1.55 
1841                                  StatProviderTimeMeasurement providerTime(response);
1842                      
1843 marek           1.68             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1844                                                                       id,
1845                                                                       joc,
1846                                                                       jcop,
1847                                                                       jcc,
1848                                                                       JMPI_INCLUDE_QUALIFIERS,
1849                                                                       request->includeClassOrigin,
1850                                                                       jPropertyList);
1851 mark.hamzy      1.33 
1852                                  JMPIjvm::checkException(env);
1853                      
1854 mark.hamzy      1.43             if (joc)
1855                                  {
1856 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
1857 mark.hamzy      1.43 
1858                                     JMPIjvm::checkException(env);
1859                                  }
1860                      
1861 mark.hamzy      1.33             handler.processing();
1862                                  if (jVec) {
1863 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
1864                                            i<m;
1865                                            i++)
1866                                      {
1867 mark.hamzy      1.33                     JMPIjvm::checkException(env);
1868                      
1869 marek           1.68                     jobject jciRet = env->CallObjectMethod(
1870                                                               jVec,
1871                                                               JMPIjvm::jv.VectorElementAt,
1872                                                               i);
1873 mark.hamzy      1.33 
1874                                          JMPIjvm::checkException(env);
1875                      
1876 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
1877                                                                jciRet,
1878                                                                JMPIjvm::jv.CIMInstanceCInst);
1879                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
1880                                                                   jlong,
1881                                                                   CIMInstance*,
1882                                                                   jciRetRef);
1883 mark.hamzy      1.33 
1884                                          /* Fix for 4237 */
1885 mark.hamzy      1.40                     CIMClass             cls;
1886                      
1887                                          try
1888                                          {
1889 thilo.boehm     1.69                         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1890                                                  "handleEnumerateInstancesRequest: "
1891                                                      "enter: cimom_handle->getClass(%s).",
1892                                                 (const char*)ciRet->
1893                                                     getClassName().getString().getCString()
1894                                                  ));
1895                      
1896 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
1897                      
1898                                             cls = pr._cimom_handle->getClass(context,
1899                                                                              request->nameSpace,
1900                                                                              ciRet->getClassName(),
1901                                                                              false,
1902                                                                              true,
1903                                                                              true,
1904                                                                              CIMPropertyList());
1905 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1906                                                 "handleEnumerateInstancesRequest: "
1907                                                     "exit: cimom_handle->getClass(%s).",
1908                                                 (const char*)ciRet->
1909                                                     getClassName().getString().getCString()
1910                                                 ));
1911 mark.hamzy      1.40                     }
1912                                          catch (CIMException e)
1913                                          {
1914 marek           1.71                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1915 thilo.boehm     1.69                            "handleEnumerateInstancesRequest: "
1916                                                 "Caught CIMExcetion "
1917                                                    "cimom_handle->getClass(%s): %s ",
1918                                                 (const char*)ciRet->
1919                                                    getClassName().getString().getCString(),
1920                                                 (const char*)e.getMessage().getCString()
1921                                                 ));
1922                      
1923                                             PEG_METHOD_EXIT();
1924 mark.hamzy      1.40                        throw;
1925                                          }
1926                      
1927 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
1928 mark.hamzy      1.33 
1929                                          JMPIjvm::checkException(env);
1930                      
1931                                          handler.deliver(*ciRet);
1932                                      }
1933                                  }
1934                                  handler.complete();
1935                                  break;
1936                              }
1937                              /* Fix for 4189 */
1938                      
1939 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
1940 mark.hamzy      1.25         {
1941 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
1942                                                      CIMObjectPath*,
1943                                                      jlong,
1944                                                      objectPath);
1945                                  jobject jcop = env->NewObject(
1946                                                     jv->CIMObjectPathClassRef,
1947                                                     jv->CIMObjectPathNewJ,
1948                                                     jcopRef);
1949 mark.hamzy      1.25 
1950                                  JMPIjvm::checkException(env);
1951                      
1952 mark.hamzy      1.40             CIMClass cls;
1953                      
1954                                  try
1955                                  {
1956 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1957                                         "handleEnumerateInstancesRequest: "
1958                                             "enter(METHOD_INSTANCEPROVIDER): "
1959                                             "cimom_handle->getClass(%s).",
1960                                         (const char*)request->className.getString().getCString()
1961                                         ));
1962                      
1963 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
1964                      
1965                                     cls = pr._cimom_handle->getClass(context,
1966                                                                      request->nameSpace,
1967                                                                      request->className,
1968                                                                      false,
1969                                                                      true,
1970                                                                      true,
1971                                                                      CIMPropertyList());
1972 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1973                                         "handleEnumerateInstancesRequest: "
1974                                             "exit(METHOD_INSTANCEPROVIDER): "
1975                                             "cimom_handle->getClass(%s).",
1976                                         (const char*)request->className.getString().getCString()
1977                                         ));
1978 mark.hamzy      1.40             }
1979                                  catch (CIMException e)
1980                                  {
1981 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
1982 thilo.boehm     1.69                    "handleEnumerateInstancesRequest: "
1983                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
1984                                             "during cimom_handle->getClass(%s): %s ",
1985                                         (const char*)request->className.getString().getCString(),
1986                                         (const char*)e.getMessage().getCString()
1987                                         ));
1988                      
1989                                     PEG_METHOD_EXIT();
1990 mark.hamzy      1.40                throw;
1991                                  }
1992                      
1993 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
1994                      
1995 mark.hamzy      1.25             JMPIjvm::checkException(env);
1996                      
1997 mark.hamzy      1.59             jlong   jccRef = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
1998 marek           1.68             jobject jcc = env->NewObject(
1999                                                    jv->CIMClassClassRef,
2000                                                    jv->CIMClassNewJ,
2001                                                    jccRef);
2002 mark.hamzy      1.25 
2003                                  JMPIjvm::checkException(env);
2004                      
2005 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2006                      
2007 mark.hamzy      1.30             // Modified for Bugzilla# 3679
2008 mark.hamzy      1.25             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2009                                                                       id,
2010 mark.hamzy      1.29                                                  jcop,
2011 mark.hamzy      1.33                                                  request->deepInheritance,
2012 mark.hamzy      1.29                                                  jcc,
2013 mark.hamzy      1.30                                                  JMPI_LOCALONLY);
2014 mark.hamzy      1.25 
2015 mark.hamzy      1.23             JMPIjvm::checkException(env);
2016 schuur          1.12 
2017 mark.hamzy      1.23             handler.processing();
2018 mark.hamzy      1.25             if (jVec) {
2019 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
2020                                            i<m;
2021                                            i++)
2022                                      {
2023 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2024                      
2025 marek           1.68                     jobject jciRet = env->CallObjectMethod(
2026                                                               jVec,
2027                                                               JMPIjvm::jv.VectorElementAt,
2028                                                               i);
2029 mark.hamzy      1.29 
2030 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2031 schuur          1.12 
2032 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
2033                                                                jciRet,
2034                                                                JMPIjvm::jv.CIMInstanceCInst);
2035                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
2036                                                                   jlong,
2037                                                                   CIMInstance*,
2038                                                                   jciRetRef);
2039 schuur          1.12 
2040 mark.hamzy      1.33                     /* Fix for 4237 */
2041 mark.hamzy      1.40                     CIMClass cls;
2042                      
2043                                          try
2044                                          {
2045 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2046                                                 "handleEnumerateInstancesRequest: "
2047                                                     "enter: cimom_handle->getClass(%s).",
2048                                                 (const char*)ciRet->
2049                                                     getClassName().getString().getCString()
2050                                                 ));
2051                      
2052 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
2053                      
2054                                             cls = pr._cimom_handle->getClass(context,
2055                                                                              request->nameSpace,
2056                                                                              ciRet->getClassName(),
2057                                                                              false,
2058                                                                              true,
2059                                                                              true,
2060                                                                              CIMPropertyList());
2061 thilo.boehm     1.69 
2062                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2063                                                 "handleEnumerateInstancesRequest: "
2064                                                     "exit: cimom_handle->getClass(%s).",
2065                                                 (const char*)ciRet->
2066                                                     getClassName().getString().getCString()
2067                                                 ));
2068 mark.hamzy      1.40                     }
2069                                          catch (CIMException e)
2070                                          {
2071 marek           1.71                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2072 thilo.boehm     1.69                            "handleEnumerateInstancesRequest: "
2073                                                 "Caught CIMExcetion "
2074                                                     "during cimom_handle->getClass(%s): %s ",
2075                                                 (const char*)ciRet->
2076                                                     getClassName().getString().getCString(),
2077                                                 (const char*)e.getMessage().getCString()
2078                                                 ));
2079                      
2080                                             PEG_METHOD_EXIT();
2081 mark.hamzy      1.40                        throw;
2082                                          }
2083 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
2084 mark.hamzy      1.33 
2085                                          JMPIjvm::checkException(env);
2086                      
2087 mark.hamzy      1.29                     handler.deliver(*ciRet);
2088 mark.hamzy      1.23                 }
2089                                  }
2090                                  handler.complete();
2091 mark.hamzy      1.25             break;
2092                              }
2093                      
2094                              case METHOD_UNKNOWN:
2095                              {
2096 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2097 thilo.boehm     1.69                 "handleEnumerateInstancesRequest: Unknown method provider!");
2098 mark.hamzy      1.25             break;
2099                              }
2100 schuur          1.1          }
2101                          }
2102                          HandlerCatch(handler);
2103 schuur          1.12 
2104 schuur          1.11     if (env) JMPIjvm::detachThread();
2105 schuur          1.12 
2106 schuur          1.1      PEG_METHOD_EXIT();
2107                      
2108                          return(response);
2109                      }
2110                      
2111 marek           1.68 Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(
2112                          const Message * message) throw()
2113 schuur          1.1  {
2114 marek           1.68     PEG_METHOD_ENTER(
2115                              TRC_PROVIDERMANAGER,
2116                              "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
2117 schuur          1.1  
2118 kumpf           1.55     HandlerIntro(EnumerateInstanceNames,message,request,response, handler);
2119 mark.hamzy      1.23 
2120 mark.hamzy      1.25     typedef enum {
2121                             METHOD_UNKNOWN = 0,
2122 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
2123                             METHOD_CIMINSTANCEPROVIDER2,
2124                             METHOD_INSTANCEPROVIDER,
2125                             METHOD_INSTANCEPROVIDER2,
2126 mark.hamzy      1.25     } METHOD_VERSION;
2127                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2128                          JNIEnv          *env           = NULL;
2129 schuur          1.13 
2130 schuur          1.1      try {
2131 marek           1.71         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2132 thilo.boehm     1.69              "handleEnumerateInstanceNamesRequest: "
2133 kumpf           1.77                  "name space = %s class name = %s",
2134 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
2135                                   (const char*)request->className.getString().getCString()));
2136 mark.hamzy      1.23 
2137 mark.hamzy      1.25         // make target object path
2138 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2139                                                                             request->nameSpace,
2140                                                                             request->className);
2141 schuur          1.1  
2142                              // resolve provider name
2143 kumpf           1.2          ProviderName name = _resolveProviderName(
2144                                  request->operationContext.get(ProviderIdContainer::NAME));
2145 schuur          1.1  
2146                              // get cached or load new provider module
2147 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
2148                                                                      name.getPhysicalName(),
2149                                                                      name.getLogicalName());
2150 schuur          1.1  
2151                              // convert arguments
2152                              OperationContext context;
2153                      
2154 marek           1.68         context.insert(
2155                                  request->operationContext.get(IdentityContainer::NAME));
2156                              context.insert(
2157                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
2158                              context.insert(
2159                                  request->operationContext.get(ContentLanguageListContainer::NAME));
2160 schuur          1.1  
2161 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
2162 schuur          1.1  
2163 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2164                                  "handleEnumerateInstanceNamesRequest: "
2165                                  "Calling provider: %s",(const char*)pr.getName().getCString()));
2166 schuur          1.1  
2167 mark.hamzy      1.25         JvmVector *jv = 0;
2168 schuur          1.12 
2169 mark.hamzy      1.25         env = JMPIjvm::attachThread(&jv);
2170 schuur          1.1  
2171 mark.hamzy      1.37         if (!env)
2172                              {
2173 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2174                                      "handleEnumerateInstanceNamesRequest: "
2175                                           "Could not initialize the JVM (Java Virtual Machine) "
2176                                           "runtime environment.");
2177                      
2178 mark.hamzy      1.37             PEG_METHOD_EXIT();
2179                      
2180 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
2181                                      CIM_ERR_FAILED,
2182                                      MessageLoaderParms(
2183 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
2184 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
2185                                               "runtime environment."));
2186 mark.hamzy      1.37         }
2187                      
2188 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
2189 schuur          1.12 
2190 mark.hamzy      1.43         jmethodID id               = NULL;
2191                              String    interfaceType;
2192                              String    interfaceVersion;
2193                      
2194 marek           1.68         getInterfaceType(
2195                                  request->operationContext.get(ProviderIdContainer::NAME),
2196                                  interfaceType,
2197                                  interfaceVersion);
2198 mark.hamzy      1.43 
2199                              if (interfaceType == "JMPI")
2200                              {
2201 marek           1.68            id = env->GetMethodID(
2202                                          (jclass)pr.jProviderClass,
2203                                          "enumInstances",
2204                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
2205                                              "ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
2206 mark.hamzy      1.43 
2207                                 if (id != NULL)
2208                                 {
2209                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2210 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2211                                         "handleEnumerateInstanceNamesRequest: "
2212                                             "Found METHOD_INSTANCEPROVIDER.");
2213 mark.hamzy      1.43            }
2214 mark.hamzy      1.23 
2215 mark.hamzy      1.43            if (id == NULL)
2216                                 {
2217                                     env->ExceptionClear();
2218 schuur          1.1  
2219 marek           1.68                id = env->GetMethodID(
2220                                             (jclass)pr.jProviderClass,
2221                                             "enumerateInstanceNames",
2222                                             "(Lorg/pegasus/jmpi/CIMObjectPath;"
2223                                                 "Lorg/pegasus/jmpi/CIMClass;)["
2224                                                     "Lorg/pegasus/jmpi/CIMObjectPath;");
2225 mark.hamzy      1.43 
2226                                     if (id != NULL)
2227                                     {
2228                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
2229 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2230                                             "handleEnumerateInstanceNamesRequest: "
2231                                                 "Found METHOD_CIMINSTANCEPROVIDER.");
2232 mark.hamzy      1.43                }
2233                                 }
2234                              }
2235                              else if (interfaceType == "JMPIExperimental")
2236 mark.hamzy      1.25         {
2237 marek           1.68            id = env->GetMethodID(
2238                                          (jclass)pr.jProviderClass,
2239                                          "enumerateInstanceNames",
2240                                          "(Lorg/pegasus/jmpi/OperationContext;"
2241                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
2242                                                  "Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
2243 schuur          1.1  
2244 mark.hamzy      1.43            if (id != NULL)
2245                                 {
2246                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2247 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2248                                         "handleEnumerateInstanceNamesRequest: "
2249                                             "Found METHOD_INSTANCEPROVIDER2.");
2250 mark.hamzy      1.43            }
2251 schuur          1.1  
2252 mark.hamzy      1.43            if (id == NULL)
2253                                 {
2254                                     env->ExceptionClear();
2255 schuur          1.13 
2256 marek           1.68                id = env->GetMethodID(
2257                                              (jclass)pr.jProviderClass,
2258                                              "enumerateInstanceNames",
2259                                              "(Lorg/pegasus/jmpi/OperationContext;"
2260                                                   "Lorg/pegasus/jmpi/CIMObjectPath;"
2261                                                       "Lorg/pegasus/jmpi/CIMClass;)"
2262                                                           "[Lorg/pegasus/jmpi/CIMObjectPath;");
2263 mark.hamzy      1.43 
2264                                     if (id != NULL)
2265                                     {
2266                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
2267 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2268                                             "handleEnumerateInstanceNamesRequest: "
2269                                                 "Found METHOD_CIMINSTANCEPROVIDER2.");
2270 mark.hamzy      1.43                }
2271                                 }
2272 mark.hamzy      1.23         }
2273 mark.hamzy      1.25 
2274 mark.hamzy      1.36         if (id == NULL)
2275                              {
2276 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2277 thilo.boehm     1.69                 "handleEnumerateInstanceNamesRequest: "
2278                                          "No method provider found!");
2279 mark.hamzy      1.36 
2280 mark.hamzy      1.43            PEG_METHOD_EXIT();
2281 mark.hamzy      1.36 
2282 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
2283                                     CIM_ERR_FAILED,
2284                                     MessageLoaderParms(
2285 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
2286 marek           1.68                    "Could not find a method for the provider based on "
2287                                             "InterfaceType."));
2288 mark.hamzy      1.36         }
2289                      
2290 schuur          1.1          JMPIjvm::checkException(env);
2291                      
2292 mark.hamzy      1.25         switch (eMethodFound)
2293                              {
2294 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
2295 mark.hamzy      1.25         {
2296 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
2297                                                      CIMObjectPath*,
2298                                                      jlong,
2299                                                      objectPath);
2300                                  jobject jcop = env->NewObject(
2301                                                     jv->CIMObjectPathClassRef,
2302                                                     jv->CIMObjectPathNewJ,
2303                                                     jcopRef);
2304 mark.hamzy      1.25 
2305                                  JMPIjvm::checkException(env);
2306                      
2307 mark.hamzy      1.40             CIMClass cls;
2308                      
2309                                  try
2310                                  {
2311 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2312                                         "handleEnumerateInstanceNamesRequest: "
2313                                             "enter(METHOD_CIMINSTANCEPROVIDER): "
2314                                             "cimom_handle->getClass(%s).",
2315                                         (const char*)request->className.getString().getCString()
2316                                         ));
2317                      
2318 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
2319                      
2320                                     cls = pr._cimom_handle->getClass(context,
2321                                                                      request->nameSpace,
2322                                                                      request->className,
2323                                                                      false,
2324                                                                      true,
2325                                                                      true,
2326                                                                      CIMPropertyList());
2327 thilo.boehm     1.69 
2328                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2329                                         "handleEnumerateInstanceNamesRequest: "
2330                                             "exit(METHOD_CIMINSTANCEPROVIDER): "
2331                                             "cimom_handle->getClass(%s).",
2332                                         (const char*)request->className.getString().getCString()
2333                                         ));
2334                      
2335 mark.hamzy      1.40             }
2336                                  catch (CIMException e)
2337                                  {
2338 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2339 thilo.boehm     1.69                    "handleEnumerateInstanceNamesRequest: "
2340                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
2341                                             "during cimom_handle->getClass(%s): %s ",
2342                                         (const char*)request->className.getString().getCString(),
2343                                         (const char*)e.getMessage().getCString()
2344                                         ));
2345                      
2346                                     PEG_METHOD_EXIT();
2347 mark.hamzy      1.40                throw;
2348                                  }
2349                      
2350 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
2351 mark.hamzy      1.25 
2352                                  JMPIjvm::checkException(env);
2353                      
2354 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava(
2355                                                           CIMClass*,
2356                                                           jlong,
2357                                                           pcls);
2358                                  jobject jcimClass = env->NewObject(
2359                                                          jv->CIMClassClassRef,
2360                                                          jv->CIMClassNewJ,
2361                                                          jcimClassRef);
2362 mark.hamzy      1.25 
2363                                  JMPIjvm::checkException(env);
2364                      
2365 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2366                      
2367 marek           1.68             jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
2368                                                         (jobject)pr.jProvider,
2369                                                         id,
2370                                                         jcop,
2371                                                         jcimClass);
2372 mark.hamzy      1.25 
2373 mark.hamzy      1.23             JMPIjvm::checkException(env);
2374                      
2375                                  handler.processing();
2376 mark.hamzy      1.25             if (jAr) {
2377                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2378 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2379                      
2380 mark.hamzy      1.29                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
2381                      
2382 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2383                      
2384 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
2385                                                                 jcopRet,
2386                                                                 JMPIjvm::jv.CIMObjectPathCInst);
2387                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2388                                                                      jlong,
2389                                                                      CIMObjectPath*,
2390                                                                      jcopRetRef);
2391 schuur          1.13 
2392 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2393 schuur          1.13 
2394 mark.hamzy      1.29                     handler.deliver(*copRet);
2395 mark.hamzy      1.23                 }
2396                                  }
2397                                  handler.complete();
2398 mark.hamzy      1.25             break;
2399 schuur          1.13         }
2400 mark.hamzy      1.25 
2401 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
2402 mark.hamzy      1.36         {
2403 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
2404                                                     OperationContext*,
2405                                                     jlong,
2406                                                     &request->operationContext);
2407 kumpf           1.77             jobject joc = env->NewObject(
2408 marek           1.68                               jv->OperationContextClassRef,
2409                                                    jv->OperationContextNewJ,
2410                                                    jocRef);
2411                      
2412                                  jlong jcopRef = DEBUG_ConvertCToJava(
2413                                                      CIMObjectPath*,
2414                                                      jlong,
2415                                                      objectPath);
2416                                  jobject jcop = env->NewObject(
2417                                                     jv->CIMObjectPathClassRef,
2418                                                     jv->CIMObjectPathNewJ,
2419                                                     jcopRef);
2420 mark.hamzy      1.36 
2421                                  JMPIjvm::checkException(env);
2422                      
2423 mark.hamzy      1.40             CIMClass cls;
2424                      
2425                                  try
2426                                  {
2427 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2428                                         "handleEnumerateInstanceNamesRequest: "
2429                                             "enter(METHOD_CIMINSTANCEPROVIDER2): "
2430                                             "cimom_handle->getClass(%s).",
2431                                         (const char*)request->className.getString().getCString()
2432                                         ));
2433                      
2434 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
2435                      
2436                                     cls = pr._cimom_handle->getClass(context,
2437                                                                      request->nameSpace,
2438                                                                      request->className,
2439                                                                      false,
2440                                                                      true,
2441                                                                      true,
2442                                                                      CIMPropertyList());
2443 thilo.boehm     1.69 
2444                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2445                                         "handleEnumerateInstanceNamesRequest: "
2446                                             "exit(METHOD_CIMINSTANCEPROVIDER2): "
2447                                             "cimom_handle->getClass(%s).",
2448                                         (const char*)request->className.getString().getCString()
2449                                         ));
2450                      
2451 mark.hamzy      1.40             }
2452                                  catch (CIMException e)
2453                                  {
2454 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2455 thilo.boehm     1.69                    "handleEnumerateInstanceNamesRequest: "
2456                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) "
2457                                             "during cimom_handle->getClass(%s): %s ",
2458                                         (const char*)request->className.getString().getCString(),
2459                                         (const char*)e.getMessage().getCString()
2460                                         ));
2461                      
2462                                     PEG_METHOD_EXIT();
2463 mark.hamzy      1.40                throw;
2464                                  }
2465                      
2466 mark.hamzy      1.36             CIMClass *pcls = new CIMClass (cls);
2467                      
2468                                  JMPIjvm::checkException(env);
2469                      
2470 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava(CIMClass*, jlong, pcls);
2471                                  jobject jcimClass = env->NewObject(
2472                                                          jv->CIMClassClassRef,
2473                                                          jv->CIMClassNewJ,
2474                                                          jcimClassRef);
2475 mark.hamzy      1.36 
2476                                  JMPIjvm::checkException(env);
2477                      
2478 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2479                      
2480 marek           1.68             jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
2481                                                         (jobject)pr.jProvider,
2482                                                         id,
2483                                                         joc,
2484                                                         jcop,
2485                                                         jcimClass);
2486 mark.hamzy      1.36 
2487                                  JMPIjvm::checkException(env);
2488                      
2489 mark.hamzy      1.43             if (joc)
2490                                  {
2491 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
2492 mark.hamzy      1.43 
2493                                     JMPIjvm::checkException(env);
2494                                  }
2495                      
2496 mark.hamzy      1.36             handler.processing();
2497 mark.hamzy      1.43             if (jAr) {
2498                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2499 mark.hamzy      1.36                     JMPIjvm::checkException(env);
2500                      
2501 mark.hamzy      1.43                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
2502 mark.hamzy      1.36 
2503                                          JMPIjvm::checkException(env);
2504                      
2505 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
2506                                                                 jcopRet,
2507                                                                 JMPIjvm::jv.CIMObjectPathCInst);
2508                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2509                                                                      jlong,
2510                                                                      CIMObjectPath*,
2511                                                                      jcopRetRef);
2512 mark.hamzy      1.36 
2513                                          JMPIjvm::checkException(env);
2514                      
2515                                          handler.deliver(*copRet);
2516                                      }
2517                                  }
2518                                  handler.complete();
2519                                  break;
2520                              }
2521                      
2522 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
2523 mark.hamzy      1.25         {
2524 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
2525                                                     OperationContext*,
2526                                                     jlong,
2527                                                     &request->operationContext);
2528                                  jobject joc = env->NewObject(
2529                                                    jv->OperationContextClassRef,
2530                                                    jv->OperationContextNewJ,
2531                                                    jocRef);
2532                      
2533                                  jlong jcopRef = DEBUG_ConvertCToJava(
2534                                                      CIMObjectPath*,
2535                                                      jlong,
2536                                                      objectPath);
2537                                  jobject jcop = env->NewObject(
2538                                                     jv->CIMObjectPathClassRef,
2539                                                     jv->CIMObjectPathNewJ,
2540                                                     jcopRef);
2541 mark.hamzy      1.25 
2542                                  JMPIjvm::checkException(env);
2543                      
2544 mark.hamzy      1.40             CIMClass cls;
2545                      
2546                                  try
2547                                  {
2548 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2549                                         "handleEnumerateInstanceNamesRequest: "
2550                                             "enter(METHOD_INSTANCEPROVIDER2): "
2551                                             "cimom_handle->getClass(%s).",
2552                                         (const char*)request->className.getString().getCString()
2553                                         ));
2554                      
2555 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
2556                      
2557                                     cls = pr._cimom_handle->getClass(context,
2558                                                                      request->nameSpace,
2559                                                                      request->className,
2560                                                                      false,
2561                                                                      true,
2562                                                                      true,
2563                                                                      CIMPropertyList());
2564 thilo.boehm     1.69 
2565                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2566                                         "handleEnumerateInstanceNamesRequest: "
2567                                             "exit(METHOD_INSTANCEPROVIDER2): "
2568                                             "cimom_handle->getClass(%s).",
2569                                         (const char*)request->className.getString().getCString()
2570                                         ));
2571                      
2572 mark.hamzy      1.40             }
2573                                  catch (CIMException e)
2574                                  {
2575 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2576 thilo.boehm     1.69                    "handleEnumerateInstanceNamesRequest: "
2577                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
2578                                             "during cimom_handle->getClass(%s): %s ",
2579                                         (const char*)request->className.getString().getCString(),
2580                                         (const char*)e.getMessage().getCString()
2581                                         ));
2582                      
2583                                     PEG_METHOD_EXIT();
2584 mark.hamzy      1.40                throw;
2585                                  }
2586                      
2587 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
2588 mark.hamzy      1.25 
2589                                  JMPIjvm::checkException(env);
2590                      
2591 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava(
2592                                                           CIMClass*,
2593                                                           jlong,
2594                                                           pcls);
2595                                  jobject jcimClass = env->NewObject(
2596                                                          jv->CIMClassClassRef,
2597                                                          jv->CIMClassNewJ,
2598                                                          jcimClassRef);
2599 mark.hamzy      1.25 
2600                                  JMPIjvm::checkException(env);
2601                      
2602 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2603                      
2604 mark.hamzy      1.25             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2605                                                                       id,
2606 mark.hamzy      1.43                                                  joc,
2607 mark.hamzy      1.29                                                  jcop,
2608                                                                       jcimClass);
2609 mark.hamzy      1.25 
2610 mark.hamzy      1.23             JMPIjvm::checkException(env);
2611                      
2612 mark.hamzy      1.43             if (joc)
2613                                  {
2614 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
2615 mark.hamzy      1.43 
2616                                     JMPIjvm::checkException(env);
2617                                  }
2618                      
2619 mark.hamzy      1.23             handler.processing();
2620 mark.hamzy      1.25             if (jVec) {
2621 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
2622                                            i<m;
2623                                            i++)
2624                                      {
2625 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2626                      
2627 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
2628                                                                jVec,
2629                                                                JMPIjvm::jv.VectorElementAt,
2630                                                                i);
2631 mark.hamzy      1.29 
2632 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2633                      
2634 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
2635                                                                 jcopRet,
2636                                                                 JMPIjvm::jv.CIMObjectPathCInst);
2637                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2638                                                                      jlong,
2639                                                                      CIMObjectPath*,
2640                                                                      jcopRetRef);
2641 schuur          1.13 
2642 mark.hamzy      1.23                     JMPIjvm::checkException(env);
2643 schuur          1.13 
2644 mark.hamzy      1.29                     handler.deliver(*copRet);
2645 mark.hamzy      1.23                 }
2646                                  }
2647                                  handler.complete();
2648 mark.hamzy      1.25             break;
2649                              }
2650                      
2651 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
2652 mark.hamzy      1.25         {
2653 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
2654                                                      CIMObjectPath*,
2655                                                      jlong,
2656                                                      objectPath);
2657                                  jobject jcop = env->NewObject(
2658                                                     jv->CIMObjectPathClassRef,
2659                                                     jv->CIMObjectPathNewJ,
2660                                                     jcopRef);
2661 mark.hamzy      1.23 
2662 mark.hamzy      1.43             JMPIjvm::checkException(env);
2663 schuur          1.1  
2664 mark.hamzy      1.43             CIMClass cls;
2665 schuur          1.1  
2666 mark.hamzy      1.43             try
2667                                  {
2668 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2669                                         "handleEnumerateInstanceNamesRequest: "
2670                                             "exit(METHOD_INSTANCEPROVIDER): "
2671                                             "cimom_handle->getClass(%s).",
2672                                         (const char*)request->className.getString().getCString()
2673                                         ));
2674                      
2675 mark.hamzy      1.43                AutoMutex lock (pr._cimomMutex);
2676                      
2677                                     cls = pr._cimom_handle->getClass(context,
2678                                                                      request->nameSpace,
2679                                                                      request->className,
2680                                                                      false,
2681                                                                      true,
2682                                                                      true,
2683                                                                      CIMPropertyList());
2684 thilo.boehm     1.69 
2685                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2686                                         "handleEnumerateInstanceNamesRequest: "
2687                                             "exit(METHOD_INSTANCEPROVIDER): "
2688                                             "cimom_handle->getClass(%s).",
2689                                         (const char*)request->className.getString().getCString()
2690                                         ));
2691 mark.hamzy      1.43             }
2692                                  catch (CIMException e)
2693                                  {
2694 marek           1.71                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2695 thilo.boehm     1.69                    "handleEnumerateInstanceNamesRequest: "
2696                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
2697                                             "during cimom_handle->getClass(%s): %s ",
2698                                         (const char*)request->className.getString().getCString(),
2699                                         (const char*)e.getMessage().getCString()
2700                                         ));
2701                      
2702                                     PEG_METHOD_EXIT();
2703 mark.hamzy      1.43                throw;
2704                                  }
2705                      
2706                                  CIMClass *pcls = new CIMClass (cls);
2707                      
2708                                  JMPIjvm::checkException(env);
2709                      
2710 marek           1.68             jlong jcimClassRef = DEBUG_ConvertCToJava(
2711                                                           CIMClass*,
2712                                                           jlong,
2713                                                           pcls);
2714                                  jobject jcimClass = env->NewObject(
2715                                                          jv->CIMClassClassRef,
2716                                                          jv->CIMClassNewJ,
2717                                                          jcimClassRef);
2718 mark.hamzy      1.43 
2719                                  JMPIjvm::checkException(env);
2720                      
2721 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2722                      
2723 mark.hamzy      1.43             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
2724                                                                       id,
2725                                                                       jcop,
2726                                                                       true,
2727                                                                       jcimClass);
2728                      
2729                                  JMPIjvm::checkException(env);
2730                      
2731                                  handler.processing();
2732                                  if (jVec) {
2733 kumpf           1.77                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
2734 marek           1.68                       i<m;
2735                                            i++)
2736                                      {
2737 mark.hamzy      1.43                     JMPIjvm::checkException(env);
2738                      
2739 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
2740                                                                jVec,
2741                                                                JMPIjvm::jv.VectorElementAt,
2742                                                                i);
2743 mark.hamzy      1.43 
2744                                          JMPIjvm::checkException(env);
2745                      
2746 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
2747                                                                 jcopRet,
2748                                                                 JMPIjvm::jv.CIMObjectPathCInst);
2749                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2750                                                                      jlong,
2751                                                                      CIMObjectPath*,
2752                                                                      jcopRetRef);
2753 mark.hamzy      1.43 
2754                                          JMPIjvm::checkException(env);
2755                      
2756                                          handler.deliver(*copRet);
2757                                      }
2758                                  }
2759                                  handler.complete();
2760                                  break;
2761                              }
2762                      
2763                              case METHOD_UNKNOWN:
2764                              {
2765 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2766 thilo.boehm     1.69                 "handleEnumerateInstanceNamesRequest: "
2767                                          "Unknown method provider!");
2768 mark.hamzy      1.43             break;
2769                              }
2770                              }
2771                          }
2772                          HandlerCatch(handler);
2773                      
2774                          if (env) JMPIjvm::detachThread();
2775                      
2776                          PEG_METHOD_EXIT();
2777                      
2778 schuur          1.1      return(response);
2779                      }
2780                      
2781 marek           1.68 Message * JMPIProviderManager::handleCreateInstanceRequest(
2782                          const Message * message) throw()
2783 schuur          1.1  {
2784 marek           1.68     PEG_METHOD_ENTER(
2785                              TRC_PROVIDERMANAGER,
2786                              "JMPIProviderManager::handleCreateInstanceRequest");
2787 mark.hamzy      1.23 
2788 kumpf           1.55     HandlerIntro(CreateInstance,message,request,response,handler);
2789 schuur          1.1  
2790 mark.hamzy      1.25     typedef enum {
2791                             METHOD_UNKNOWN = 0,
2792 mark.hamzy      1.43        METHOD_INSTANCEPROVIDER, // same as METHOD_CIMINSTANCEPROVIDER
2793                             METHOD_INSTANCEPROVIDER2 // same as METHOD_CIMINSTANCEPROVIDER2
2794 mark.hamzy      1.25     } METHOD_VERSION;
2795                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2796                          JNIEnv          *env           = NULL;
2797                      
2798 schuur          1.1      try {
2799 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
2800                                   "handleCreateInstanceRequest: "
2801 kumpf           1.77                  "name space = %s class name = %s",
2802 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
2803                                   (const char*)request->
2804                                       newInstance.getPath().getClassName().getString().getCString()
2805                                   ));
2806 mark.hamzy      1.23 
2807 schuur          1.1          // make target object path
2808 kumpf           1.77         CIMObjectPath *objectPath =
2809 marek           1.68             new CIMObjectPath(
2810                                      System::getHostName(),
2811                                      request->nameSpace,
2812                                      request->newInstance.getPath().getClassName(),
2813                                      request->newInstance.getPath().getKeyBindings());
2814 schuur          1.1  
2815                              // resolve provider name
2816 kumpf           1.2          ProviderName name = _resolveProviderName(
2817                                  request->operationContext.get(ProviderIdContainer::NAME));
2818 schuur          1.1  
2819                              // get cached or load new provider module
2820 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
2821 marek           1.68             providerManager.getProvider(
2822                                      name.getPhysicalName(),
2823                                      name.getLogicalName(),
2824                                      String::EMPTY);
2825 schuur          1.1  
2826                              // forward request
2827 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
2828 schuur          1.1  
2829 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
2830                                  "handleCreateInstanceRequest: "
2831                                  "Calling provider: %s", (const char*)pr.getName().getCString()));
2832 schuur          1.12 
2833 mark.hamzy      1.25         JvmVector *jv = 0;
2834                      
2835                              env = JMPIjvm::attachThread(&jv);
2836                      
2837 mark.hamzy      1.37         if (!env)
2838                              {
2839 marek           1.71             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2840 thilo.boehm     1.69                 "handleCreateInstanceRequest: "
2841                                          "Could not initialize the JVM (Java Virtual Machine) "
2842                                          "runtime environment.");
2843                      
2844 mark.hamzy      1.37             PEG_METHOD_EXIT();
2845                      
2846 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
2847                                      CIM_ERR_FAILED,
2848                                      MessageLoaderParms(
2849 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
2850 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
2851                                              "runtime environment."));
2852 mark.hamzy      1.37         }
2853                      
2854 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
2855                      
2856 mark.hamzy      1.43         jmethodID id               = NULL;
2857                              String    interfaceType;
2858                              String    interfaceVersion;
2859                      
2860 marek           1.68         getInterfaceType(
2861                                  request->operationContext.get(
2862                                      ProviderIdContainer::NAME),
2863                                  interfaceType,
2864                                  interfaceVersion);
2865 mark.hamzy      1.43 
2866                              if (interfaceType == "JMPI")
2867                              {
2868 marek           1.68            id = env->GetMethodID(
2869                                          (jclass)pr.jProviderClass,
2870                                          "createInstance",
2871                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
2872                                              "Lorg/pegasus/jmpi/CIMInstance;)"
2873                                                  "Lorg/pegasus/jmpi/CIMObjectPath;");
2874 mark.hamzy      1.43 
2875                                 if (id != NULL)
2876                                 {
2877                                     eMethodFound = METHOD_INSTANCEPROVIDER;
2878 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2879                                         "handleCreateInstanceRequest: "
2880                                             "Found METHOD_INSTANCEPROVIDER.");
2881 mark.hamzy      1.43            }
2882                              }
2883                              else if (interfaceType == "JMPIExperimental")
2884                              {
2885 marek           1.68            id = env->GetMethodID(
2886                                          (jclass)pr.jProviderClass,
2887                                          "createInstance",
2888                                          "(Lorg/pegasus/jmpi/OperationContext;"
2889                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
2890                                                  "Lorg/pegasus/jmpi/CIMInstance;)"
2891                                                      "Lorg/pegasus/jmpi/CIMObjectPath;");
2892 mark.hamzy      1.25 
2893 mark.hamzy      1.43            if (id != NULL)
2894                                 {
2895                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
2896 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2897                                         "handleCreateInstanceRequest: "
2898                                             "Found METHOD_INSTANCEPROVIDER2.");
2899 mark.hamzy      1.43            }
2900                              }
2901 schuur          1.1  
2902 mark.hamzy      1.43         if (id == NULL)
2903 mark.hamzy      1.25         {
2904 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
2905 thilo.boehm     1.69                 "handleCreateInstanceRequest: No method provider found!");
2906 mark.hamzy      1.43 
2907                                 PEG_METHOD_EXIT();
2908                      
2909 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
2910                                     CIM_ERR_FAILED,
2911                                     MessageLoaderParms(
2912 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
2913 marek           1.68                    "Could not find a method for the provider based on "
2914                                              "InterfaceType."));
2915 mark.hamzy      1.25         }
2916 mark.hamzy      1.23 
2917                              JMPIjvm::checkException(env);
2918                      
2919 mark.hamzy      1.25         switch (eMethodFound)
2920                              {
2921 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
2922                              {
2923 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
2924                                                      CIMObjectPath*,
2925                                                      jlong,
2926                                                      objectPath);
2927                                  jobject jcop = env->NewObject(
2928                                                     jv->CIMObjectPathClassRef,
2929                                                     jv->CIMObjectPathNewJ,
2930                                                     jcopRef);
2931 mark.hamzy      1.43 
2932                                  JMPIjvm::checkException(env);
2933                      
2934                                  CIMInstance *ci     = new CIMInstance (request->newInstance);
2935 marek           1.68             jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
2936 kumpf           1.77             jobject jci = env->NewObject(
2937 marek           1.68                               jv->CIMInstanceClassRef,
2938                                                    jv->CIMInstanceNewJ,
2939                                                    jciRef);
2940 mark.hamzy      1.43 
2941                                  JMPIjvm::checkException(env);
2942                      
2943 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2944                                       "handleCreateInstanceRequest: "
2945 thilo.boehm     1.70                      "id = %p, jcop = %p, jci = %p",
2946                                             id,jcop,jci));
2947 mark.hamzy      1.43 
2948 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
2949                      
2950 mark.hamzy      1.43             jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
2951                                                                          id,
2952                                                                          jcop,
2953                                                                          jci);
2954                      
2955                                  JMPIjvm::checkException(env);
2956                      
2957                                  handler.processing();
2958                      
2959                                  if (jcopRet) {
2960 marek           1.68                 jlong jCopRetRef = env->CallLongMethod(
2961                                                             jcopRet,
2962                                                             JMPIjvm::jv.CIMObjectPathCInst);
2963                                      CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
2964                                                                  jlong,
2965                                                                  CIMObjectPath*,
2966                                                                  jCopRetRef);
2967 mark.hamzy      1.43 
2968                                      handler.deliver(*copRet);
2969                                  }
2970                                  handler.complete();
2971                                  break;
2972                              }
2973                      
2974                              case METHOD_INSTANCEPROVIDER2:
2975 mark.hamzy      1.25         {
2976 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
2977                                                     OperationContext*,
2978                                                     jlong,
2979                                                     &request->operationContext);
2980                                  jobject joc = env->NewObject(
2981                                                    jv->OperationContextClassRef,
2982                                                    jv->OperationContextNewJ,
2983                                                    jocRef);
2984                      
2985                                  jlong jcopRef = DEBUG_ConvertCToJava(
2986                                                      CIMObjectPath*,
2987                                                      jlong,
2988                                                      objectPath);
2989                                  jobject jcop = env->NewObject(
2990                                                     jv->CIMObjectPathClassRef,
2991                                                     jv->CIMObjectPathNewJ,
2992                                                     jcopRef);
2993 mark.hamzy      1.25 
2994                                  JMPIjvm::checkException(env);
2995                      
2996 marek           1.68             CIMInstance *ci = new CIMInstance (request->newInstance);
2997                                  jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
2998                                  jobject jci = env->NewObject(
2999                                                    jv->CIMInstanceClassRef,
3000                                                    jv->CIMInstanceNewJ,
3001                                                    jciRef);
3002 mark.hamzy      1.25 
3003                                  JMPIjvm::checkException(env);
3004 schuur          1.1  
3005 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3006                                       "handleCreateInstanceRequest: "
3007 thilo.boehm     1.70                      "id = %p, jcop = %p, jci = %p",
3008                                             id,jcop,jci));
3009 schuur          1.1  
3010 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3011                      
3012 mark.hamzy      1.29             jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
3013                                                                          id,
3014 mark.hamzy      1.43                                                     joc,
3015 mark.hamzy      1.29                                                     jcop,
3016                                                                          jci);
3017 schuur          1.1  
3018 mark.hamzy      1.25             JMPIjvm::checkException(env);
3019 schuur          1.1  
3020 mark.hamzy      1.43             if (joc)
3021                                  {
3022 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
3023 mark.hamzy      1.43 
3024                                     JMPIjvm::checkException(env);
3025                                  }
3026                      
3027 mark.hamzy      1.25             handler.processing();
3028 mark.hamzy      1.23 
3029 mark.hamzy      1.29             if (jcopRet) {
3030 marek           1.68                 jlong jCopRetRef = env->CallLongMethod(
3031                                                             jcopRet,
3032                                                             JMPIjvm::jv.CIMObjectPathCInst);
3033                                      CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
3034                                                                  jlong,
3035                                                                  CIMObjectPath*,
3036                                                                  jCopRetRef);
3037 mark.hamzy      1.23 
3038 mark.hamzy      1.29                 handler.deliver(*copRet);
3039 mark.hamzy      1.25             }
3040                                  handler.complete();
3041                                  break;
3042                              }
3043 mark.hamzy      1.23 
3044 mark.hamzy      1.25         case METHOD_UNKNOWN:
3045                              {
3046 marek           1.71             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL1,
3047 thilo.boehm     1.69                 "handleCreateInstanceRequest: Unknown method provider!");
3048 mark.hamzy      1.25             break;
3049                              }
3050 schuur          1.1          }
3051                          }
3052                          HandlerCatch(handler);
3053 mark.hamzy      1.23 
3054 schuur          1.1      if (env) JMPIjvm::detachThread();
3055 mark.hamzy      1.23 
3056 schuur          1.1      PEG_METHOD_EXIT();
3057                      
3058                          return(response);
3059                      }
3060                      
3061 marek           1.68 Message * JMPIProviderManager::handleModifyInstanceRequest(
3062                          const Message * message) throw()
3063 schuur          1.1  {
3064 marek           1.68     PEG_METHOD_ENTER(
3065                              TRC_PROVIDERMANAGER,
3066                              "JMPIProviderManager::handleModifyInstanceRequest");
3067 schuur          1.1  
3068 kumpf           1.55     HandlerIntro(ModifyInstance,message,request,response,handler);
3069 mark.hamzy      1.23 
3070 mark.hamzy      1.25     typedef enum {
3071                             METHOD_UNKNOWN = 0,
3072 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
3073                             METHOD_INSTANCEPROVIDER,
3074                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
3075 mark.hamzy      1.25     } METHOD_VERSION;
3076                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3077                          JNIEnv          *env           = NULL;
3078 schuur          1.13 
3079 schuur          1.1      try {
3080 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3081                                   "handleModifyInstanceRequest: "
3082 kumpf           1.77                  "name space = %s class name = %s",
3083 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
3084                                   (const char*)request->modifiedInstance.getPath().getClassName()
3085                                       .getString().getCString()
3086                                   ));
3087 mark.hamzy      1.23 
3088 schuur          1.1          // make target object path
3089 kumpf           1.77         CIMObjectPath *objectPath =
3090 marek           1.68            new CIMObjectPath(
3091                                     System::getHostName(),
3092                                     request->nameSpace,
3093                                     request->modifiedInstance.getPath().getClassName(),
3094                                     request->modifiedInstance.getPath ().getKeyBindings());
3095 schuur          1.1  
3096                              // resolve provider name
3097 kumpf           1.2          ProviderName name = _resolveProviderName(
3098                                  request->operationContext.get(ProviderIdContainer::NAME));
3099 schuur          1.1  
3100 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3101                                   "handleModifyInstanceRequest: "
3102                                       "provider name physical = %s, logical = %s",
3103                                    (const char*)name.getPhysicalName().getCString(),
3104                                    (const char*)name.getLogicalName().getCString()
3105                                    ));
3106 mark.hamzy      1.23 
3107 schuur          1.1          // get cached or load new provider module
3108 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
3109 marek           1.68             providerManager.getProvider(
3110                                      name.getPhysicalName(),
3111                                      name.getLogicalName(),
3112                                      String::EMPTY);
3113 schuur          1.1  
3114                              // forward request
3115 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
3116 mark.hamzy      1.23 
3117 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3118                                  "handleModifyInstanceRequest: "
3119                                  "Calling provider: %s", (const char*)pr.getName().getCString()));
3120 mark.hamzy      1.25 
3121                              JvmVector *jv = 0;
3122                      
3123                              env = JMPIjvm::attachThread(&jv);
3124                      
3125 mark.hamzy      1.37         if (!env)
3126                              {
3127 marek           1.71             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL1,
3128 thilo.boehm     1.69                 "handleModifyInstanceRequest: "
3129                                          "Could not initialize the JVM (Java Virtual Machine) "
3130                                          "runtime environment.");
3131                      
3132 mark.hamzy      1.37             PEG_METHOD_EXIT();
3133                      
3134 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
3135                                      CIM_ERR_FAILED,
3136                                      MessageLoaderParms(
3137 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
3138 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
3139                                              "runtime environment."));
3140 mark.hamzy      1.37         }
3141                      
3142 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
3143 mark.hamzy      1.23 
3144 mark.hamzy      1.43         jmethodID id               = NULL;
3145                              String    interfaceType;
3146                              String    interfaceVersion;
3147                      
3148 marek           1.68         getInterfaceType(
3149                                  request->operationContext.get(
3150                                      ProviderIdContainer::NAME),
3151                                  interfaceType,
3152                                  interfaceVersion);
3153 mark.hamzy      1.43 
3154                              if (interfaceType == "JMPI")
3155                              {
3156 marek           1.68            id = env->GetMethodID(
3157                                          (jclass)pr.jProviderClass,
3158                                          "setInstance",
3159                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
3160                                              "Lorg/pegasus/jmpi/CIMInstance;)V");
3161 mark.hamzy      1.43 
3162                                 if (id != NULL)
3163                                 {
3164                                     eMethodFound = METHOD_INSTANCEPROVIDER;
3165 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3166                                         "handleModifyInstanceRequest: "
3167                                             "Found METHOD_INSTANCEPROVIDER.");
3168 mark.hamzy      1.43            }
3169 mark.hamzy      1.25 
3170 mark.hamzy      1.43            if (id == NULL)
3171                                 {
3172                                     env->ExceptionClear();
3173 mark.hamzy      1.25 
3174 marek           1.68                id = env->GetMethodID(
3175                                              (jclass)pr.jProviderClass,
3176                                              "setInstance",
3177                                              "(Lorg/pegasus/jmpi/CIMObjectPath;"
3178                                                  "Z[Ljava/lang/String)V");
3179 mark.hamzy      1.43 
3180                                     if (id != NULL)
3181                                     {
3182                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
3183 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3184                                             "handleModifyInstanceRequest: "
3185                                                 "Found METHOD_CIMINSTANCEPROVIDER.");
3186 mark.hamzy      1.43                }
3187                                 }
3188                              }
3189                              else if (interfaceType == "JMPIExperimental")
3190 mark.hamzy      1.25         {
3191 marek           1.68            id = env->GetMethodID(
3192                                         (jclass)pr.jProviderClass,
3193                                         "setInstance",
3194                                         "(Lorg/pegasus/jmpi/OperationContext;"
3195                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
3196                                                  "Lorg/pegasus/jmpi/CIMInstance;)V");
3197 mark.hamzy      1.43 
3198                                 if (id != NULL)
3199                                 {
3200                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
3201 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3202                                         "handleModifyInstanceRequest: "
3203                                             "Found METHOD_INSTANCEPROVIDER2.");
3204 mark.hamzy      1.43            }
3205 mark.hamzy      1.25         }
3206                      
3207                              if (id == NULL)
3208                              {
3209 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3210                                      "handleModifyInstanceRequest: No method provider found!");
3211 mark.hamzy      1.25 
3212 mark.hamzy      1.43            PEG_METHOD_EXIT();
3213 schuur          1.1  
3214 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
3215                                     CIM_ERR_FAILED,
3216                                     MessageLoaderParms(
3217 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
3218 marek           1.68                    "Could not find a method for the provider based on "
3219                                             "InterfaceType."));
3220 mark.hamzy      1.25         }
3221 schuur          1.1  
3222 mark.hamzy      1.23         JMPIjvm::checkException(env);
3223 schuur          1.1  
3224 mark.hamzy      1.25         switch (eMethodFound)
3225                              {
3226 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
3227                              {
3228 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
3229                                                     OperationContext*,
3230                                                     jlong,
3231                                                     &request->operationContext);
3232                      
3233                                  jobject joc = env->NewObject(
3234                                                    jv->OperationContextClassRef,
3235                                                    jv->OperationContextNewJ,
3236                                                    jocRef);
3237                      
3238                                  jlong jcopRef = DEBUG_ConvertCToJava(
3239                                                      CIMObjectPath*,
3240                                                      jlong,
3241                                                      objectPath);
3242                                  jobject jcop = env->NewObject(
3243                                                     jv->CIMObjectPathClassRef,
3244                                                     jv->CIMObjectPathNewJ,
3245                                                     jcopRef);
3246 mark.hamzy      1.43 
3247                                  JMPIjvm::checkException(env);
3248                      
3249 marek           1.68             CIMInstance *ci = new CIMInstance (request->modifiedInstance);
3250                                  jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3251                                  jobject jci = env->NewObject(
3252                                                    jv->CIMInstanceClassRef,
3253                                                    jv->CIMInstanceNewJ,
3254                                                    jciRef);
3255 mark.hamzy      1.43 
3256                                  JMPIjvm::checkException(env);
3257                      
3258                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3259                      
3260 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3261                      
3262 mark.hamzy      1.43             env->CallVoidMethod((jobject)pr.jProvider,
3263                                                      id,
3264                                                      joc,
3265                                                      jcop,
3266                                                      jci);
3267                      
3268                                  JMPIjvm::checkException(env);
3269                      
3270                                  if (joc)
3271                                  {
3272 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
3273 mark.hamzy      1.43 
3274                                     JMPIjvm::checkException(env);
3275                                  }
3276                                  break;
3277                              }
3278                      
3279                              case METHOD_CIMINSTANCEPROVIDER:
3280 mark.hamzy      1.25         {
3281 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
3282                                                      CIMObjectPath*,
3283                                                      jlong,
3284                                                      objectPath);
3285                                  jobject jcop = env->NewObject(
3286                                                     jv->CIMObjectPathClassRef,
3287                                                     jv->CIMObjectPathNewJ,
3288                                                     jcopRef);
3289 mark.hamzy      1.25 
3290                                  JMPIjvm::checkException(env);
3291                      
3292 mark.hamzy      1.29             CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
3293 marek           1.68             jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3294                                  jobject jci = env->NewObject(
3295                                                    jv->CIMInstanceClassRef,
3296                                                    jv->CIMInstanceNewJ,
3297                                                    jciRef);
3298 mark.hamzy      1.25 
3299                                  JMPIjvm::checkException(env);
3300 schuur          1.1  
3301 mark.hamzy      1.25             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3302 schuur          1.1  
3303 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3304                      
3305 mark.hamzy      1.25             env->CallVoidMethod((jobject)pr.jProvider,
3306                                                      id,
3307 mark.hamzy      1.29                                 jcop,
3308                                                      jci,
3309 mark.hamzy      1.36                                 JMPI_INCLUDE_QUALIFIERS,
3310 mark.hamzy      1.25                                 jPropertyList);
3311 schuur          1.1  
3312 mark.hamzy      1.25             JMPIjvm::checkException(env);
3313                                  break;
3314 schuur          1.13         }
3315 schuur          1.1  
3316 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
3317 mark.hamzy      1.25         {
3318 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
3319                                                      CIMObjectPath*,
3320                                                      jlong,
3321                                                      objectPath);
3322 kumpf           1.77             jobject jcop = env->NewObject(
3323 marek           1.68                                jv->CIMObjectPathClassRef,
3324                                                     jv->CIMObjectPathNewJ,
3325                                                     jcopRef);
3326 mark.hamzy      1.25 
3327                                  JMPIjvm::checkException(env);
3328                      
3329 marek           1.68             CIMInstance *ci = new CIMInstance (request->modifiedInstance);
3330                                  jlong jciRef = DEBUG_ConvertCToJava (CIMInstance*, jlong, ci);
3331                                  jobject jci = env->NewObject(
3332                                                    jv->CIMInstanceClassRef,
3333                                                    jv->CIMInstanceNewJ,
3334                                                    jciRef);
3335 mark.hamzy      1.25 
3336                                  JMPIjvm::checkException(env);
3337                      
3338 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3339                      
3340 mark.hamzy      1.25             env->CallVoidMethod((jobject)pr.jProvider,
3341                                                      id,
3342 mark.hamzy      1.29                                 jcop,
3343                                                      jci);
3344 mark.hamzy      1.25 
3345                                  JMPIjvm::checkException(env);
3346                                  break;
3347                              }
3348 mark.hamzy      1.23 
3349 mark.hamzy      1.25         case METHOD_UNKNOWN:
3350                              {
3351 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3352                                      "handleModifyInstanceRequest: Unknown method provider!");
3353 mark.hamzy      1.25             break;
3354                              }
3355                              }
3356 schuur          1.1      }
3357                          HandlerCatch(handler);
3358 mark.hamzy      1.23 
3359 schuur          1.1      if (env) JMPIjvm::detachThread();
3360 mark.hamzy      1.23 
3361 schuur          1.1      PEG_METHOD_EXIT();
3362                      
3363                          return(response);
3364                      }
3365                      
3366 marek           1.68 Message * JMPIProviderManager::handleDeleteInstanceRequest(
3367                          const Message * message) throw()
3368 schuur          1.1  {
3369 marek           1.68     PEG_METHOD_ENTER(
3370                              TRC_PROVIDERMANAGER,
3371                              "JMPIProviderManager::handleDeleteInstanceRequest");
3372 mark.hamzy      1.23 
3373 kumpf           1.55     HandlerIntro(DeleteInstance,message,request,response,handler);
3374 schuur          1.1  
3375 mark.hamzy      1.25     typedef enum {
3376                             METHOD_UNKNOWN = 0,
3377 mark.hamzy      1.43        METHOD_INSTANCEPROVIDER,  // same as METHOD_CIMINSTANCEPROVIDER
3378                             METHOD_INSTANCEPROVIDER2, // same as METHOD_CIMINSTANCEPROVIDER2
3379 mark.hamzy      1.25     } METHOD_VERSION;
3380                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3381                          JNIEnv          *env           = NULL;
3382                      
3383 schuur          1.1      try {
3384 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3385                                   "handleDeleteInstanceRequest: "
3386 kumpf           1.77                  "name space = %s class name = %s",
3387 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
3388                                   (const char*)request->
3389                                       instanceName.getClassName().getString().getCString()
3390                                   ));
3391 mark.hamzy      1.23 
3392 schuur          1.1          // make target object path
3393 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
3394                                                              System::getHostName(),
3395                                                              request->nameSpace,
3396                                                              request->instanceName.getClassName(),
3397                                                              request->instanceName.getKeyBindings());
3398 schuur          1.1  
3399                              // resolve provider name
3400 kumpf           1.2          ProviderName name = _resolveProviderName(
3401                                  request->operationContext.get(ProviderIdContainer::NAME));
3402 schuur          1.1  
3403                              // get cached or load new provider module
3404 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
3405 marek           1.68             providerManager.getProvider(
3406                                      name.getPhysicalName(),
3407                                      name.getLogicalName(),
3408                                      String::EMPTY);
3409 schuur          1.1  
3410                              // forward request
3411 mark.hamzy      1.25         JMPIProvider &pr = ph.GetProvider();
3412 schuur          1.1  
3413 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3414                                  "handleDeleteInstanceRequest: "
3415                                  "Calling provider: %s", (const char*)pr.getName().getCString()));
3416 schuur          1.1  
3417 mark.hamzy      1.25         JvmVector *jv = 0;
3418                      
3419                              env = JMPIjvm::attachThread(&jv);
3420                      
3421 mark.hamzy      1.37         if (!env)
3422                              {
3423 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3424                                      "handleDeleteInstanceRequest: "
3425                                          "Could not initialize the JVM (Java Virtual Machine) "
3426                                          "runtime environment.");
3427                      
3428 mark.hamzy      1.37             PEG_METHOD_EXIT();
3429                      
3430 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
3431                                      CIM_ERR_FAILED,
3432                                      MessageLoaderParms(
3433 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
3434 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
3435                                              "runtime environment."));
3436 mark.hamzy      1.37         }
3437                      
3438 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
3439                      
3440 mark.hamzy      1.43         jmethodID id               = NULL;
3441                              String    interfaceType;
3442                              String    interfaceVersion;
3443                      
3444 marek           1.68         getInterfaceType(
3445                                  request->operationContext.get(ProviderIdContainer::NAME),
3446                                  interfaceType,
3447                                  interfaceVersion);
3448 mark.hamzy      1.43 
3449                              if (interfaceType == "JMPI")
3450                              {
3451                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3452                                                       "deleteInstance",
3453                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
3454                      
3455                                 if (id != NULL)
3456                                 {
3457                                     eMethodFound = METHOD_INSTANCEPROVIDER;
3458 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3459                                         "handleDeleteInstanceRequest: "
3460                                             "Found METHOD_INSTANCEPROVIDER.");
3461 mark.hamzy      1.43            }
3462                              }
3463                              else if (interfaceType == "JMPIExperimental")
3464                              {
3465 marek           1.68            id = env->GetMethodID(
3466                                          (jclass)pr.jProviderClass,
3467                                          "deleteInstance",
3468                                          "(Lorg/pegasus/jmpi/OperationContext;"
3469                                              "Lorg/pegasus/jmpi/CIMObjectPath;)V");
3470 mark.hamzy      1.25 
3471 mark.hamzy      1.43            if (id != NULL)
3472                                 {
3473                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
3474 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3475                                         "handleDeleteInstanceRequest: "
3476                                             "Found METHOD_INSTANCEPROVIDER2.");
3477 mark.hamzy      1.43            }
3478                              }
3479 schuur          1.1  
3480 mark.hamzy      1.43         if (id == NULL)
3481 mark.hamzy      1.25         {
3482 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3483                                      "handleDeleteInstanceRequest: No method provider found!");
3484 mark.hamzy      1.43 
3485                                 PEG_METHOD_EXIT();
3486                      
3487 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
3488                                     CIM_ERR_FAILED,
3489                                     MessageLoaderParms(
3490 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
3491 marek           1.68                    "Could not find a method for the provider based on "
3492                                             "InterfaceType."));
3493 mark.hamzy      1.25         }
3494 mark.hamzy      1.23 
3495                              JMPIjvm::checkException(env);
3496 schuur          1.1  
3497 mark.hamzy      1.25         switch (eMethodFound)
3498                              {
3499 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER2:
3500                              {
3501 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
3502                                                     OperationContext*,
3503                                                     jlong,
3504                                                     &request->operationContext);
3505                                  jobject joc = env->NewObject(
3506                                                    jv->OperationContextClassRef,
3507                                                    jv->OperationContextNewJ,
3508                                                    jocRef);
3509                      
3510                                  jlong jcopRef = DEBUG_ConvertCToJava(
3511                                                      CIMObjectPath*,
3512                                                      jlong,
3513                                                      objectPath);
3514                                  jobject jcop = env->NewObject(
3515                                                     jv->CIMObjectPathClassRef,
3516                                                     jv->CIMObjectPathNewJ,
3517                                                     jcopRef);
3518 mark.hamzy      1.43 
3519                                  JMPIjvm::checkException(env);
3520                      
3521 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3522                      
3523 mark.hamzy      1.43             env->CallVoidMethod((jobject)pr.jProvider,
3524                                                      id,
3525                                                      joc,
3526                                                      jcop);
3527                      
3528                                  JMPIjvm::checkException(env);
3529                      
3530                                  if (joc)
3531                                  {
3532 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
3533 mark.hamzy      1.43 
3534                                     JMPIjvm::checkException(env);
3535                                  }
3536                                  break;
3537                              }
3538                      
3539                              case METHOD_INSTANCEPROVIDER:
3540 mark.hamzy      1.25         {
3541 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
3542                                                      CIMObjectPath*,
3543                                                      jlong,
3544                                                      objectPath);
3545                                  jobject jcop = env->NewObject(
3546                                                     jv->CIMObjectPathClassRef,
3547                                                     jv->CIMObjectPathNewJ,
3548                                                     jcopRef);
3549 mark.hamzy      1.25 
3550                                  JMPIjvm::checkException(env);
3551                      
3552 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3553                      
3554 mark.hamzy      1.36             env->CallVoidMethod((jobject)pr.jProvider,
3555                                                      id,
3556                                                      jcop);
3557 mark.hamzy      1.25 
3558                                  JMPIjvm::checkException(env);
3559                                  break;
3560                              }
3561                      
3562                              case METHOD_UNKNOWN:
3563                              {
3564 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3565                                      "handleDeleteInstanceRequest: Unknown method provider!");
3566 mark.hamzy      1.25             break;
3567                              }
3568                              }
3569                          }
3570                          HandlerCatch(handler);
3571                      
3572                          if (env) JMPIjvm::detachThread();
3573                      
3574                          PEG_METHOD_EXIT();
3575                      
3576                          return(response);
3577                      }
3578                      
3579 marek           1.68 Message * JMPIProviderManager::handleExecQueryRequest(
3580                          const Message * message) throw()
3581 mark.hamzy      1.25 {
3582 marek           1.68     PEG_METHOD_ENTER(
3583                              TRC_PROVIDERMANAGER,
3584                              "JMPIProviderManager::handleExecQueryRequest");
3585 mark.hamzy      1.25 
3586 kumpf           1.55     HandlerIntro(ExecQuery,message,request,response,handler);
3587 mark.hamzy      1.25 
3588                          typedef enum {
3589                             METHOD_UNKNOWN = 0,
3590 mark.hamzy      1.43        METHOD_CIMINSTANCEPROVIDER,
3591                             METHOD_CIMINSTANCEPROVIDER2,
3592                             METHOD_INSTANCEPROVIDER,
3593                             METHOD_INSTANCEPROVIDER2,
3594 mark.hamzy      1.25     } METHOD_VERSION;
3595                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3596                          JNIEnv          *env           = NULL;
3597                      
3598                          try {
3599 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
3600                                   "handleExecQueryRequest: "
3601 kumpf           1.77                  "name space = %s class name = %s",
3602 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
3603                                   (const char*)request->className.getString().getCString()
3604                                   ));
3605 mark.hamzy      1.25 
3606                              // make target object path
3607 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3608                                                                             request->nameSpace,
3609                                                                             request->className);
3610 mark.hamzy      1.25 
3611                              // resolve provider name
3612                              ProviderName name = _resolveProviderName(
3613                                  request->operationContext.get(ProviderIdContainer::NAME));
3614                      
3615                              // get cached or load new provider module
3616 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
3617 marek           1.68             providerManager.getProvider(
3618                                      name.getPhysicalName(),
3619                                      name.getLogicalName(),
3620                                      String::EMPTY);
3621 mark.hamzy      1.25 
3622                              // convert arguments
3623                              OperationContext context;
3624                      
3625 marek           1.68         context.insert(
3626                                  request->operationContext.get(IdentityContainer::NAME));
3627                              context.insert(
3628                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
3629                              context.insert(
3630                                  request->operationContext.get(ContentLanguageListContainer::NAME));
3631 mark.hamzy      1.25 
3632                              // forward request
3633                              JMPIProvider &pr = ph.GetProvider();
3634                      
3635 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
3636                                  "handleExecQueryRequest: "
3637 kumpf           1.77                 "Calling provider: %s, queryLanguage: %s, query: %s",
3638 thilo.boehm     1.69             (const char*)pr.getName().getCString(),
3639                                  (const char*)request->queryLanguage.getCString(),
3640                                  (const char*)request->query.getCString()
3641                                  ));
3642 mark.hamzy      1.25 
3643                              JvmVector *jv = 0;
3644                      
3645                              env = JMPIjvm::attachThread(&jv);
3646                      
3647 mark.hamzy      1.37         if (!env)
3648                              {
3649 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3650                                      "handleExecQueryRequest: "
3651                                          "Could not initialize the JVM (Java Virtual Machine) "
3652                                          "runtime environment.");
3653                      
3654 mark.hamzy      1.37             PEG_METHOD_EXIT();
3655                      
3656 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
3657                                      CIM_ERR_FAILED,
3658                                      MessageLoaderParms(
3659 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
3660 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
3661                                              "runtime environment."));
3662 mark.hamzy      1.37         }
3663                      
3664 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
3665 schuur          1.1  
3666 mark.hamzy      1.43         jmethodID id               = NULL;
3667                              String    interfaceType;
3668                              String    interfaceVersion;
3669                      
3670 marek           1.68         getInterfaceType(
3671                                  request->operationContext.get(
3672                                      ProviderIdContainer::NAME),
3673                                  interfaceType,
3674                                  interfaceVersion);
3675 mark.hamzy      1.43 
3676                              if (interfaceType == "JMPI")
3677                              {
3678 marek           1.68            id = env->GetMethodID(
3679                                         (jclass)pr.jProviderClass,
3680                                         "execQuery",
3681                                         "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
3682                                             "ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
3683 mark.hamzy      1.43 
3684                                 if (id != NULL)
3685                                 {
3686                                     eMethodFound = METHOD_INSTANCEPROVIDER;
3687 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3688                                         "handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER.");
3689 mark.hamzy      1.43            }
3690 mark.hamzy      1.25 
3691 mark.hamzy      1.43            if (id == NULL)
3692                                 {
3693                                     env->ExceptionClear();
3694 mark.hamzy      1.25 
3695 marek           1.68                id = env->GetMethodID(
3696                                              (jclass)pr.jProviderClass,
3697                                              "execQuery",
3698                                              "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
3699                                                  "Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
3700                                                      "[Lorg/pegasus/jmpi/CIMInstance;");
3701 mark.hamzy      1.43 
3702                                     if (id != NULL)
3703                                     {
3704                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER;
3705 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3706                                             "handleExecQueryRequest: "
3707                                                 "Found METHOD_CIMINSTANCEPROVIDER.");
3708 mark.hamzy      1.43                }
3709                                 }
3710                              }
3711                              else if (interfaceType == "JMPIExperimental")
3712 mark.hamzy      1.25         {
3713 marek           1.68            id = env->GetMethodID(
3714                                          (jclass)pr.jProviderClass,
3715                                          "execQuery",
3716                                          "(Lorg/pegasus/jmpi/OperationContext;"
3717                                               "Lorg/pegasus/jmpi/CIMObjectPath;"
3718                                                   "Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;"
3719                                                       "Ljava/lang/String;)Ljava/util/Vector;");
3720 mark.hamzy      1.25 
3721 mark.hamzy      1.43            if (id != NULL)
3722                                 {
3723                                     eMethodFound = METHOD_INSTANCEPROVIDER2;
3724 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3725                                         "handleExecQueryRequest: Found METHOD_INSTANCEPROVIDER2.");
3726 mark.hamzy      1.43            }
3727 mark.hamzy      1.25 
3728 mark.hamzy      1.43            if (id == NULL)
3729                                 {
3730                                     env->ExceptionClear();
3731 mark.hamzy      1.25 
3732 marek           1.68                id = env->GetMethodID(
3733                                              (jclass)pr.jProviderClass,
3734                                              "execQuery",
3735                                              "(Lorg/pegasus/jmpi/OperationContext;"
3736                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
3737                                                      "Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;"
3738                                                          "Ljava/lang/String;)"
3739                                                              "[Lorg/pegasus/jmpi/CIMInstance;");
3740 mark.hamzy      1.43 
3741                                     if (id != NULL)
3742                                     {
3743                                         eMethodFound = METHOD_CIMINSTANCEPROVIDER2;
3744 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3745                                             "handleExecQueryRequest: "
3746                                                 "Found METHOD_CIMINSTANCEPROVIDER2.");
3747 mark.hamzy      1.43                }
3748                                 }
3749 mark.hamzy      1.25         }
3750                      
3751                              if (id == NULL)
3752                              {
3753 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3754                                      "handleExecQueryRequest: No method provider found!");
3755 mark.hamzy      1.36 
3756 mark.hamzy      1.43             PEG_METHOD_EXIT();
3757 mark.hamzy      1.36 
3758 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
3759                                      CIM_ERR_FAILED,
3760                                      MessageLoaderParms(
3761 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
3762 marek           1.68                     "Could not find a method for the provider based on "
3763                                               "InterfaceType."));
3764 mark.hamzy      1.25         }
3765                      
3766 schuur          1.1          JMPIjvm::checkException(env);
3767                      
3768 mark.hamzy      1.25         switch (eMethodFound)
3769                              {
3770 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER:
3771 mark.hamzy      1.25         {
3772 marek           1.68             jlong jcopref = DEBUG_ConvertCToJava(
3773                                                      CIMObjectPath*,
3774                                                      jlong,
3775                                                      objectPath);
3776                                  jobject jcop = env->NewObject(
3777                                                     jv->CIMObjectPathClassRef,
3778                                                     jv->CIMObjectPathNewJ,
3779                                                     jcopref);
3780 mark.hamzy      1.25 
3781                                  JMPIjvm::checkException(env);
3782                      
3783 marek           1.68             jstring jqueryLanguage = env->NewStringUTF(
3784                                                               request->queryLanguage.getCString());
3785                                  jstring jquery         = env->NewStringUTF(
3786                                                               request->query.getCString());
3787 mark.hamzy      1.25 
3788 mark.hamzy      1.40             CIMClass cls;
3789                      
3790                                  try
3791                                  {
3792 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3793                                         "handleExecQueryRequest: "
3794                                             "enter(METHOD_CIMINSTANCEPROVIDER): "
3795                                             "cimom_handle->getClass(%s).",
3796                                         (const char*)request->className.getString().getCString()
3797                                         ));
3798                      
3799 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
3800                      
3801                                     cls = pr._cimom_handle->getClass(context,
3802                                                                      request->nameSpace,
3803                                                                      request->className,
3804                                                                      false,
3805                                                                      true,
3806                                                                      true,
3807                                                                      CIMPropertyList());
3808 thilo.boehm     1.69 
3809                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3810                                         "handleExecQueryRequest: "
3811                                             "exit(METHOD_CIMINSTANCEPROVIDER): "
3812                                             "cimom_handle->getClass(%s).",
3813                                         (const char*)request->className.getString().getCString()
3814                                         ));
3815                      
3816 mark.hamzy      1.40             }
3817                                  catch (CIMException e)
3818                                  {
3819 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3820                                         "handleExecQueryRequest: "
3821                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER) "
3822                                             "during cimom_handle->getClass(%s): %s ",
3823                                         (const char*)request->className.getString().getCString(),
3824                                         (const char*)e.getMessage().getCString()
3825                                         ));
3826                      
3827                                     PEG_METHOD_EXIT();
3828 mark.hamzy      1.40                throw;
3829                                  }
3830                      
3831 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
3832                      
3833 mark.hamzy      1.25             JMPIjvm::checkException(env);
3834                      
3835 mark.hamzy      1.59             jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
3836 mark.hamzy      1.25 
3837 marek           1.68             jobject jCc=env->NewObject(
3838                                                  jv->CIMClassClassRef,
3839                                                  jv->CIMClassNewJ,
3840                                                  jcls);
3841 mark.hamzy      1.25 
3842                                  JMPIjvm::checkException(env);
3843                      
3844 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3845                      
3846 marek           1.68             jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
3847                                                         (jobject)pr.jProvider,
3848                                                         id,
3849                                                         jcop,
3850                                                         jquery,
3851                                                         jqueryLanguage,
3852                                                         jCc);
3853 mark.hamzy      1.23 
3854 mark.hamzy      1.25             JMPIjvm::checkException(env);
3855                      
3856                                  handler.processing();
3857                                  if (jAr) {
3858                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3859                                          JMPIjvm::checkException(env);
3860                      
3861 mark.hamzy      1.29                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3862                      
3863 mark.hamzy      1.25                     JMPIjvm::checkException(env);
3864 mark.hamzy      1.23 
3865 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
3866                                                                jciRet,
3867                                                                JMPIjvm::jv.CIMInstanceCInst);
3868                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
3869                                                                   jlong,
3870                                                                   CIMInstance*,
3871                                                                   jciRetRef);
3872 mark.hamzy      1.25 
3873                                          JMPIjvm::checkException(env);
3874                      
3875 mark.hamzy      1.29                     handler.deliver(*ciRet);
3876 mark.hamzy      1.25                 }
3877                                  }
3878                                  handler.complete();
3879                                  break;
3880                              }
3881                      
3882 mark.hamzy      1.43         case METHOD_CIMINSTANCEPROVIDER2:
3883 mark.hamzy      1.36         {
3884 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
3885                                                     OperationContext*,
3886                                                     jlong,
3887                                                     &request->operationContext);
3888                                  jobject joc = env->NewObject(
3889                                                    jv->OperationContextClassRef,
3890                                                    jv->OperationContextNewJ,
3891                                                    jocRef);
3892                      
3893                                  jlong jcopref = DEBUG_ConvertCToJava(
3894                                                      CIMObjectPath*,
3895                                                      jlong,
3896                                                      objectPath);
3897                                  jobject jcop = env->NewObject(
3898                                                     jv->CIMObjectPathClassRef,
3899                                                     jv->CIMObjectPathNewJ,
3900                                                     jcopref);
3901 mark.hamzy      1.36 
3902                                  JMPIjvm::checkException(env);
3903                      
3904 marek           1.68             jstring jqueryLanguage = env->NewStringUTF(
3905                                                               request->queryLanguage.getCString());
3906                                  jstring jquery         = env->NewStringUTF(
3907                                                               request->query.getCString());
3908 mark.hamzy      1.36 
3909 mark.hamzy      1.40             CIMClass cls;
3910                      
3911                                  try
3912                                  {
3913 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3914                                         "handleExecQueryRequest: "
3915                                             "enter(METHOD_CIMINSTANCEPROVIDER2): "
3916                                             "cimom_handle->getClass(%s).",
3917                                         (const char*)request->className.getString().getCString()
3918                                         ));
3919                      
3920 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
3921                      
3922                                     cls = pr._cimom_handle->getClass(context,
3923                                                                      request->nameSpace,
3924                                                                      request->className,
3925                                                                      false,
3926                                                                      true,
3927                                                                      true,
3928                                                                      CIMPropertyList());
3929 thilo.boehm     1.69 
3930                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
3931                                         "handleExecQueryRequest: "
3932                                             "exit(METHOD_CIMINSTANCEPROVIDER2): "
3933                                             "cimom_handle->getClass(%s).",
3934                                         (const char*)request->className.getString().getCString()
3935                                         ));
3936                      
3937 mark.hamzy      1.40             }
3938                                  catch (CIMException e)
3939                                  {
3940 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
3941                                         "handleExecQueryRequest: "
3942                                         "Caught CIMExcetion(METHOD_CIMINSTANCEPROVIDER2) "
3943                                             "during cimom_handle->getClass(%s): %s ",
3944                                         (const char*)request->className.getString().getCString(),
3945                                         (const char*)e.getMessage().getCString()
3946                                         ));
3947                      
3948                                     PEG_METHOD_EXIT();
3949 mark.hamzy      1.40                throw;
3950                                  }
3951                      
3952 mark.hamzy      1.36             CIMClass *pcls = new CIMClass (cls);
3953                      
3954                                  JMPIjvm::checkException(env);
3955                      
3956 mark.hamzy      1.59             jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
3957 mark.hamzy      1.36 
3958 marek           1.68             jobject jCc=env->NewObject(
3959                                                  jv->CIMClassClassRef,
3960                                                  jv->CIMClassNewJ,
3961                                                  jcls);
3962 mark.hamzy      1.36 
3963                                  JMPIjvm::checkException(env);
3964                      
3965 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
3966                      
3967 marek           1.68             jobjectArray jAr = (jobjectArray)env->CallObjectMethod(
3968                                                         (jobject)pr.jProvider,
3969                                                         id,
3970                                                         joc,
3971                                                         jcop,
3972                                                         jquery,
3973                                                         jqueryLanguage,
3974                                                         jCc);
3975 mark.hamzy      1.36 
3976                                  JMPIjvm::checkException(env);
3977                      
3978 mark.hamzy      1.43             if (joc)
3979                                  {
3980 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
3981 mark.hamzy      1.43 
3982                                     JMPIjvm::checkException(env);
3983                                  }
3984                      
3985                                  handler.processing();
3986                                  if (jAr) {
3987                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3988                                          JMPIjvm::checkException(env);
3989                      
3990                                          jobject jciRet = env->GetObjectArrayElement(jAr,i);
3991                      
3992                                          JMPIjvm::checkException(env);
3993                      
3994 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
3995                                                                jciRet,
3996                                                                JMPIjvm::jv.CIMInstanceCInst);
3997                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
3998                                                                   jlong,
3999                                                                   CIMInstance*,
4000                                                                   jciRetRef);
4001 mark.hamzy      1.43 
4002                                          JMPIjvm::checkException(env);
4003                      
4004                                          handler.deliver(*ciRet);
4005                                      }
4006                                  }
4007                                  handler.complete();
4008                                  break;
4009                              }
4010                      
4011                              case METHOD_INSTANCEPROVIDER2:
4012                              {
4013 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
4014                                                     OperationContext*,
4015                                                     jlong,
4016                                                     &request->operationContext);
4017                                  jobject joc = env->NewObject(
4018                                                    jv->OperationContextClassRef,
4019                                                    jv->OperationContextNewJ,
4020                                                    jocRef);
4021                      
4022                                  jlong jcopref = DEBUG_ConvertCToJava(
4023                                                      CIMObjectPath*,
4024                                                      jlong,
4025                                                      objectPath);
4026                                  jobject jcop = env->NewObject(
4027                                                     jv->CIMObjectPathClassRef,
4028                                                     jv->CIMObjectPathNewJ,
4029                                                     jcopref);
4030 mark.hamzy      1.43 
4031                                  JMPIjvm::checkException(env);
4032                      
4033 marek           1.68             jstring jqueryLanguage = env->NewStringUTF(
4034                                                               request->queryLanguage.getCString());
4035                                  jstring jquery         = env->NewStringUTF(
4036                                                               request->query.getCString());
4037 mark.hamzy      1.43 
4038                                  CIMClass cls;
4039                      
4040                                  try
4041                                  {
4042 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4043                                         "handleExecQueryRequest: "
4044                                             "enter(METHOD_INSTANCEPROVIDER2): "
4045                                             "cimom_handle->getClass(%s).",
4046                                         (const char*)request->className.getString().getCString()
4047                                         ));
4048                      
4049 mark.hamzy      1.43                AutoMutex lock (pr._cimomMutex);
4050                      
4051                                     cls = pr._cimom_handle->getClass(context,
4052                                                                      request->nameSpace,
4053                                                                      request->className,
4054                                                                      false,
4055                                                                      true,
4056                                                                      true,
4057                                                                      CIMPropertyList());
4058 thilo.boehm     1.69 
4059                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4060                                         "handleExecQueryRequest: "
4061                                             "exit(METHOD_INSTANCEPROVIDER2): "
4062                                             "cimom_handle->getClass(%s).",
4063                                         (const char*)request->className.getString().getCString()
4064                                         ));
4065                      
4066 mark.hamzy      1.43             }
4067                                  catch (CIMException e)
4068                                  {
4069 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4070                                         "handleExecQueryRequest: "
4071                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER2) "
4072                                             "during cimom_handle->getClass(%s): %s ",
4073                                         (const char*)request->className.getString().getCString(),
4074                                         (const char*)e.getMessage().getCString()
4075                                         ));
4076                      
4077                                     PEG_METHOD_EXIT();
4078 mark.hamzy      1.43                throw;
4079                                  }
4080                      
4081                                  CIMClass *pcls = new CIMClass (cls);
4082                      
4083 mark.hamzy      1.59             jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
4084 mark.hamzy      1.43 
4085 marek           1.68             jobject jCc=env->NewObject(
4086                                                  jv->CIMClassClassRef,
4087                                                  jv->CIMClassNewJ,
4088                                                  jcls);
4089 mark.hamzy      1.43 
4090                                  JMPIjvm::checkException(env);
4091                      
4092 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4093                      
4094 mark.hamzy      1.51             jobject jVec = env->CallObjectMethod ((jobject)pr.jProvider,
4095                                                                        id,
4096                                                                        joc,
4097                                                                        jcop,
4098                                                                        jCc,
4099                                                                        jquery,
4100                                                                        jqueryLanguage);
4101 mark.hamzy      1.43 
4102                                  JMPIjvm::checkException(env);
4103                      
4104                                  if (joc)
4105                                  {
4106 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
4107 mark.hamzy      1.43 
4108                                     JMPIjvm::checkException(env);
4109                                  }
4110                      
4111 mark.hamzy      1.36             handler.processing();
4112 mark.hamzy      1.51             if (jVec)
4113                                  {
4114 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4115                                           i < m;
4116                                           i++)
4117 mark.hamzy      1.51                 {
4118 mark.hamzy      1.36                     JMPIjvm::checkException(env);
4119                      
4120 marek           1.68                     jobject jciRet = env->CallObjectMethod(
4121                                                               jVec,
4122                                                               JMPIjvm::jv.VectorElementAt,
4123                                                               i);
4124 thilo.boehm     1.69                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4125 thilo.boehm     1.70                         "handleExecQueryRequest: jciRet = %p",jciRet));
4126 mark.hamzy      1.36 
4127                                          JMPIjvm::checkException(env);
4128                      
4129 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
4130                                                                jciRet,
4131                                                                JMPIjvm::jv.CIMInstanceCInst);
4132                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4133                                                                   jlong,
4134                                                                   CIMInstance*,
4135                                                                   jciRetRef);
4136 mark.hamzy      1.36 
4137                                          JMPIjvm::checkException(env);
4138                      
4139                                          handler.deliver(*ciRet);
4140                                      }
4141                                  }
4142 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4143                                  "handleExecQueryRequest: done!");
4144                      
4145 mark.hamzy      1.36             handler.complete();
4146                                  break;
4147                              }
4148                      
4149 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
4150 mark.hamzy      1.25         {
4151 marek           1.68             jlong jcopref = DEBUG_ConvertCToJava(
4152                                                      CIMObjectPath*,
4153                                                      jlong,
4154                                                      objectPath);
4155                                  jobject jcop = env->NewObject(
4156                                                     jv->CIMObjectPathClassRef,
4157                                                     jv->CIMObjectPathNewJ,
4158                                                     jcopref);
4159 mark.hamzy      1.25 
4160                                  JMPIjvm::checkException(env);
4161                      
4162 marek           1.68             jstring jqueryLanguage = env->NewStringUTF(
4163                                                               request->queryLanguage.getCString());
4164                                  jstring jquery = env->NewStringUTF(
4165                                                       request->query.getCString());
4166 mark.hamzy      1.25 
4167 mark.hamzy      1.40             CIMClass cls;
4168                      
4169                                  try
4170                                  {
4171 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4172                                         "handleExecQueryRequest: "
4173                                             "enter(METHOD_INSTANCEPROVIDER): "
4174                                             "cimom_handle->getClass(%s).",
4175                                         (const char*)request->className.getString().getCString()
4176                                         ));
4177                      
4178 mark.hamzy      1.40                AutoMutex lock (pr._cimomMutex);
4179                      
4180                                     cls = pr._cimom_handle->getClass(context,
4181                                                                      request->nameSpace,
4182                                                                      request->className,
4183                                                                      false,
4184                                                                      true,
4185                                                                      true,
4186                                                                      CIMPropertyList());
4187 thilo.boehm     1.69 
4188                                     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4189                                         "handleExecQueryRequest: "
4190                                             "exit(METHOD_INSTANCEPROVIDER): "
4191                                             "cimom_handle->getClass(%s).",
4192                                         (const char*)request->className.getString().getCString()
4193                                         ));
4194                      
4195 mark.hamzy      1.40             }
4196                                  catch (CIMException e)
4197                                  {
4198 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4199                                         "handleExecQueryRequest: "
4200                                         "Caught CIMExcetion(METHOD_INSTANCEPROVIDER) "
4201                                             "during cimom_handle->getClass(%s): %s ",
4202                                         (const char*)request->className.getString().getCString(),
4203                                         (const char*)e.getMessage().getCString()
4204                                         ));
4205                      
4206                                     PEG_METHOD_EXIT();
4207 mark.hamzy      1.40                throw;
4208                                  }
4209                      
4210 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
4211                      
4212 mark.hamzy      1.25             JMPIjvm::checkException(env);
4213                      
4214 mark.hamzy      1.59             jlong jcls = DEBUG_ConvertCToJava (CIMClass*, jlong, pcls);
4215 mark.hamzy      1.25 
4216 marek           1.68             jobject jCc=env->NewObject(
4217                                                  jv->CIMClassClassRef,
4218                                                  jv->CIMClassNewJ,
4219                                                  jcls);
4220 mark.hamzy      1.25 
4221                                  JMPIjvm::checkException(env);
4222                      
4223 mark.hamzy      1.59             jlong jql = 0; // @BUG - how to convert?
4224 mark.hamzy      1.25 
4225 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4226                      
4227 marek           1.68             jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
4228                                                                       id,
4229                                                                       jcop,
4230                                                                       jquery,
4231                                                                       jql,
4232                                                                       jCc);
4233 mark.hamzy      1.25 
4234                                  JMPIjvm::checkException(env);
4235                      
4236                                  handler.processing();
4237                                  if (jVec) {
4238 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4239                                           i<m;
4240                                           i++)
4241                                      {
4242 mark.hamzy      1.25                     JMPIjvm::checkException(env);
4243                      
4244 marek           1.68                     jobject jciRet = env->CallObjectMethod(
4245                                                               jVec,
4246                                                               JMPIjvm::jv.VectorElementAt,
4247                                                               i);
4248 mark.hamzy      1.29 
4249 mark.hamzy      1.25                     JMPIjvm::checkException(env);
4250                      
4251 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
4252                                                                jciRet,
4253                                                                JMPIjvm::jv.CIMInstanceCInst);
4254                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4255                                                                   jlong,
4256                                                                   CIMInstance*,
4257                                                                   jciRetRef);
4258 mark.hamzy      1.25 
4259                                          JMPIjvm::checkException(env);
4260                      
4261 mark.hamzy      1.29                     handler.deliver(*ciRet);
4262 mark.hamzy      1.25                 }
4263                                  }
4264                                  handler.complete();
4265                                  break;
4266                              }
4267                      
4268                              case METHOD_UNKNOWN:
4269                              {
4270 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4271                                      "handleExecQueryRequest: Unknown method provider!");
4272 mark.hamzy      1.25             break;
4273                              }
4274                              }
4275 schuur          1.1      }
4276                          HandlerCatch(handler);
4277 mark.hamzy      1.23 
4278 schuur          1.1      if (env) JMPIjvm::detachThread();
4279 mark.hamzy      1.23 
4280 schuur          1.1      PEG_METHOD_EXIT();
4281                      
4282                          return(response);
4283                      }
4284                      
4285 marek           1.68 Message * JMPIProviderManager::handleAssociatorsRequest(
4286                          const Message * message) throw()
4287 schuur          1.1  {
4288 marek           1.68     PEG_METHOD_ENTER(
4289                              TRC_PROVIDERMANAGER,
4290                              "JMPIProviderManager::handleAssociatorsRequest");
4291 mark.hamzy      1.23 
4292 kumpf           1.55     HandlerIntro(Associators,message,request,response,handler);
4293 schuur          1.1  
4294 mark.hamzy      1.24     typedef enum {
4295                             METHOD_UNKNOWN = 0,
4296 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
4297                             METHOD_CIMASSOCIATORPROVIDER2,
4298                             METHOD_ASSOCIATORPROVIDER,
4299                             METHOD_ASSOCIATORPROVIDER2,
4300 mark.hamzy      1.24     } METHOD_VERSION;
4301                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4302                          JNIEnv          *env           = NULL;
4303 schuur          1.13 
4304 marek           1.68     try
4305                          {
4306 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
4307                                   "handleAssociatorsRequest: "
4308 kumpf           1.77                  "name space = %s class name = %s",
4309 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
4310                                   (const char*)request->
4311                                       objectName.getClassName().getString().getCString()
4312                                   ));
4313 mark.hamzy      1.23 
4314 schuur          1.1          // make target object path
4315 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
4316                                                              System::getHostName(),
4317                                                              request->nameSpace,
4318                                                              request->objectName.getClassName(),
4319                                                              request->objectName.getKeyBindings());
4320                              CIMObjectPath *assocPath  = new CIMObjectPath(
4321                                                              System::getHostName(),
4322                                                              request->nameSpace,
4323                                                              request->assocClass.getString());
4324 schuur          1.1  
4325                              // resolve provider name
4326 kumpf           1.2          ProviderName name = _resolveProviderName(
4327                                  request->operationContext.get(ProviderIdContainer::NAME));
4328 schuur          1.1  
4329                              // get cached or load new provider module
4330 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
4331 marek           1.68             providerManager.getProvider(
4332                                      name.getPhysicalName(),
4333                                      name.getLogicalName(),
4334                                      String::EMPTY);
4335 schuur          1.1  
4336 mark.hamzy      1.24         // convert arguments
4337 schuur          1.1          OperationContext context;
4338                      
4339 marek           1.68         context.insert(
4340                                  request->operationContext.get(IdentityContainer::NAME));
4341                              context.insert(
4342                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
4343                              context.insert(
4344                                  request->operationContext.get(ContentLanguageListContainer::NAME));
4345 schuur          1.1  
4346                              // forward request
4347 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
4348                      
4349 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
4350                                  "handleAssociatorsRequest: "
4351 kumpf           1.77                 "Calling provider: %s, role: %s, aCls: %s",
4352 thilo.boehm     1.69             (const char*)pr.getName().getCString(),
4353                                  (const char*)request->role.getCString(),
4354                                  (const char*)request->assocClass.getString().getCString()
4355                                  ));
4356 schuur          1.1  
4357 mark.hamzy      1.24         JvmVector *jv = 0;
4358 schuur          1.1  
4359 mark.hamzy      1.24         env = JMPIjvm::attachThread(&jv);
4360 schuur          1.1  
4361 mark.hamzy      1.37         if (!env)
4362                              {
4363 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4364                                      "handleAssociatorsRequest: "
4365                                      "Could not initialize the JVM (Java Virtual Machine) "
4366                                              "runtime environment.");
4367                      
4368 mark.hamzy      1.37             PEG_METHOD_EXIT();
4369                      
4370 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
4371                                      CIM_ERR_FAILED,
4372                                      MessageLoaderParms(
4373 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
4374 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
4375                                              "runtime environment."));
4376 mark.hamzy      1.37         }
4377                      
4378 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
4379                      
4380 mark.hamzy      1.43         jmethodID id               = NULL;
4381                              String    interfaceType;
4382                              String    interfaceVersion;
4383                      
4384 marek           1.68         getInterfaceType(
4385                                  request->operationContext.get(
4386                                      ProviderIdContainer::NAME),
4387                                  interfaceType,
4388                                  interfaceVersion);
4389 mark.hamzy      1.43 
4390                              if (interfaceType == "JMPI")
4391                              {
4392 marek           1.68            id = env->GetMethodID(
4393                                         (jclass)pr.jProviderClass,
4394                                         "associators",
4395                                         "(Lorg/pegasus/jmpi/CIMObjectPath;"
4396                                             "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
4397                                                 "Ljava/lang/String;Ljava/lang/String;"
4398                                                     "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4399 mark.hamzy      1.24 
4400 mark.hamzy      1.43            if (id != NULL)
4401                                 {
4402                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
4403 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4404                                         "handleAssociatorsRequest: "
4405                                             "Found METHOD_ASSOCIATORPROVIDER.");
4406 mark.hamzy      1.43            }
4407                      
4408                                 if (id == NULL)
4409                                 {
4410                                     env->ExceptionClear();
4411 mark.hamzy      1.24 
4412 marek           1.68                id = env->GetMethodID(
4413                                              (jclass)pr.jProviderClass,
4414                                              "associators",
4415                                              "(Lorg/pegasus/jmpi/CIMObjectPath;"
4416                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
4417                                                      "Ljava/lang/String;Ljava/lang/String;"
4418                                                          "ZZ[Ljava/lang/String;)"
4419                                                              "[Lorg/pegasus/jmpi/CIMInstance;");
4420 mark.hamzy      1.43 
4421                                     if (id != NULL)
4422                                     {
4423                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4424 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4425                                             "handleAssociatorsRequest: "
4426                                                 "Found METHOD_ASSOCIATORPROVIDER.");
4427 mark.hamzy      1.43                }
4428                                 }
4429                              }
4430                              else if (interfaceType == "JMPIExperimental")
4431 mark.hamzy      1.24         {
4432 marek           1.68            id = env->GetMethodID(
4433                                          (jclass)pr.jProviderClass,
4434                                          "associators",
4435                                          "(Lorg/pegasus/jmpi/OperationContext;"
4436                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
4437                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
4438                                                      "Ljava/lang/String;Ljava/lang/String;"
4439                                                          "Ljava/lang/String;ZZ[Ljava/lang/String;)"
4440                                                              "Ljava/util/Vector;");
4441 schuur          1.12 
4442 mark.hamzy      1.43            if (id != NULL)
4443                                 {
4444                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
4445 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4446                                         "handleAssociatorsRequest: "
4447                                             "Found METHOD_ASSOCIATORPROVIDER2.");
4448 mark.hamzy      1.43            }
4449 mark.hamzy      1.24 
4450 mark.hamzy      1.43            if (id == NULL)
4451                                 {
4452                                     env->ExceptionClear();
4453 marek           1.68                id = env->GetMethodID(
4454                                              (jclass)pr.jProviderClass,
4455                                              "associators",
4456                                              "(Lorg/pegasus/jmpi/OperationContext;"
4457                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
4458                                                      "Lorg/pegasus/jmpi/CIMObjectPath;"
4459                                                          "Ljava/lang/String;Ljava/lang/String;"
4460                                                             "Ljava/lang/String;ZZ[Ljava/lang/String;"
4461                                                                ")[Lorg/pegasus/jmpi/CIMInstance;");
4462 mark.hamzy      1.43 
4463                                     if (id != NULL)
4464                                     {
4465                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4466 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4467                                             "handleAssociatorsRequest: "
4468                                                 "Found METHOD_CIMASSOCIATORPROVIDER2.");
4469 mark.hamzy      1.43                }
4470                                 }
4471 mark.hamzy      1.24         }
4472                      
4473                              if (id == NULL)
4474                              {
4475 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4476                                      "handleAssociatorsRequest: No method found!");
4477 mark.hamzy      1.43 
4478                                  PEG_METHOD_EXIT();
4479                      
4480 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
4481                                      CIM_ERR_FAILED,
4482                                      MessageLoaderParms(
4483 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
4484 marek           1.68                     "Could not find a method for the provider based on "
4485                                              "InterfaceType."));
4486 mark.hamzy      1.23         }
4487 mark.hamzy      1.24 
4488 schuur          1.1          JMPIjvm::checkException(env);
4489                      
4490 mark.hamzy      1.24         switch (eMethodFound)
4491                              {
4492 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
4493 mark.hamzy      1.24         {
4494 marek           1.68             jlong   jAssociationNameRef = DEBUG_ConvertCToJava(
4495                                                                    CIMObjectPath*,
4496                                                                    jlong,
4497                                                                    assocPath);
4498                                  jobject jAssociationName = env->NewObject(
4499                                                                 jv->CIMObjectPathClassRef,
4500                                                                 jv->CIMObjectPathNewJ,
4501                                                                 jAssociationNameRef);
4502 mark.hamzy      1.25 
4503                                  JMPIjvm::checkException(env);
4504                      
4505 marek           1.68             jlong   jPathNameRef = DEBUG_ConvertCToJava(
4506                                                             CIMObjectPath*,
4507                                                             jlong,
4508                                                             objectPath);
4509                                  jobject jPathName = env->NewObject(
4510                                                          jv->CIMObjectPathClassRef,
4511                                                          jv->CIMObjectPathNewJ,
4512                                                          jPathNameRef);
4513 mark.hamzy      1.43 
4514                                  JMPIjvm::checkException(env);
4515                      
4516 kumpf           1.77             jstring jResultClass =
4517 marek           1.68                 env->NewStringUTF(
4518                                          request->resultClass.getString().getCString());
4519 kumpf           1.77             jstring jRole =
4520 marek           1.68                 env->NewStringUTF(
4521                                          request->role.getCString());
4522 kumpf           1.77             jstring jResultRole =
4523 marek           1.68                 env->NewStringUTF(
4524                                          request->resultRole.getCString());
4525 mark.hamzy      1.25 
4526                                  JMPIjvm::checkException(env);
4527                      
4528                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4529                      
4530 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4531 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4532                                      "handleAssociatorsRequest: assocName = %s ",
4533                                      (const char*)assocPath->toString().getCString()));
4534                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4535                                      "handleAssociatorsRequest: pathName = %s ",
4536                                      (const char*)objectPath->toString().getCString()));
4537                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4538                                      "handleAssociatorsRequest: resultClass = %s ",
4539                                      (const char*)request->resultClass.getString().getCString()));
4540                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4541                                      "handleAssociatorsRequest: role = %s ",
4542                                      (const char*)request->role.getCString()));
4543                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4544                                      "handleAssociatorsRequest: resultRole = %s ",
4545                                      (const char*)request->resultRole.getCString()));
4546                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4547                                      "handleAssociatorsRequest: includeQualifiers = false");
4548                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4549                                      "handleAssociatorsRequest: includeClassOrigin = false");
4550 mark.hamzy      1.29 #endif
4551                      
4552 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4553                      
4554 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
4555                                                       (jobject)pr.jProvider,
4556                                                       id,
4557                                                       jAssociationName,
4558                                                       jPathName,
4559                                                       jResultClass,
4560                                                       jRole,
4561                                                       jResultRole,
4562                                                       JMPI_INCLUDE_QUALIFIERS,
4563                                                       request->includeClassOrigin,
4564                                                       jPropertyList);
4565 mark.hamzy      1.25 
4566 mark.hamzy      1.23             JMPIjvm::checkException(env);
4567 schuur          1.13 
4568 mark.hamzy      1.23             handler.processing();
4569 mark.hamzy      1.45             if (jAr) {
4570                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4571 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4572 schuur          1.1  
4573 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4574 mark.hamzy      1.24 
4575 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4576 schuur          1.13 
4577 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
4578                                                                jciRet,
4579                                                                JMPIjvm::jv.CIMInstanceCInst);
4580 schuur          1.13 
4581 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4582 schuur          1.13 
4583 marek           1.68                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4584                                                                   jlong,
4585                                                                   CIMInstance*,
4586                                                                   jciRetRef);
4587                                          CIMClass cls;
4588 mark.hamzy      1.40 
4589                                          try
4590                                          {
4591 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4592                                                 "handleAssociatorsRequest: "
4593                                                     "enter(METHOD_CIMASSOCIATORPROVIDER): "
4594                                                     "cimom_handle->getClass(%s).",
4595                                                 (const char*)ciRet->
4596                                                     getClassName().getString().getCString()
4597                                                 ));
4598                      
4599 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
4600                      
4601                                             cls = pr._cimom_handle->getClass(context,
4602                                                                              request->nameSpace,
4603                                                                              ciRet->getClassName(),
4604                                                                              false,
4605                                                                              true,
4606                                                                              true,
4607                                                                              CIMPropertyList());
4608 thilo.boehm     1.69 
4609                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4610                                                 "handleAssociatorsRequest: "
4611                                                     "exit(METHOD_CIMASSOCIATORPROVIDER): "
4612                                                     "cimom_handle->getClass(%s).",
4613                                                 (const char*)ciRet->
4614                                                        getClassName().getString().getCString()
4615                                                 ));
4616                      
4617 mark.hamzy      1.40                     }
4618                                          catch (CIMException e)
4619                                          {
4620 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4621                                                 "handleAssociatorsRequest: "
4622                                                 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) "
4623                                                     "during cimom_handle->getClass(%s): %s ",
4624                                                 (const char*)ciRet->
4625                                                        getClassName().getString().getCString(),
4626                                                 (const char*)e.getMessage().getCString()
4627                                                 ));
4628                      
4629                                             PEG_METHOD_EXIT();
4630 mark.hamzy      1.40                        throw;
4631                                          }
4632                      
4633 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
4634 mark.hamzy      1.24 
4635 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4636                      
4637 mark.hamzy      1.29                     handler.deliver(*ciRet);
4638 mark.hamzy      1.23                 }
4639                                  }
4640 mark.hamzy      1.24             handler.complete();
4641                                  break;
4642 mark.hamzy      1.23         }
4643 mark.hamzy      1.24 
4644 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER2:
4645 mark.hamzy      1.24         {
4646 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
4647                                                     OperationContext*,
4648                                                     jlong,
4649                                                     &request->operationContext);
4650                                  jobject joc = env->NewObject(
4651                                                    jv->OperationContextClassRef,
4652                                                    jv->OperationContextNewJ,
4653                                                    jocRef);
4654                      
4655                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4656                                                                  CIMObjectPath*,
4657                                                                  jlong,
4658                                                                  assocPath);
4659                                  jobject jAssociationName = env->NewObject(
4660                                                                 jv->CIMObjectPathClassRef,
4661                                                                 jv->CIMObjectPathNewJ,
4662                                                                 jAssociationNameRef);
4663 mark.hamzy      1.25 
4664                                  JMPIjvm::checkException(env);
4665                      
4666 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
4667                                                           CIMObjectPath*,
4668                                                           jlong,
4669                                                           objectPath);
4670                                  jobject jPathName = env->NewObject(
4671                                                          jv->CIMObjectPathClassRef,
4672                                                          jv->CIMObjectPathNewJ,
4673                                                          jPathNameRef);
4674 mark.hamzy      1.24 
4675                                  JMPIjvm::checkException(env);
4676                      
4677 kumpf           1.77             jstring jResultClass =
4678 marek           1.68                 env->NewStringUTF(
4679                                          request->resultClass.getString().getCString());
4680                                  jstring jRole =
4681                                      env->NewStringUTF(request->role.getCString());
4682 kumpf           1.77             jstring jResultRole =
4683 marek           1.68                 env->NewStringUTF(request->resultRole.getCString());
4684 mark.hamzy      1.25 
4685                                  JMPIjvm::checkException(env);
4686                      
4687                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4688                      
4689 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4690 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4691                                      "handleAssociatorsRequest: assocName = %s ",
4692                                      (const char*)assocPath->toString().getCString()));
4693                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4694                                      "handleAssociatorsRequest: pathName = %s ",
4695                                      (const char*)objectPath->toString().getCString()));
4696                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4697                                      "handleAssociatorsRequest: resultClass = %s ",
4698                                      (const char*)request->resultClass.getString().getCString()));
4699                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4700                                      "handleAssociatorsRequest: role = %s ",
4701                                      (const char*)request->role.getCString()));
4702                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4703                                      "handleAssociatorsRequest: resultRole = %s ",
4704                                      (const char*)request->resultRole.getCString()));
4705                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4706                                      "handleAssociatorsRequest: includeQualifiers = false");
4707                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4708                                      "handleAssociatorsRequest: includeClassOrigin = false");
4709 mark.hamzy      1.29 #endif
4710                      
4711 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4712                      
4713 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
4714                                                       (jobject)pr.jProvider,
4715                                                       id,
4716                                                       joc,
4717                                                       jAssociationName,
4718                                                       jPathName,
4719                                                       jResultClass,
4720                                                       jRole,
4721                                                       jResultRole,
4722                                                       JMPI_INCLUDE_QUALIFIERS,
4723                                                       request->includeClassOrigin,
4724                                                       jPropertyList);
4725 mark.hamzy      1.25 
4726 mark.hamzy      1.23             JMPIjvm::checkException(env);
4727                      
4728 mark.hamzy      1.43             if (joc)
4729                                  {
4730 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
4731 mark.hamzy      1.43 
4732                                     JMPIjvm::checkException(env);
4733                                  }
4734                      
4735 mark.hamzy      1.23             handler.processing();
4736 mark.hamzy      1.45             if (jAr) {
4737                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4738 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4739                      
4740 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4741 mark.hamzy      1.43 
4742 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4743                      
4744 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
4745                                                                jciRet,
4746                                                                JMPIjvm::jv.CIMInstanceCInst);
4747 mark.hamzy      1.24 
4748 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4749                      
4750 marek           1.68                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4751                                                                   jlong,
4752                                                                   CIMInstance*,
4753                                                                   jciRetRef);
4754                                          CIMClass cls;
4755 mark.hamzy      1.40 
4756                                          try
4757                                          {
4758 thilo.boehm     1.69                         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4759                                                  "handleAssociatorsRequest: "
4760                                                      "enter(METHOD_CIMASSOCIATORPROVIDER2): "
4761                                                      "cimom_handle->getClass(%s).",
4762                                                  (const char*)ciRet->
4763                                                      getClassName().getString().getCString()
4764                                                  ));
4765                      
4766 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
4767                      
4768                                             cls = pr._cimom_handle->getClass(context,
4769                                                                              request->nameSpace,
4770                                                                              ciRet->getClassName(),
4771                                                                              false,
4772                                                                              true,
4773                                                                              true,
4774                                                                              CIMPropertyList());
4775 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4776                                                 "handleAssociatorsRequest: "
4777                                                     "exit(METHOD_CIMASSOCIATORPROVIDER2): "
4778                                                     "cimom_handle->getClass(%s).",
4779                                                 (const char*)ciRet->
4780                                                     getClassName().getString().getCString()
4781                                                 ));
4782 mark.hamzy      1.40                     }
4783                                          catch (CIMException e)
4784                                          {
4785 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4786                                                 "handleAssociatorsRequest: "
4787                                                 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) "
4788                                                     "during cimom_handle->getClass(%s): %s ",
4789                                                 (const char*)ciRet->
4790                                                     getClassName().getString().getCString(),
4791                                                 (const char*)e.getMessage().getCString()
4792                                                 ));
4793                      
4794                                             PEG_METHOD_EXIT();
4795 mark.hamzy      1.40                        throw;
4796                                          }
4797                      
4798 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
4799 mark.hamzy      1.24 
4800 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4801                      
4802 mark.hamzy      1.29                     handler.deliver(*ciRet);
4803 mark.hamzy      1.23                 }
4804                                  }
4805 mark.hamzy      1.24             handler.complete();
4806                                  break;
4807                              }
4808                      
4809 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
4810 mark.hamzy      1.24         {
4811 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
4812                                                     OperationContext*,
4813                                                     jlong,
4814                                                     &request->operationContext);
4815                                  jobject joc = env->NewObject(
4816                                                    jv->OperationContextClassRef,
4817                                                    jv->OperationContextNewJ,
4818                                                    jocRef);
4819                      
4820                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4821                                                                  CIMObjectPath*,
4822                                                                  jlong,
4823                                                                  assocPath);
4824                                  jobject jAssociationName = env->NewObject(
4825                                                                 jv->CIMObjectPathClassRef,
4826                                                                 jv->CIMObjectPathNewJ,
4827                                                                 jAssociationNameRef);
4828 schuur          1.13 
4829 mark.hamzy      1.43             JMPIjvm::checkException(env);
4830 schuur          1.1  
4831 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
4832                                                           CIMObjectPath*,
4833                                                           jlong,
4834                                                           objectPath);
4835                                  jobject jPathName = env->NewObject(
4836                                                          jv->CIMObjectPathClassRef,
4837                                                          jv->CIMObjectPathNewJ,
4838                                                          jPathNameRef);
4839 w.white         1.31 
4840 mark.hamzy      1.43             JMPIjvm::checkException(env);
4841 schuur          1.13 
4842 kumpf           1.77             jstring jResultClass =
4843 marek           1.68                 env->NewStringUTF(
4844                                          request->resultClass.getString().getCString());
4845 kumpf           1.77             jstring jRole =
4846 marek           1.68                 env->NewStringUTF(request->role.getCString());
4847                                  jstring jResultRole =
4848                                      env->NewStringUTF(request->resultRole.getCString());
4849 mark.hamzy      1.23 
4850 mark.hamzy      1.43             JMPIjvm::checkException(env);
4851 schuur          1.1  
4852 mark.hamzy      1.43             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4853 schuur          1.13 
4854 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
4855 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4856                                      "handleAssociatorsRequest: assocName = %s ",
4857                                      (const char*)assocPath->toString().getCString()));
4858                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4859                                      "handleAssociatorsRequest: pathName = %s ",
4860                                      (const char*)objectPath->toString().getCString()));
4861                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4862                                      "handleAssociatorsRequest: resultClass = %s ",
4863                                      (const char*)request->resultClass.getString().getCString()));
4864                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4865                                      "handleAssociatorsRequest: role = %s ",
4866                                      (const char*)request->role.getCString()));
4867                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4868                                      "handleAssociatorsRequest: resultRole = %s ",
4869                                      (const char*)request->resultRole.getCString()));
4870                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4871                                      "handleAssociatorsRequest: includeQualifiers = false");
4872                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4873                                      "handleAssociatorsRequest: includeClassOrigin = false");
4874 mark.hamzy      1.43 #endif
4875 schuur          1.1  
4876 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
4877                      
4878 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
4879                                                        (jobject)pr.jProvider,
4880                                                        id,
4881                                                        joc,
4882                                                        jAssociationName,
4883                                                        jPathName,
4884                                                        jResultClass,
4885                                                        jRole,
4886                                                        jResultRole,
4887                                                        JMPI_INCLUDE_QUALIFIERS,
4888                                                        request->includeClassOrigin,
4889                                                        jPropertyList);
4890 mark.hamzy      1.23 
4891 mark.hamzy      1.43             JMPIjvm::checkException(env);
4892 mark.hamzy      1.23 
4893 mark.hamzy      1.43             if (joc)
4894                                  {
4895 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
4896 schuur          1.1  
4897 mark.hamzy      1.43                JMPIjvm::checkException(env);
4898                                  }
4899 schuur          1.1  
4900 mark.hamzy      1.43             handler.processing();
4901                                  if (jVec) {
4902 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
4903                                           i<m;
4904                                           i++)
4905                                      {
4906 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4907 schuur          1.1  
4908 marek           1.68                     jobject jciRet = env->CallObjectMethod(
4909                                                               jVec,
4910                                                               JMPIjvm::jv.VectorElementAt,
4911                                                               i);
4912 schuur          1.1  
4913 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4914 schuur          1.1  
4915 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
4916                                                                jciRet,
4917                                                                JMPIjvm::jv.CIMInstanceCInst);
4918 schuur          1.1  
4919 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4920 mark.hamzy      1.24 
4921 marek           1.68                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
4922                                                                   jlong,
4923                                                                   CIMInstance*,
4924                                                                   jciRetRef);
4925                                          CIMClass cls;
4926 schuur          1.1  
4927 mark.hamzy      1.43                     try
4928                                          {
4929 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4930                                                 "handleAssociatorsRequest: "
4931                                                     "enter(METHOD_ASSOCIATORPROVIDER2): "
4932                                                     "cimom_handle->getClass(%s).",
4933                                                 (const char*)ciRet->
4934                                                     getClassName().getString().getCString()
4935                                                 ));
4936                      
4937 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
4938                      
4939 marek           1.68                        cls = pr._cimom_handle->getClass(
4940                                                       context,
4941                                                       request->nameSpace,
4942                                                       ciRet->getClassName(),
4943                                                       false,
4944                                                       true,
4945                                                       true,
4946                                                       CIMPropertyList());
4947 thilo.boehm     1.69 
4948                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
4949                                                 "handleAssociatorsRequest: "
4950                                                     "exit(METHOD_ASSOCIATORPROVIDER2): "
4951                                                     "cimom_handle->getClass(%s).",
4952                                                 (const char*)ciRet->
4953                                                     getClassName().getString().getCString()
4954                                                 ));
4955                      
4956 mark.hamzy      1.43                     }
4957                                          catch (CIMException e)
4958                                          {
4959 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4960                                                 "handleAssociatorsRequest: "
4961                                                 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) "
4962                                                     "during cimom_handle->getClass(%s): %s ",
4963                                                 (const char*)ciRet->
4964                                                     getClassName().getString().getCString(),
4965                                                 (const char*)e.getMessage().getCString()
4966                                                 ));
4967                      
4968                                             PEG_METHOD_EXIT();
4969 mark.hamzy      1.43                        throw;
4970                                          }
4971                      
4972 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
4973 mark.hamzy      1.43 
4974                                          JMPIjvm::checkException(env);
4975                      
4976                                          handler.deliver(*ciRet);
4977                                      }
4978                                  }
4979                                  handler.complete();
4980                                  break;
4981                              }
4982                      
4983                              case METHOD_ASSOCIATORPROVIDER:
4984                              {
4985 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
4986                                                                  CIMObjectPath*,
4987                                                                  jlong,
4988                                                                  assocPath);
4989                                  jobject jAssociationName = env->NewObject(
4990                                                                 jv->CIMObjectPathClassRef,
4991                                                                 jv->CIMObjectPathNewJ,
4992                                                                 jAssociationNameRef);
4993 mark.hamzy      1.43 
4994                                  JMPIjvm::checkException(env);
4995                      
4996 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
4997                                                           CIMObjectPath*,
4998                                                           jlong,
4999                                                           objectPath);
5000                                  jobject jPathName = env->NewObject(
5001                                                          jv->CIMObjectPathClassRef,
5002                                                          jv->CIMObjectPathNewJ,
5003                                                          jPathNameRef);
5004 mark.hamzy      1.43 
5005                                  JMPIjvm::checkException(env);
5006                      
5007 kumpf           1.77             jstring jResultClass =
5008 marek           1.68                 env->NewStringUTF(
5009                                          request->resultClass.getString().getCString());
5010                                  jstring jRole =
5011                                      env->NewStringUTF(request->role.getCString());
5012                                  jstring jResultRole =
5013                                      env->NewStringUTF(request->resultRole.getCString());
5014 mark.hamzy      1.43 
5015                                  JMPIjvm::checkException(env);
5016                      
5017                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
5018                      
5019                      #ifdef PEGASUS_DEBUG
5020 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5021                                      "handleAssociatorsRequest: assocName = %s ",
5022                                      (const char*)assocPath->toString().getCString()));
5023                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5024                                      "handleAssociatorsRequest: pathName = %s ",
5025                                      (const char*)objectPath->toString().getCString()));
5026                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5027                                      "handleAssociatorsRequest: resultClass = %s ",
5028                                      (const char*)request->resultClass.getString().getCString()));
5029                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5030                                      "handleAssociatorsRequest: role = %s ",
5031                                      (const char*)request->role.getCString()));
5032                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5033                                      "handleAssociatorsRequest: resultRole = %s ",
5034                                      (const char*)request->resultRole.getCString()));
5035                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5036                                      "handleAssociatorsRequest: includeQualifiers = false");
5037                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5038                                      "handleAssociatorsRequest: includeClassOrigin = false");
5039 mark.hamzy      1.43 #endif
5040                      
5041 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5042                      
5043 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5044                                                        (jobject)pr.jProvider,
5045                                                        id,
5046                                                        jAssociationName,
5047                                                        jPathName,
5048                                                        jResultClass,
5049                                                        jRole,
5050                                                        jResultRole,
5051                                                        JMPI_INCLUDE_QUALIFIERS,
5052                                                        request->includeClassOrigin,
5053                                                        jPropertyList);
5054 mark.hamzy      1.43 
5055                                  JMPIjvm::checkException(env);
5056                      
5057                                  handler.processing();
5058                                  if (jVec) {
5059 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5060                                           i<m;
5061                                           i++)
5062                                      {
5063 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5064 marek           1.68                     jobject jciRet = env->CallObjectMethod(
5065                                                               jVec,
5066                                                               JMPIjvm::jv.VectorElementAt,
5067                                                               i);
5068 mark.hamzy      1.43 
5069                                          JMPIjvm::checkException(env);
5070                      
5071 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
5072                                                                jciRet,
5073                                                                JMPIjvm::jv.CIMInstanceCInst);
5074                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
5075                                                                   jlong,
5076                                                                   CIMInstance*,
5077                                                                   jciRetRef);
5078                                          CIMClass cls;
5079 mark.hamzy      1.43 
5080                                          try
5081                                          {
5082 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5083                                                 "handleAssociatorsRequest: "
5084                                                     "enter(METHOD_ASSOCIATORPROVIDER): "
5085                                                     "cimom_handle->getClass(%s).",
5086                                                 (const char*)ciRet->
5087                                                     getClassName().getString().getCString()
5088                                                 ));
5089                      
5090 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
5091                      
5092                                             cls = pr._cimom_handle->getClass(context,
5093                                                                              request->nameSpace,
5094                                                                              ciRet->getClassName(),
5095                                                                              false,
5096                                                                              true,
5097                                                                              true,
5098                                                                              CIMPropertyList());
5099 thilo.boehm     1.69 
5100                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5101                                                 "handleAssociatorsRequest: "
5102                                                     "exit(METHOD_ASSOCIATORPROVIDER): "
5103                                                     "cimom_handle->getClass(%s).",
5104                                                 (const char*)ciRet->
5105                                                     getClassName().getString().getCString()
5106                                                 ));
5107 mark.hamzy      1.43                     }
5108                                          catch (CIMException e)
5109                                          {
5110 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5111                                                 "handleAssociatorsRequest: "
5112                                                 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) "
5113                                                     "during cimom_handle->getClass(%s): %s ",
5114                                                 (const char*)ciRet->
5115                                                     getClassName().getString().getCString(),
5116                                                 (const char*)e.getMessage().getCString()
5117                                                 ));
5118                      
5119                                             PEG_METHOD_EXIT();
5120 mark.hamzy      1.43                        throw;
5121                                          }
5122                      
5123 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
5124 mark.hamzy      1.43 
5125                                          JMPIjvm::checkException(env);
5126                      
5127                                          handler.deliver(*ciRet);
5128                                      }
5129                                  }
5130                                  handler.complete();
5131                                  break;
5132                              }
5133                      
5134                              case METHOD_UNKNOWN:
5135                              {
5136 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5137                                      "handleAssociatorsRequest: Unknown method provider!");
5138 mark.hamzy      1.43             break;
5139                              }
5140                              }
5141                          }
5142                          HandlerCatch(handler);
5143                      
5144                          if (env) JMPIjvm::detachThread();
5145                      
5146                          PEG_METHOD_EXIT();
5147                      
5148                          return(response);
5149                      }
5150                      
5151 marek           1.68 Message * JMPIProviderManager::handleAssociatorNamesRequest(
5152                          const Message * message) throw()
5153 mark.hamzy      1.43 {
5154 marek           1.68     PEG_METHOD_ENTER(
5155                              TRC_PROVIDERMANAGER,
5156                              "JMPIProviderManager::handleAssociatorNamesRequest");
5157 mark.hamzy      1.43 
5158 kumpf           1.55     HandlerIntro(AssociatorNames,message,request,response,handler);
5159 mark.hamzy      1.43 
5160                          typedef enum {
5161                             METHOD_UNKNOWN = 0,
5162                             METHOD_CIMASSOCIATORPROVIDER,
5163                             METHOD_CIMASSOCIATORPROVIDER2,
5164                             METHOD_ASSOCIATORPROVIDER,
5165                             METHOD_ASSOCIATORPROVIDER2
5166                          } METHOD_VERSION;
5167                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5168                          JNIEnv          *env           = NULL;
5169                      
5170 marek           1.68     try
5171                          {
5172 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
5173                                   "handleAssociatorNamesRequest: "
5174 kumpf           1.77                  "name space = %s class name = %s",
5175 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
5176                                   (const char*)request->
5177                                       objectName.getClassName().getString().getCString()
5178                                   ));
5179 mark.hamzy      1.43 
5180                              // make target object path
5181 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
5182                                                              System::getHostName(),
5183                                                              request->nameSpace,
5184                                                              request->objectName.getClassName(),
5185                                                              request->objectName.getKeyBindings());
5186                              CIMObjectPath *assocPath  = new CIMObjectPath(
5187                                                              System::getHostName(),
5188                                                              request->nameSpace,
5189                                                              request->assocClass.getString());
5190 mark.hamzy      1.43 
5191                              // resolve provider name
5192                              ProviderName name = _resolveProviderName(
5193                                  request->operationContext.get(ProviderIdContainer::NAME));
5194                      
5195                              // get cached or load new provider module
5196 marek           1.68         JMPIProvider::OpProviderHolder ph =
5197                                  providerManager.getProvider(
5198                                      name.getPhysicalName(),
5199                                      name.getLogicalName(),
5200                                      String::EMPTY);
5201 mark.hamzy      1.43 
5202                              // forward request
5203                              JMPIProvider &pr = ph.GetProvider();
5204                      
5205 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
5206                                  "handleAssociatorNamesRequest: "
5207 kumpf           1.77                 "Calling provider: %s, role: %s, aCls: %s",
5208 thilo.boehm     1.69             (const char*)pr.getName().getCString(),
5209                                  (const char*)request->role.getCString(),
5210                                  (const char*)request->assocClass.getString().getCString()
5211                                  ));
5212 mark.hamzy      1.43 
5213                              JvmVector *jv = 0;
5214                      
5215                              env = JMPIjvm::attachThread(&jv);
5216                      
5217                              if (!env)
5218                              {
5219 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5220                                      "handleAssociatorNamesRequest: "
5221                                          "Could not initialize the JVM (Java Virtual Machine) "
5222                                          "runtime environment.");
5223                      
5224 mark.hamzy      1.43             PEG_METHOD_EXIT();
5225 mark.hamzy      1.37 
5226 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
5227                                      CIM_ERR_FAILED,
5228                                      MessageLoaderParms(
5229 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
5230 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
5231                                              "runtime environment."));
5232 mark.hamzy      1.37         }
5233                      
5234 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
5235                      
5236 mark.hamzy      1.43         jmethodID id               = NULL;
5237                              String    interfaceType;
5238                              String    interfaceVersion;
5239                      
5240 marek           1.68         getInterfaceType(
5241                                  request->operationContext.get(ProviderIdContainer::NAME),
5242                                  interfaceType,
5243                                  interfaceVersion);
5244 mark.hamzy      1.43 
5245                              if (interfaceType == "JMPI")
5246                              {
5247 marek           1.68            id = env->GetMethodID(
5248                                          (jclass)pr.jProviderClass,
5249                                          "associatorNames",
5250                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
5251                                              "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5252                                                  "Ljava/lang/String;Ljava/lang/String;)"
5253                                                       "Ljava/util/Vector;");
5254 mark.hamzy      1.43 
5255                                 if (id != NULL)
5256                                 {
5257                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
5258 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5259                                         "handleAssociatorNamesRequest: "
5260                                             "Found METHOD_ASSOCIATORPROVIDER.");
5261 mark.hamzy      1.43            }
5262 mark.hamzy      1.24 
5263 mark.hamzy      1.43            if (id == NULL)
5264                                 {
5265                                     env->ExceptionClear();
5266 marek           1.68                id = env->GetMethodID(
5267                                              (jclass)pr.jProviderClass,
5268                                              "associatorNames",
5269                                              "(Lorg/pegasus/jmpi/CIMObjectPath;"
5270                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5271                                                      "Ljava/lang/String;Ljava/lang/String;)"
5272                                                          "[Lorg/pegasus/jmpi/CIMObjectPath;");
5273 mark.hamzy      1.43 
5274                                     if (id != NULL)
5275                                     {
5276                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
5277 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5278                                             "handleAssociatorNamesRequest: "
5279                                                 "Found METHOD_CIMASSOCIATORPROVIDER.");
5280 mark.hamzy      1.43                }
5281                                 }
5282                              }
5283                              else if (interfaceType == "JMPIExperimental")
5284 mark.hamzy      1.24         {
5285 marek           1.68            id = env->GetMethodID(
5286                                          (jclass)pr.jProviderClass,
5287                                          "associatorNames",
5288                                          "(Lorg/pegasus/jmpi/OperationContext;"
5289                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
5290                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5291                                                      "Ljava/lang/String;Ljava/lang/String;)"
5292                                                          "Ljava/util/Vector;");
5293 mark.hamzy      1.24 
5294 mark.hamzy      1.43            if (id != NULL)
5295                                 {
5296                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
5297 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5298                                         "handleAssociatorNamesRequest: "
5299                                             "Found METHOD_ASSOCIATORPROVIDER2.");
5300 mark.hamzy      1.43            }
5301 mark.hamzy      1.24 
5302 mark.hamzy      1.43            if (id == NULL)
5303                                 {
5304                                     env->ExceptionClear();
5305 mark.hamzy      1.24 
5306 marek           1.68                id = env->GetMethodID(
5307                                              (jclass)pr.jProviderClass,
5308                                              "associatorNames",
5309                                              "(Lorg/pegasus/jmpi/OperationContext;"
5310                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
5311                                                      "Lorg/pegasus/jmpi/CIMObjectPath;"
5312                                                          "Ljava/lang/String;Ljava/lang/String;"
5313                                                              "Ljava/lang/String;)["
5314                                                                  "Lorg/pegasus/jmpi/CIMObjectPath;");
5315 mark.hamzy      1.43 
5316                                     if (id != NULL)
5317                                     {
5318                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
5319 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5320                                             "handleAssociatorNamesRequest: "
5321                                                 "Found METHOD_CIMASSOCIATORPROVIDER2.");
5322 mark.hamzy      1.43                }
5323                                 }
5324 mark.hamzy      1.24         }
5325 schuur          1.13 
5326 mark.hamzy      1.24         if (id == NULL)
5327                              {
5328 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5329                                      "handleAssociatorNames: No method found!");
5330 mark.hamzy      1.43 
5331                                  PEG_METHOD_EXIT();
5332                      
5333 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
5334                                      CIM_ERR_FAILED,
5335                                      MessageLoaderParms(
5336 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
5337 marek           1.68                     "Could not find a method for the provider based on "
5338                                              "InterfaceType."));
5339 mark.hamzy      1.23         }
5340 mark.hamzy      1.24 
5341 schuur          1.1          JMPIjvm::checkException(env);
5342                      
5343 mark.hamzy      1.24         switch (eMethodFound)
5344                              {
5345 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
5346                              {
5347 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5348                                                                  CIMObjectPath*,
5349                                                                  jlong,
5350                                                                  assocPath);
5351                                  jobject jAssociationName = env->NewObject(
5352                                                                 jv->CIMObjectPathClassRef,
5353                                                                 jv->CIMObjectPathNewJ,
5354                                                                 jAssociationNameRef);
5355 mark.hamzy      1.43 
5356                                  JMPIjvm::checkException(env);
5357                      
5358 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
5359                                                           CIMObjectPath*,
5360                                                           jlong,
5361                                                           objectPath);
5362                                  jobject jPathName = env->NewObject(
5363                                                          jv->CIMObjectPathClassRef,
5364                                                          jv->CIMObjectPathNewJ,
5365                                                          jPathNameRef);
5366 mark.hamzy      1.43 
5367                                  JMPIjvm::checkException(env);
5368                      
5369 kumpf           1.77             jstring jResultClass =
5370 marek           1.68                 env->NewStringUTF(
5371                                          request->resultClass.getString().getCString());
5372 kumpf           1.77             jstring jRole        =
5373 marek           1.68                 env->NewStringUTF(request->role.getCString());
5374                                  jstring jResultRole  =
5375                                      env->NewStringUTF(request->resultRole.getCString());
5376 mark.hamzy      1.43 
5377                                  JMPIjvm::checkException(env);
5378                      
5379                      #ifdef PEGASUS_DEBUG
5380 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5381                                      "handleAssociatorNamesRequest: assocName = %s ",
5382                                      (const char*)assocPath->toString().getCString()));
5383                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5384                                      "handleAssociatorNamesRequest: resultClass = %s ",
5385                                      (const char*)request->resultClass.getString().getCString()));
5386                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5387                                      "handleAssociatorNamesRequest: role = %s ",
5388                                      (const char*)request->role.getCString()));
5389                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5390                                      "handleAssociatorNamesRequest: resultRole = %s ",
5391                                      (const char*)request->resultRole.getCString()));
5392 mark.hamzy      1.43 #endif
5393                      
5394 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5395                      
5396 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
5397                                                       (jobject)pr.jProvider,
5398                                                       id,
5399                                                       jAssociationName,
5400                                                       jPathName,
5401                                                       jResultClass,
5402                                                       jRole,
5403                                                       jResultRole);
5404 mark.hamzy      1.43 
5405                                  JMPIjvm::checkException(env);
5406                      
5407                                  handler.processing();
5408 mark.hamzy      1.45             if (jAr) {
5409                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
5410 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5411                      
5412 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
5413 mark.hamzy      1.43 
5414                                          JMPIjvm::checkException(env);
5415                      
5416 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
5417                                                                 jcopRet,
5418                                                                 JMPIjvm::jv.CIMObjectPathCInst);
5419                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5420                                                                      jlong,
5421                                                                      CIMObjectPath*,
5422                                                                      jcopRetRef);
5423 mark.hamzy      1.43 
5424                                          JMPIjvm::checkException(env);
5425                      
5426                                          handler.deliver(*copRet);
5427                                      }
5428                                  }
5429                                  handler.complete();
5430                                  break;
5431                              }
5432                      
5433                              case METHOD_CIMASSOCIATORPROVIDER2:
5434 mark.hamzy      1.24         {
5435 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
5436                                                     OperationContext*,
5437                                                     jlong,
5438                                                     &request->operationContext);
5439                                  jobject joc = env->NewObject(
5440                                                    jv->OperationContextClassRef,
5441                                                    jv->OperationContextNewJ,
5442                                                    jocRef);
5443                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5444                                                                  CIMObjectPath*,
5445                                                                  jlong,
5446                                                                  assocPath);
5447                                  jobject jAssociationName = env->NewObject(
5448                                                                 jv->CIMObjectPathClassRef,
5449                                                                 jv->CIMObjectPathNewJ,
5450                                                                 jAssociationNameRef);
5451 mark.hamzy      1.25 
5452                                  JMPIjvm::checkException(env);
5453                      
5454 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
5455                                                           CIMObjectPath*,
5456                                                           jlong,
5457                                                           objectPath);
5458                                  jobject jPathName = env->NewObject(
5459                                                          jv->CIMObjectPathClassRef,
5460                                                          jv->CIMObjectPathNewJ,
5461                                                          jPathNameRef);
5462 mark.hamzy      1.43 
5463                                  JMPIjvm::checkException(env);
5464                      
5465 kumpf           1.77             jstring jResultClass =
5466 marek           1.68                 env->NewStringUTF(
5467                                          request->resultClass.getString().getCString());
5468                                  jstring jRole =
5469                                      env->NewStringUTF(request->role.getCString());
5470                                  jstring jResultRole =
5471                                      env->NewStringUTF(request->resultRole.getCString());
5472 mark.hamzy      1.25 
5473                                  JMPIjvm::checkException(env);
5474                      
5475 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5476 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5477                                      "handleAssociatorNamesRequest: assocName = %s ",
5478                                      (const char*)assocPath->toString().getCString()));
5479                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5480                                      "handleAssociatorNamesRequest: resultClass = %s ",
5481                                      (const char*)request->resultClass.getString().getCString()));
5482                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5483                                      "handleAssociatorNamesRequest: role = %s ",
5484                                      (const char*)request->role.getCString()));
5485                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5486                                      "handleAssociatorNamesRequest: resultRole = %s ",
5487                                      (const char*)request->resultRole.getCString()));
5488 mark.hamzy      1.29 #endif
5489                      
5490 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5491                      
5492 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
5493                                                       (jobject)pr.jProvider,
5494                                                       id,
5495                                                       joc,
5496                                                       jAssociationName,
5497                                                       jPathName,
5498                                                       jResultClass,
5499                                                       jRole,
5500                                                       jResultRole);
5501 mark.hamzy      1.25 
5502 mark.hamzy      1.23             JMPIjvm::checkException(env);
5503                      
5504 mark.hamzy      1.43             if (joc)
5505                                  {
5506 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
5507 mark.hamzy      1.43 
5508                                     JMPIjvm::checkException(env);
5509                                  }
5510                      
5511 mark.hamzy      1.23             handler.processing();
5512 mark.hamzy      1.45             if (jAr) {
5513                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
5514 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5515                      
5516 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
5517 mark.hamzy      1.24 
5518 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5519                      
5520 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
5521                                                                 jcopRet,
5522                                                                 JMPIjvm::jv.CIMObjectPathCInst);
5523                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5524                                                                      jlong,
5525                                                                      CIMObjectPath*,
5526                                                                      jcopRetRef);
5527 mark.hamzy      1.23 
5528                                          JMPIjvm::checkException(env);
5529                      
5530 mark.hamzy      1.29                     handler.deliver(*copRet);
5531 mark.hamzy      1.23                 }
5532                                  }
5533                                  handler.complete();
5534 mark.hamzy      1.24             break;
5535 mark.hamzy      1.23         }
5536 mark.hamzy      1.24 
5537 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
5538                              {
5539 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5540                                                                  CIMObjectPath*,
5541                                                                  jlong,
5542                                                                  assocPath);
5543                                  jobject jAssociationName = env->NewObject(
5544                                                                 jv->CIMObjectPathClassRef,
5545                                                                 jv->CIMObjectPathNewJ,
5546                                                                 jAssociationNameRef);
5547 mark.hamzy      1.43 
5548                                  JMPIjvm::checkException(env);
5549                      
5550 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
5551                                                           CIMObjectPath*,
5552                                                           jlong,
5553                                                           objectPath);
5554                                  jobject jPathName = env->NewObject(
5555                                                          jv->CIMObjectPathClassRef,
5556                                                          jv->CIMObjectPathNewJ,
5557                                                          jPathNameRef);
5558 mark.hamzy      1.43 
5559                                  JMPIjvm::checkException(env);
5560                      
5561 kumpf           1.77             jstring jResultClass =
5562 marek           1.68                 env->NewStringUTF(
5563                                          request->resultClass.getString().getCString());
5564 kumpf           1.77             jstring jRole =
5565 marek           1.68                 env->NewStringUTF(request->role.getCString());
5566                                  jstring jResultRole =
5567                                      env->NewStringUTF(request->resultRole.getCString());
5568 mark.hamzy      1.43 
5569                                  JMPIjvm::checkException(env);
5570                      
5571                      #ifdef PEGASUS_DEBUG
5572 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5573                                      "handleAssociatorNamesRequest: assocName = %s ",
5574                                      (const char*)assocPath->toString().getCString()));
5575                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5576                                      "handleAssociatorNamesRequest: pathName = %s ",
5577                                      (const char*)objectPath->toString().getCString()));
5578                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5579                                      "handleAssociatorNamesRequest: resultClass = %s ",
5580                                      (const char*)request->resultClass.getString().getCString()));
5581                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5582                                      "handleAssociatorNamesRequest: role = %s ",
5583                                      (const char*)request->role.getCString()));
5584                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5585                                      "handleAssociatorNamesRequest: resultRole = %s ",
5586                                      (const char*)request->resultRole.getCString()));
5587 mark.hamzy      1.43 #endif
5588                      
5589 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5590                      
5591 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5592                                                        (jobject)pr.jProvider,
5593                                                        id,
5594                                                        jAssociationName,
5595                                                        jPathName,
5596                                                        jResultClass,
5597                                                        jRole,
5598                                                        jResultRole);
5599 mark.hamzy      1.43 
5600                                  JMPIjvm::checkException(env);
5601                      
5602                                  handler.processing();
5603                                  if (jVec) {
5604 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5605                                           i<m; i++)
5606                                      {
5607 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5608                      
5609 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
5610                                                                jVec,
5611                                                                JMPIjvm::jv.VectorElementAt,
5612                                                                i);
5613 mark.hamzy      1.43 
5614                                          JMPIjvm::checkException(env);
5615                      
5616 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
5617                                                                 jcopRet,
5618                                                                 JMPIjvm::jv.CIMObjectPathCInst);
5619                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5620                                                                      jlong,
5621                                                                      CIMObjectPath*,
5622                                                                      jcopRetRef);
5623 mark.hamzy      1.43 
5624                                          JMPIjvm::checkException(env);
5625                      
5626                                          handler.deliver(*copRet);
5627                                      }
5628                                  }
5629                                  handler.complete();
5630                                  break;
5631                              }
5632                      
5633                              case METHOD_ASSOCIATORPROVIDER2:
5634 mark.hamzy      1.24         {
5635 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
5636                                                     OperationContext*,
5637                                                     jlong,
5638                                                     &request->operationContext);
5639                                  jobject joc = env->NewObject(
5640                                                    jv->OperationContextClassRef,
5641                                                    jv->OperationContextNewJ,
5642                                                    jocRef);
5643                      
5644                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5645                                                                  CIMObjectPath*,
5646                                                                  jlong,
5647                                                                  assocPath);
5648 kumpf           1.77             jobject jAssociationName = env->NewObject(
5649 marek           1.68                                            jv->CIMObjectPathClassRef,
5650                                                                 jv->CIMObjectPathNewJ,
5651                                                                 jAssociationNameRef);
5652 mark.hamzy      1.25 
5653                                  JMPIjvm::checkException(env);
5654                      
5655 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
5656                                                           CIMObjectPath*,
5657                                                           jlong,
5658                                                           objectPath);
5659                                  jobject jPathName = env->NewObject(
5660                                                          jv->CIMObjectPathClassRef,
5661                                                          jv->CIMObjectPathNewJ,
5662                                                          jPathNameRef);
5663 mark.hamzy      1.24 
5664                                  JMPIjvm::checkException(env);
5665                      
5666 kumpf           1.77             jstring jResultClass =
5667 marek           1.68                 env->NewStringUTF(
5668                                          request->resultClass.getString().getCString());
5669 kumpf           1.77             jstring jRole =
5670 marek           1.68                 env->NewStringUTF(request->role.getCString());
5671                                  jstring jResultRole =
5672                                      env->NewStringUTF(request->resultRole.getCString());
5673 mark.hamzy      1.25 
5674                                  JMPIjvm::checkException(env);
5675                      
5676 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5677 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5678                                      "handleAssociatorNamesRequest: assocName = %s ",
5679                                      (const char*)assocPath->toString().getCString()));
5680                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5681                                      "handleAssociatorNamesRequest: pathName = %s ",
5682                                      (const char*)objectPath->toString().getCString()));
5683                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5684                                      "handleAssociatorNamesRequest: resultClass = %s ",
5685                                      (const char*)request->resultClass.getString().getCString()));
5686                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5687                                      "handleAssociatorNamesRequest: role = %s ",
5688                                      (const char*)request->role.getCString()));
5689                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5690                                      "handleAssociatorNamesRequest: resultRole = %s ",
5691                                      (const char*)request->resultRole.getCString()));
5692 mark.hamzy      1.29 #endif
5693                      
5694 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
5695                      
5696 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
5697                                                        (jobject)pr.jProvider,
5698                                                        id,
5699                                                        joc,
5700                                                        jAssociationName,
5701                                                        jPathName,
5702                                                        jResultClass,
5703                                                        jRole,
5704                                                        jResultRole);
5705 mark.hamzy      1.25 
5706 mark.hamzy      1.23             JMPIjvm::checkException(env);
5707                      
5708 mark.hamzy      1.43             if (joc)
5709                                  {
5710 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
5711 mark.hamzy      1.43 
5712                                     JMPIjvm::checkException(env);
5713                                  }
5714                      
5715 mark.hamzy      1.23             handler.processing();
5716 mark.hamzy      1.24             if (jVec) {
5717 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
5718                                           i<m; i++)
5719                                      {
5720 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5721 schuur          1.13 
5722 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
5723                                                                jVec,
5724                                                                JMPIjvm::jv.VectorElementAt,
5725                                                                i);
5726 mark.hamzy      1.24 
5727 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5728 schuur          1.13 
5729 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
5730                                                                 jcopRet,
5731                                                                 JMPIjvm::jv.CIMObjectPathCInst);
5732                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
5733                                                                      jlong,
5734                                                                      CIMObjectPath*,
5735                                                                      jcopRetRef);
5736 schuur          1.1  
5737 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5738 schuur          1.1  
5739 mark.hamzy      1.29                     handler.deliver(*copRet);
5740 mark.hamzy      1.23                 }
5741                                  }
5742                                  handler.complete();
5743 mark.hamzy      1.24             break;
5744                              }
5745                      
5746                              case METHOD_UNKNOWN:
5747                              {
5748 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5749                                      "handleAssociatorNamesRequest: Unknown method provider!");
5750 mark.hamzy      1.24             break;
5751                              }
5752 mark.hamzy      1.23         }
5753 schuur          1.1      }
5754                          HandlerCatch(handler);
5755 schuur          1.12 
5756 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
5757 schuur          1.12 
5758 schuur          1.1      PEG_METHOD_EXIT();
5759                      
5760                          return(response);
5761                      }
5762                      
5763 marek           1.68 Message * JMPIProviderManager::handleReferencesRequest(
5764                          const Message * message) throw()
5765 schuur          1.1  {
5766 marek           1.68     PEG_METHOD_ENTER(
5767                              TRC_PROVIDERMANAGER,
5768                              "JMPIProviderManager::handleReferencesRequest");
5769 mark.hamzy      1.23 
5770 kumpf           1.55     HandlerIntro(References,message,request,response,handler);
5771 schuur          1.1  
5772 mark.hamzy      1.24     typedef enum {
5773                             METHOD_UNKNOWN = 0,
5774 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
5775                             METHOD_CIMASSOCIATORPROVIDER2,
5776                             METHOD_ASSOCIATORPROVIDER,
5777                             METHOD_ASSOCIATORPROVIDER2,
5778 mark.hamzy      1.24     } METHOD_VERSION;
5779                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5780                          JNIEnv          *env           = NULL;
5781 schuur          1.13 
5782 marek           1.68     try
5783                          {
5784 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
5785                                   "handleReferencesRequest: "
5786 kumpf           1.77                  "name space = %s class name = %s",
5787 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
5788                                   (const char*)request->
5789                                       objectName.getClassName().getString().getCString()
5790                                   ));
5791 mark.hamzy      1.23 
5792 schuur          1.1          // make target object path
5793 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
5794                                                              System::getHostName(),
5795                                                              request->nameSpace,
5796                                                              request->objectName.getClassName(),
5797                                                              request->objectName.getKeyBindings());
5798                              CIMObjectPath *resultPath = new CIMObjectPath(
5799                                                              System::getHostName(),
5800                                                              request->nameSpace,
5801                                                              request->resultClass.getString());
5802 schuur          1.1  
5803                              // resolve provider name
5804 kumpf           1.2          ProviderName name = _resolveProviderName(
5805                                  request->operationContext.get(ProviderIdContainer::NAME));
5806 schuur          1.1  
5807 mark.hamzy      1.43         // get cached or load new provider module
5808 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
5809 marek           1.68             providerManager.getProvider(
5810                                      name.getPhysicalName(),
5811                                      name.getLogicalName(),
5812                                      String::EMPTY);
5813 mark.hamzy      1.43 
5814                              // convert arguments
5815                              OperationContext context;
5816                      
5817 marek           1.68         context.insert(
5818                                  request->operationContext.get(IdentityContainer::NAME));
5819                              context.insert(
5820                                  request->operationContext.get(AcceptLanguageListContainer::NAME));
5821                              context.insert(
5822                                  request->operationContext.get(ContentLanguageListContainer::NAME));
5823 mark.hamzy      1.43 
5824                              // forward request
5825                              JMPIProvider &pr = ph.GetProvider();
5826                      
5827 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
5828                                  "handleReferencesRequest: "
5829 kumpf           1.77                 "Calling provider: %s, role: %s, refCls: %s",
5830 thilo.boehm     1.69             (const char*)pr.getName().getCString(),
5831                                  (const char*)request->role.getCString(),
5832                                  (const char*)request->resultClass.getString().getCString()
5833                                  ));
5834 mark.hamzy      1.43 
5835                              JvmVector *jv = 0;
5836                      
5837                              env = JMPIjvm::attachThread(&jv);
5838                      
5839                              if (!env)
5840                              {
5841 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5842                                      "handleReferencesRequest: "
5843                                          "Could not initialize the JVM (Java Virtual Machine) "
5844                                          "runtime environment.");
5845                      
5846 mark.hamzy      1.43             PEG_METHOD_EXIT();
5847                      
5848 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
5849                                      CIM_ERR_FAILED,
5850                                      MessageLoaderParms(
5851 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
5852 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
5853                                              "runtime environment."));
5854 mark.hamzy      1.43         }
5855                      
5856                              JMPIProvider::pm_service_op_lock op_lock(&pr);
5857                      
5858                              jmethodID id               = NULL;
5859                              String    interfaceType;
5860                              String    interfaceVersion;
5861                      
5862 marek           1.68         getInterfaceType(
5863                                  request->operationContext.get(ProviderIdContainer::NAME),
5864                                  interfaceType,
5865                                  interfaceVersion);
5866 mark.hamzy      1.43 
5867                              if (interfaceType == "JMPI")
5868                              {
5869 marek           1.68            id = env->GetMethodID(
5870                                          (jclass)pr.jProviderClass,
5871                                          "references",
5872                                          "(Lorg/pegasus/jmpi/CIMObjectPath;"
5873                                               "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5874                                                   "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
5875 mark.hamzy      1.43 
5876                                 if (id != NULL)
5877                                 {
5878                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
5879 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5880                                         "handleReferencesRequest: "
5881                                             "Found METHOD_ASSOCIATORPROVIDER.");
5882 mark.hamzy      1.43            }
5883                      
5884                                 if (id == NULL)
5885                                 {
5886                                     env->ExceptionClear();
5887 marek           1.68                id = env->GetMethodID(
5888                                              (jclass)pr.jProviderClass,
5889                                              "references",
5890                                              "(Lorg/pegasus/jmpi/CIMObjectPath;"
5891                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5892                                                      "ZZ[Ljava/lang/String;)"
5893                                                          "[Lorg/pegasus/jmpi/CIMInstance;");
5894 mark.hamzy      1.43 
5895                                     if (id != NULL)
5896                                     {
5897                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
5898 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5899                                             "handleReferencesRequest: "
5900                                                 "Found METHOD_CIMASSOCIATORPROVIDER.");
5901 mark.hamzy      1.43                }
5902                                 }
5903                              }
5904                              else if (interfaceType == "JMPIExperimental")
5905                              {
5906 marek           1.68            id = env->GetMethodID(
5907                                          (jclass)pr.jProviderClass,
5908                                          "references",
5909                                          "(Lorg/pegasus/jmpi/OperationContext;"
5910                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
5911                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
5912                                                      "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
5913 mark.hamzy      1.43 
5914                                 if (id != NULL)
5915                                 {
5916                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
5917 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5918                                         "handleReferencesRequest: "
5919                                             "Found METHOD_ASSOCIATORPROVIDER2.");
5920 mark.hamzy      1.43            }
5921                      
5922                                 if (id == NULL)
5923                                 {
5924                                     env->ExceptionClear();
5925 marek           1.68                id = env->GetMethodID(
5926                                              (jclass)pr.jProviderClass,
5927                                              "references",
5928                                              "(Lorg/pegasus/jmpi/OperationContext;"
5929                                                   "Lorg/pegasus/jmpi/CIMObjectPath;"
5930                                                       "Lorg/pegasus/jmpi/CIMObjectPath;"
5931                                                           "Ljava/lang/String;ZZ[Ljava/lang/String;)"
5932                                                               "[Lorg/pegasus/jmpi/CIMInstance;");
5933 mark.hamzy      1.43 
5934                                     if (id != NULL)
5935                                     {
5936                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
5937 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5938                                             "handleReferencesRequest: "
5939                                                 "Found METHOD_CIMASSOCIATORPROVIDER2.");
5940 mark.hamzy      1.43                }
5941                                 }
5942                              }
5943                      
5944                              if (id == NULL)
5945                              {
5946 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
5947                                      "handleReferencesRequest: No method provider found!");
5948 mark.hamzy      1.43 
5949                                  PEG_METHOD_EXIT();
5950                      
5951 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
5952                                      CIM_ERR_FAILED,
5953                                      MessageLoaderParms(
5954 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
5955 marek           1.68                     "Could not find a method for the provider based on "
5956                                              "InterfaceType."));
5957 mark.hamzy      1.43         }
5958                      
5959                              JMPIjvm::checkException(env);
5960                      
5961                              switch (eMethodFound)
5962                              {
5963                              case METHOD_CIMASSOCIATORPROVIDER:
5964                              {
5965 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
5966                                                                  CIMObjectPath*,
5967                                                                  jlong,
5968                                                                  resultPath);
5969                                  jobject jAssociationName = env->NewObject(
5970                                                                 jv->CIMObjectPathClassRef,
5971                                                                 jv->CIMObjectPathNewJ,
5972                                                                 jAssociationNameRef);
5973 mark.hamzy      1.43 
5974                                  JMPIjvm::checkException(env);
5975                      
5976 marek           1.68             jlong   jPathNameRef = DEBUG_ConvertCToJava(
5977                                                             CIMObjectPath*,
5978                                                             jlong,
5979                                                             objectPath);
5980                                  jobject jPathName = env->NewObject(
5981                                                          jv->CIMObjectPathClassRef,
5982                                                          jv->CIMObjectPathNewJ,
5983                                                          jPathNameRef);
5984 mark.hamzy      1.43 
5985                                  JMPIjvm::checkException(env);
5986                      
5987                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5988                      
5989                                  JMPIjvm::checkException(env);
5990                      
5991                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
5992                      
5993                      #ifdef PEGASUS_DEBUG
5994 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5995                                      "handleReferencesRequest: assocName = %s ",
5996                                      (const char*)resultPath->toString().getCString()));
5997                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
5998                                      "handleReferencesRequest: role = %s ",
5999                                      (const char*)request->role.getCString()));
6000                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6001                                      "handleReferencesRequest: includeQualifiers = false");
6002                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6003                                      "handleReferencesRequest: includeClassOrigin = false");
6004 mark.hamzy      1.43 #endif
6005                      
6006 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6007                      
6008 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6009                                                       (jobject)pr.jProvider,
6010                                                       id,
6011                                                       jAssociationName,
6012                                                       jPathName,
6013                                                       jRole,
6014                                                       JMPI_INCLUDE_QUALIFIERS,
6015                                                       request->includeClassOrigin,
6016                                                       jPropertyList);
6017 mark.hamzy      1.43 
6018                                  JMPIjvm::checkException(env);
6019                      
6020                                  handler.processing();
6021 mark.hamzy      1.45             if (jAr) {
6022                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
6023 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6024                      
6025 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
6026 mark.hamzy      1.43 
6027                                          JMPIjvm::checkException(env);
6028                      
6029 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
6030                                                                jciRet,
6031                                                                JMPIjvm::jv.CIMInstanceCInst);
6032 mark.hamzy      1.43 
6033                                          JMPIjvm::checkException(env);
6034                      
6035 marek           1.68                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6036                                                                   jlong,
6037                                                                   CIMInstance*,
6038                                                                   jciRetRef);
6039                                          CIMClass cls;
6040 mark.hamzy      1.43 
6041                                          try
6042                                          {
6043 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6044                                                 "handleReferencesRequest: "
6045                                                     "enter(METHOD_CIMASSOCIATORPROVIDER): "
6046                                                     "cimom_handle->getClass(%s).",
6047                                                 (const char*)ciRet->
6048                                                     getClassName().getString().getCString()
6049                                                 ));
6050                      
6051 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
6052                      
6053                                             cls = pr._cimom_handle->getClass(context,
6054                                                                              request->nameSpace,
6055                                                                              ciRet->getClassName(),
6056                                                                              false,
6057                                                                              true,
6058                                                                              true,
6059                                                                              CIMPropertyList());
6060 thilo.boehm     1.69 
6061                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6062                                                 "handleReferencesRequest: "
6063                                                     "exit(METHOD_CIMASSOCIATORPROVIDER): "
6064                                                     "cimom_handle->getClass(%s).",
6065                                                 (const char*)ciRet->
6066                                                     getClassName().getString().getCString()
6067                                                 ));
6068 mark.hamzy      1.43                     }
6069                                          catch (CIMException e)
6070                                          {
6071 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6072                                                 "handleReferencesRequest: "
6073                                                 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER) "
6074                                                     "during cimom_handle->getClass(%s): %s ",
6075                                                 (const char*)ciRet->
6076                                                     getClassName().getString().getCString(),
6077                                                 (const char*)e.getMessage().getCString()
6078                                                 ));
6079                      
6080                                             PEG_METHOD_EXIT();
6081 mark.hamzy      1.43                        throw;
6082                                          }
6083                      
6084 karl            1.78                     _fixCIMObjectPath(ciRet, cls);
6085 mark.hamzy      1.43 
6086                                          JMPIjvm::checkException(env);
6087                      
6088 thilo.boehm     1.80                     CIMObject coRet(*ciRet);
6089                                          handler.deliver(coRet);
6090 mark.hamzy      1.43                 }
6091                                  }
6092                                  handler.complete();
6093                                  break;
6094                              }
6095                      
6096                              case METHOD_CIMASSOCIATORPROVIDER2:
6097                              {
6098 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
6099                                                     OperationContext*,
6100                                                     jlong,
6101                                                     &request->operationContext);
6102                                  jobject joc = env->NewObject(
6103                                                    jv->OperationContextClassRef,
6104                                                    jv->OperationContextNewJ,
6105                                                    jocRef);
6106                      
6107                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6108                                                                  CIMObjectPath*,
6109                                                                  jlong,
6110                                                                  resultPath);
6111                                  jobject jAssociationName = env->NewObject(
6112                                                                 jv->CIMObjectPathClassRef,
6113                                                                 jv->CIMObjectPathNewJ,
6114                                                                 jAssociationNameRef);
6115 mark.hamzy      1.43 
6116                                  JMPIjvm::checkException(env);
6117                      
6118 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6119                                                           CIMObjectPath*,
6120                                                           jlong,
6121                                                           objectPath);
6122                                  jobject jPathName = env->NewObject(
6123                                                          jv->CIMObjectPathClassRef,
6124                                                          jv->CIMObjectPathNewJ,
6125                                                          jPathNameRef);
6126 mark.hamzy      1.43 
6127                                  JMPIjvm::checkException(env);
6128                      
6129                                  jstring jRole = env->NewStringUTF(request->role.getCString());
6130                      
6131                                  JMPIjvm::checkException(env);
6132                      
6133                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
6134 schuur          1.1  
6135 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
6136 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6137                                      "handleReferencesRequest: assocName = %s ",
6138                                      (const char*)resultPath->toString().getCString()));
6139                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6140                                      "handleReferencesRequest: role = %s ",
6141                                      (const char*)request->role.getCString()));
6142                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6143                                      "handleReferencesRequest: includeQualifiers = false");
6144                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6145                                      "handleReferencesRequest: includeClassOrigin = false");
6146 mark.hamzy      1.43 #endif
6147 schuur          1.1  
6148 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6149                      
6150 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6151                                                       (jobject)pr.jProvider,
6152                                                       id,
6153                                                       joc,
6154                                                       jAssociationName,
6155                                                       jPathName,
6156                                                       jRole,
6157                                                       JMPI_INCLUDE_QUALIFIERS,
6158                                                       request->includeClassOrigin,
6159                                                       jPropertyList);
6160 schuur          1.1  
6161 mark.hamzy      1.43             JMPIjvm::checkException(env);
6162 mark.hamzy      1.24 
6163 mark.hamzy      1.43             if (joc)
6164                                  {
6165 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
6166 schuur          1.1  
6167 mark.hamzy      1.43                JMPIjvm::checkException(env);
6168                                  }
6169 schuur          1.1  
6170 mark.hamzy      1.43             handler.processing();
6171 mark.hamzy      1.45             if (jAr) {
6172                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
6173 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6174 schuur          1.1  
6175 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
6176 mark.hamzy      1.37 
6177 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6178 mark.hamzy      1.37 
6179 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
6180                                                                jciRet,
6181                                                                JMPIjvm::jv.CIMInstanceCInst);
6182 mark.hamzy      1.37 
6183 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6184 schuur          1.1  
6185 marek           1.68                     CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6186                                                                   jlong,
6187                                                                   CIMInstance*,
6188                                                                   jciRetRef);
6189 mark.hamzy      1.43                     CIMClass             cls;
6190 schuur          1.1  
6191 mark.hamzy      1.43                     try
6192                                          {
6193 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6194                                                 "handleReferencesRequest: "
6195                                                     "enter(METHOD_CIMASSOCIATORPROVIDER2): "
6196                                                     "cimom_handle->getClass(%s).",
6197                                                 (const char*)ciRet->
6198                                                     getClassName().getString().getCString()
6199                                                 ));
6200                      
6201 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
6202 mark.hamzy      1.24 
6203 mark.hamzy      1.43                        cls = pr._cimom_handle->getClass(context,
6204                                                                              request->nameSpace,
6205                                                                              ciRet->getClassName(),
6206                                                                              false,
6207                                                                              true,
6208                                                                              true,
6209                                                                              CIMPropertyList());
6210 thilo.boehm     1.69 
6211                                             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6212                                                 "handleReferencesRequest: "
6213                                                     "exit(METHOD_CIMASSOCIATORPROVIDER2): "
6214                                                     "cimom_handle->getClass(%s).",
6215                                                 (const char*)ciRet->
6216                                                     getClassName().getString().getCString()
6217                                                 ));
6218 mark.hamzy      1.43                     }
6219                                          catch (CIMException e)
6220                                          {
6221 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6222                                                 "handleReferencesRequest: "
6223                                                 "Caught CIMExcetion(METHOD_CIMASSOCIATORPROVIDER2) "
6224                                                     "during cimom_handle->getClass(%s): %s ",
6225                                                 (const char*)ciRet->
6226                                                     getClassName().getString().getCString(),
6227                                                 (const char*)e.getMessage().getCString()
6228                                                 ));
6229                      
6230                                             PEG_METHOD_EXIT();
6231 mark.hamzy      1.43                        throw;
6232                                          }
6233 mark.hamzy      1.24 
6234 mark.hamzy      1.43                     const CIMObjectPath& op    = ciRet->getPath();
6235                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
6236 mark.hamzy      1.24 
6237 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6238 mark.hamzy      1.24 
6239 mark.hamzy      1.43                     iop.setNameSpace(op.getNameSpace());
6240                                          ciRet->setPath(iop);
6241 mark.hamzy      1.24 
6242 thilo.boehm     1.80                     CIMObject coRet(*ciRet);
6243                                          handler.deliver(coRet);
6244 mark.hamzy      1.43                 }
6245 mark.hamzy      1.24             }
6246 mark.hamzy      1.43             handler.complete();
6247                                  break;
6248 mark.hamzy      1.24         }
6249 schuur          1.12 
6250 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
6251 mark.hamzy      1.24         {
6252 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6253                                                                  CIMObjectPath*,
6254                                                                  jlong,
6255                                                                  resultPath);
6256                                  jobject jAssociationName = env->NewObject(
6257                                                                 jv->CIMObjectPathClassRef,
6258                                                                 jv->CIMObjectPathNewJ,
6259                                                                 jAssociationNameRef);
6260 mark.hamzy      1.24 
6261 mark.hamzy      1.43             JMPIjvm::checkException(env);
6262 schuur          1.1  
6263 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6264                                                           CIMObjectPath*,
6265                                                           jlong,
6266                                                           objectPath);
6267                                  jobject jPathName = env->NewObject(
6268                                                          jv->CIMObjectPathClassRef,
6269                                                          jv->CIMObjectPathNewJ,
6270                                                          jPathNameRef);
6271 mark.hamzy      1.25 
6272                                  JMPIjvm::checkException(env);
6273                      
6274                                  jstring jRole = env->NewStringUTF(request->role.getCString());
6275                      
6276                                  JMPIjvm::checkException(env);
6277                      
6278                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
6279                      
6280 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
6281 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6282                                      "handleReferencesRequest: assocName = %s ",
6283                                      (const char*)resultPath->toString().getCString()));
6284                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6285                                      "handleReferencesRequest: pathName = %s ",
6286                                      (const char*)objectPath->toString().getCString()));
6287                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6288                                      "handleReferencesRequest: role = %s ",
6289                                      (const char*)request->role.getCString()));
6290                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6291                                      "handleReferencesRequest: includeQualifiers = false");
6292                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6293                                      "handleReferencesRequest: includeClassOrigin = false");
6294 mark.hamzy      1.29 #endif
6295 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6296                      
6297 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6298                                                        (jobject)pr.jProvider,
6299                                                        id,
6300                                                        jAssociationName,
6301                                                        jPathName,
6302                                                        jRole,
6303                                                        JMPI_INCLUDE_QUALIFIERS,
6304                                                        request->includeClassOrigin,
6305                                                        jPropertyList);
6306 mark.hamzy      1.25 
6307 mark.hamzy      1.23             JMPIjvm::checkException(env);
6308                      
6309                                  handler.processing();
6310                                  if (jVec) {
6311 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6312                                           i<m; i++)
6313                                      {
6314 mark.hamzy      1.23                     JMPIjvm::checkException(env);
6315                      
6316 marek           1.68                     jobject jciRet = env->CallObjectMethod(
6317                                                               jVec,
6318                                                               JMPIjvm::jv.VectorElementAt,
6319                                                               i);
6320 mark.hamzy      1.24 
6321 mark.hamzy      1.23                     JMPIjvm::checkException(env);
6322                      
6323 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
6324                                                                jciRet,
6325                                                                JMPIjvm::jv.CIMInstanceCInst);
6326                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6327                                                                   jlong,
6328                                                                   CIMInstance*,
6329                                                                   jciRetRef);
6330                                          CIMClass cls;
6331 mark.hamzy      1.40 
6332                                          try
6333                                          {
6334 thilo.boehm     1.69                       PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6335                                                "handleReferencesRequest: "
6336                                                    "enter(METHOD_ASSOCIATORPROVIDER): "
6337                                                    "cimom_handle->getClass(%s).",
6338                                                 (const char*)ciRet->
6339                                                     getClassName().getString().getCString()
6340                                                ));
6341                      
6342 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
6343                      
6344                                             cls = pr._cimom_handle->getClass(context,
6345                                                                              request->nameSpace,
6346                                                                              ciRet->getClassName(),
6347                                                                              false,
6348                                                                              true,
6349                                                                              true,
6350                                                                              CIMPropertyList());
6351 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6352                                                 "handleReferencesRequest: "
6353                                                     "exit(METHOD_ASSOCIATORPROVIDER): "
6354                                                     "cimom_handle->getClass(%s).",
6355                                                 (const char*)ciRet->
6356                                                     getClassName().getString().getCString()
6357                                                 ));
6358 mark.hamzy      1.40                     }
6359                                          catch (CIMException e)
6360                                          {
6361 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6362                                                 "handleReferencesRequest: "
6363                                                 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER) "
6364                                                     "during cimom_handle->getClass(%s): %s ",
6365                                                 (const char*)ciRet->
6366                                                     getClassName().getString().getCString(),
6367                                                 (const char*)e.getMessage().getCString()
6368                                                 ));
6369                      
6370                                             PEG_METHOD_EXIT();
6371 mark.hamzy      1.40                        throw;
6372                                          }
6373                      
6374 mark.hamzy      1.43                     const CIMObjectPath& op        = ciRet->getPath();
6375                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
6376 mark.hamzy      1.24 
6377 mark.hamzy      1.27                     JMPIjvm::checkException(env);
6378                      
6379 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
6380 mark.hamzy      1.29                     ciRet->setPath(iop);
6381 schuur          1.13 
6382 thilo.boehm     1.80                     CIMObject coRet(*ciRet);
6383                                          handler.deliver(coRet);
6384 mark.hamzy      1.23                 }
6385                                  }
6386                                  handler.complete();
6387 mark.hamzy      1.24             break;
6388 mark.hamzy      1.23         }
6389 schuur          1.1  
6390 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
6391 mark.hamzy      1.24         {
6392 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
6393                                                     OperationContext*,
6394                                                     jlong,
6395                                                     &request->operationContext);
6396                                  jobject joc = env->NewObject(
6397                                                    jv->OperationContextClassRef,
6398                                                    jv->OperationContextNewJ,
6399                                                    jocRef);
6400                      
6401                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6402                                                                  CIMObjectPath*,
6403                                                                  jlong,
6404                                                                  resultPath);
6405                                  jobject jAssociationName = env->NewObject(
6406                                                                 jv->CIMObjectPathClassRef,
6407                                                                 jv->CIMObjectPathNewJ,
6408                                                                 jAssociationNameRef);
6409 mark.hamzy      1.25 
6410                                  JMPIjvm::checkException(env);
6411                      
6412 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6413                                                           CIMObjectPath*,
6414                                                           jlong,
6415                                                           objectPath);
6416                                  jobject jPathName = env->NewObject(
6417                                                          jv->CIMObjectPathClassRef,
6418                                                          jv->CIMObjectPathNewJ,
6419                                                          jPathNameRef);
6420 mark.hamzy      1.24 
6421                                  JMPIjvm::checkException(env);
6422                      
6423 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
6424                      
6425                                  JMPIjvm::checkException(env);
6426                      
6427                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
6428                      
6429 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
6430 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6431                                      "handleReferencesRequest: assocName = %s ",
6432                                      (const char*)resultPath->toString().getCString()));
6433                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6434                                      "handleReferencesRequest: pathName = %s ",
6435                                      (const char*)objectPath->toString().getCString()));
6436                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6437                                      "handleReferencesRequest: role = %s ",
6438                                      (const char*)request->role.getCString()));
6439                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6440                                      "handleReferencesRequest: includeQualifiers = false");
6441                                  PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6442                                      "handleReferencesRequest: includeClassOrigin = false");
6443 mark.hamzy      1.29 #endif
6444                      
6445 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6446                      
6447 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6448                                                        (jobject)pr.jProvider,
6449                                                        id,
6450                                                        joc,
6451                                                        jAssociationName,
6452                                                        jPathName,
6453                                                        jRole,
6454                                                        JMPI_INCLUDE_QUALIFIERS,
6455                                                        request->includeClassOrigin,
6456                                                        jPropertyList);
6457 mark.hamzy      1.25 
6458 mark.hamzy      1.24             JMPIjvm::checkException(env);
6459                      
6460 mark.hamzy      1.43             if (joc)
6461                                  {
6462 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
6463 mark.hamzy      1.43 
6464                                     JMPIjvm::checkException(env);
6465                                  }
6466                      
6467 mark.hamzy      1.24             handler.processing();
6468                                  if (jVec) {
6469 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6470                                           i<m; i++)
6471                                      {
6472 mark.hamzy      1.24                     JMPIjvm::checkException(env);
6473                      
6474 marek           1.68                     jobject jciRet = env->CallObjectMethod(
6475                                                               jVec,
6476                                                               JMPIjvm::jv.VectorElementAt,
6477                                                               i);
6478 mark.hamzy      1.24 
6479                                          JMPIjvm::checkException(env);
6480                      
6481 marek           1.68                     jlong jciRetRef = env->CallLongMethod(
6482                                                                jciRet,
6483                                                                JMPIjvm::jv.CIMInstanceCInst);
6484                                          CIMInstance *ciRet = DEBUG_ConvertJavaToC(
6485                                                                   jlong,
6486                                                                   CIMInstance*,
6487                                                                   jciRetRef);
6488                                          CIMClass cls;
6489 mark.hamzy      1.40 
6490                                          try
6491                                          {
6492 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6493                                                 "handleReferencesRequest: "
6494                                                     "enter(METHOD_ASSOCIATORPROVIDER2): "
6495                                                     "cimom_handle->getClass(%s).",
6496                                                 (const char*)ciRet->
6497                                                     getClassName().getString().getCString()
6498                                                 ));
6499                      
6500 mark.hamzy      1.40                        AutoMutex lock (pr._cimomMutex);
6501                      
6502                                             cls = pr._cimom_handle->getClass(context,
6503                                                                              request->nameSpace,
6504                                                                              ciRet->getClassName(),
6505                                                                              false,
6506                                                                              true,
6507                                                                              true,
6508                                                                              CIMPropertyList());
6509 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6510                                                 "handleReferencesRequest: "
6511                                                     "exit(METHOD_ASSOCIATORPROVIDER2): "
6512                                                     "cimom_handle->getClass(%s).",
6513                                                 (const char*)ciRet->
6514                                                     getClassName().getString().getCString()
6515                                                 ));
6516                      
6517 mark.hamzy      1.40                     }
6518                                          catch (CIMException e)
6519                                          {
6520 thilo.boehm     1.69                        PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6521                                                 "handleReferencesRequest: "
6522                                                 "Caught CIMExcetion(METHOD_ASSOCIATORPROVIDER2) "
6523                                                     "during cimom_handle->getClass(%s): %s ",
6524                                                 (const char*)ciRet->
6525                                                     getClassName().getString().getCString(),
6526                                                 (const char*)e.getMessage().getCString()
6527                                                 ));
6528                      
6529                                             PEG_METHOD_EXIT();
6530 mark.hamzy      1.40                        throw;
6531                                          }
6532                      
6533 mark.hamzy      1.29                     const CIMObjectPath& op        = ciRet->getPath();
6534                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
6535 schuur          1.1  
6536 mark.hamzy      1.27                     JMPIjvm::checkException(env);
6537                      
6538 mark.hamzy      1.24                     iop.setNameSpace(op.getNameSpace());
6539 mark.hamzy      1.29                     ciRet->setPath(iop);
6540 schuur          1.12 
6541 thilo.boehm     1.80                     CIMObject coRet(*ciRet);
6542                                          handler.deliver(coRet);
6543 mark.hamzy      1.24                 }
6544                                  }
6545                                  handler.complete();
6546                                  break;
6547                              }
6548 mark.hamzy      1.23 
6549 mark.hamzy      1.24         case METHOD_UNKNOWN:
6550                              {
6551 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6552                                      "handleReferencesRequest: Unknown method provider!");
6553 mark.hamzy      1.24             break;
6554                              }
6555 mark.hamzy      1.23         }
6556 schuur          1.1      }
6557                          HandlerCatch(handler);
6558 schuur          1.12 
6559                          if (env) JMPIjvm::detachThread();
6560                      
6561 schuur          1.1      PEG_METHOD_EXIT();
6562                      
6563                          return(response);
6564                      }
6565                      
6566 marek           1.68 Message * JMPIProviderManager::handleReferenceNamesRequest(
6567                          const Message * message) throw()
6568 schuur          1.1  {
6569 marek           1.68     PEG_METHOD_ENTER(
6570                              TRC_PROVIDERMANAGER,
6571                              "JMPIProviderManager::handleReferenceNamesRequest");
6572 mark.hamzy      1.23 
6573 kumpf           1.55     HandlerIntro(ReferenceNames,message,request,response,handler);
6574 schuur          1.1  
6575 mark.hamzy      1.24     typedef enum {
6576                             METHOD_UNKNOWN = 0,
6577 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
6578                             METHOD_CIMASSOCIATORPROVIDER2,
6579                             METHOD_ASSOCIATORPROVIDER,
6580                             METHOD_ASSOCIATORPROVIDER2,
6581 mark.hamzy      1.24     } METHOD_VERSION;
6582                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
6583                          JNIEnv          *env           = NULL;
6584 schuur          1.13 
6585 marek           1.68     try
6586                          {
6587 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
6588                                   "handleReferenceNamesRequest: "
6589 kumpf           1.77                  "name space = %s class name = %s",
6590 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
6591                                   (const char*)request->
6592                                       objectName.getClassName().getString().getCString()
6593                                   ));
6594 mark.hamzy      1.23 
6595 schuur          1.1          // make target object path
6596 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
6597                                                              System::getHostName(),
6598                                                              request->nameSpace,
6599                                                              request->objectName.getClassName(),
6600                                                              request->objectName.getKeyBindings());
6601                              CIMObjectPath *resultPath = new CIMObjectPath(
6602                                                              System::getHostName(),
6603                                                              request->nameSpace,
6604                                                              request->resultClass.getString());
6605 schuur          1.1  
6606                              // resolve provider name
6607 kumpf           1.2          ProviderName name = _resolveProviderName(
6608                                  request->operationContext.get(ProviderIdContainer::NAME));
6609 schuur          1.1  
6610                              // get cached or load new provider module
6611 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
6612                                                                      name.getPhysicalName(),
6613                                                                      name.getLogicalName(),
6614                                                                      String::EMPTY);
6615 schuur          1.1  
6616 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
6617 schuur          1.1  
6618 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
6619                                  "handleReferenceNamesRequest: "
6620 kumpf           1.77                 "Calling provider: %s, role: %s, refCls: %s",
6621 thilo.boehm     1.69             (const char*)pr.getName().getCString(),
6622                                  (const char*)request->role.getCString(),
6623                                  (const char*)request->resultClass.getString().getCString()
6624                                  ));
6625 schuur          1.12 
6626 mark.hamzy      1.24         JvmVector *jv = 0;
6627                      
6628                              env = JMPIjvm::attachThread(&jv);
6629 schuur          1.1  
6630 mark.hamzy      1.37         if (!env)
6631                              {
6632 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6633                                      "handleReferenceNamesRequest: "
6634                                          "Could not initialize the JVM (Java Virtual Machine) "
6635                                          "runtime environment.");
6636                      
6637 mark.hamzy      1.37             PEG_METHOD_EXIT();
6638                      
6639 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
6640                                      CIM_ERR_FAILED,
6641                                      MessageLoaderParms(
6642 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
6643 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
6644                                              "runtime environment."));
6645 mark.hamzy      1.37         }
6646                      
6647 mark.hamzy      1.43         JMPIProvider::pm_service_op_lock op_lock(&pr);
6648                      
6649                              jmethodID id               = NULL;
6650                              String    interfaceType;
6651                              String    interfaceVersion;
6652                      
6653 marek           1.68         getInterfaceType(
6654                                  request->operationContext.get(ProviderIdContainer::NAME),
6655                                  interfaceType,
6656                                  interfaceVersion);
6657 mark.hamzy      1.43 
6658                              if (interfaceType == "JMPI")
6659                              {
6660 marek           1.68            id = env->GetMethodID(
6661                                         (jclass)pr.jProviderClass,
6662                                         "referenceNames",
6663                                         "(Lorg/pegasus/jmpi/CIMObjectPath;"
6664                                             "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)"
6665                                                 "Ljava/util/Vector;");
6666 mark.hamzy      1.43 
6667                                 if (id != NULL)
6668                                 {
6669                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
6670 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6671                                         "handleReferencesRequest: "
6672                                             "Found METHOD_ASSOCIATORPROVIDER.");
6673 mark.hamzy      1.43            }
6674                      
6675                                 if (id == NULL)
6676                                 {
6677                                     env->ExceptionClear();
6678                      
6679 marek           1.68                id = env->GetMethodID(
6680                                              (jclass)pr.jProviderClass,
6681                                              "referenceNames",
6682                                              "(Lorg/pegasus/jmpi/CIMObjectPath;"
6683                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
6684                                                      ")[Lorg/pegasus/jmpi/CIMObjectPath;");
6685 mark.hamzy      1.43 
6686                                     if (id != NULL)
6687                                     {
6688                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
6689 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6690                                             "handleReferenceNamesRequest: "
6691                                                 "Found METHOD_CIMASSOCIATORPROVIDER.");
6692 mark.hamzy      1.43                }
6693                                 }
6694                              }
6695                              else if (interfaceType == "JMPIExperimental")
6696                              {
6697 marek           1.68            id = env->GetMethodID(
6698                                          (jclass)pr.jProviderClass,
6699                                          "referenceNames",
6700                                          "(Lorg/pegasus/jmpi/OperationContext;"
6701                                              "Lorg/pegasus/jmpi/CIMObjectPath;"
6702                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
6703                                                      ")Ljava/util/Vector;");
6704 mark.hamzy      1.43 
6705                                 if (id != NULL)
6706                                 {
6707                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
6708 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6709                                         "handleReferenceNamesRequest: "
6710                                             "Found METHOD_ASSOCIATORPROVIDER2.");
6711 mark.hamzy      1.43            }
6712                      
6713                                 if (id == NULL)
6714                                 {
6715                                     env->ExceptionClear();
6716 marek           1.68                id = env->GetMethodID(
6717                                              (jclass)pr.jProviderClass,
6718                                              "referenceNames",
6719                                              "(Lorg/pegasus/jmpi/OperationContext;"
6720                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
6721                                                      "Lorg/pegasus/jmpi/CIMObjectPath;"
6722 kumpf           1.77                                     "Ljava/lang/String;)"
6723 marek           1.68                                         "[Lorg/pegasus/jmpi/CIMObjectPath;");
6724 mark.hamzy      1.43 
6725                                     if (id != NULL)
6726                                     {
6727                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
6728 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6729                                             "handleReferenceNamesRequest: "
6730                                                 "Found METHOD_CIMASSOCIATORPROVIDER2.");
6731 mark.hamzy      1.43                }
6732                                 }
6733                              }
6734                      
6735                              if (id == NULL)
6736                              {
6737 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
6738                                      "handleReferenceNames: No method found!");
6739 mark.hamzy      1.43 
6740                                  PEG_METHOD_EXIT();
6741                      
6742 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
6743                                      CIM_ERR_FAILED,
6744                                      MessageLoaderParms(
6745 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
6746 marek           1.68                     "Could not find a method for the provider based on "
6747                                              "InterfaceType."));
6748 mark.hamzy      1.43         }
6749                      
6750                              JMPIjvm::checkException(env);
6751                      
6752                              switch (eMethodFound)
6753                              {
6754                              case METHOD_CIMASSOCIATORPROVIDER:
6755                              {
6756 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6757                                                                  CIMObjectPath*,
6758                                                                  jlong,
6759                                                                  resultPath);
6760                                  jobject jAssociationName = env->NewObject(
6761                                                                 jv->CIMObjectPathClassRef,
6762                                                                 jv->CIMObjectPathNewJ,
6763                                                                 jAssociationNameRef);
6764 mark.hamzy      1.43 
6765                                  JMPIjvm::checkException(env);
6766                      
6767 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6768                                                           CIMObjectPath*,
6769                                                           jlong,
6770                                                           objectPath);
6771                                  jobject jPathName = env->NewObject(
6772                                                          jv->CIMObjectPathClassRef,
6773                                                          jv->CIMObjectPathNewJ,
6774                                                          jPathNameRef);
6775 mark.hamzy      1.43 
6776                                  JMPIjvm::checkException(env);
6777                      
6778                                  jstring jRole = env->NewStringUTF(request->role.getCString());
6779                      
6780                                  JMPIjvm::checkException(env);
6781                      
6782                      #ifdef PEGASUS_DEBUG
6783 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6784                                      "handleReferenceNamesRequest: assocName = %s ",
6785                                      (const char*)objectPath->toString().getCString()));
6786                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6787                                      "handleReferenceNamesRequest: role = %s ",
6788                                      (const char*)request->role.getCString()));
6789 mark.hamzy      1.43 #endif
6790                      
6791 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6792                      
6793 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6794                                                       (jobject)pr.jProvider,
6795                                                       id,
6796                                                       jPathName,
6797                                                       jAssociationName,
6798                                                       jRole);
6799 mark.hamzy      1.43 
6800                                  JMPIjvm::checkException(env);
6801                      
6802                                  handler.processing();
6803 mark.hamzy      1.45             if (jAr) {
6804                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
6805 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6806                      
6807 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
6808 mark.hamzy      1.43 
6809                                          JMPIjvm::checkException(env);
6810                      
6811 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
6812                                                                 jcopRet,
6813                                                                 JMPIjvm::jv.CIMObjectPathCInst);
6814 mark.hamzy      1.43 
6815                                          JMPIjvm::checkException(env);
6816                      
6817 marek           1.68                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6818                                                                      jlong,
6819                                                                      CIMObjectPath*,
6820                                                                      jcopRetRef);
6821 mark.hamzy      1.43 
6822                                          handler.deliver(*copRet);
6823                                      }
6824                                  }
6825                                  handler.complete();
6826                                  break;
6827                              }
6828                      
6829                              case METHOD_CIMASSOCIATORPROVIDER2:
6830                              {
6831 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
6832                                                     OperationContext*,
6833                                                     jlong,
6834                                                     &request->operationContext);
6835                                  jobject joc = env->NewObject(
6836                                                    jv->OperationContextClassRef,
6837                                                    jv->OperationContextNewJ,
6838                                                    jocRef);
6839                      
6840                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6841                                                                  CIMObjectPath*,
6842                                                                  jlong,
6843                                                                  resultPath);
6844                                  jobject jAssociationName = env->NewObject(
6845                                                                 jv->CIMObjectPathClassRef,
6846                                                                 jv->CIMObjectPathNewJ,
6847                                                                 jAssociationNameRef);
6848 mark.hamzy      1.43 
6849                                  JMPIjvm::checkException(env);
6850                      
6851 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6852                                                           CIMObjectPath*,
6853                                                           jlong,
6854                                                           objectPath);
6855                                  jobject jPathName = env->NewObject(
6856                                                          jv->CIMObjectPathClassRef,
6857                                                          jv->CIMObjectPathNewJ,
6858                                                          jPathNameRef);
6859 mark.hamzy      1.43 
6860                                  JMPIjvm::checkException(env);
6861                      
6862                                  jstring jRole = env->NewStringUTF(request->role.getCString());
6863                      
6864                                  JMPIjvm::checkException(env);
6865                      
6866                      #ifdef PEGASUS_DEBUG
6867 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6868                                      "handleReferenceNamesRequest: assocName = %s ",
6869                                      (const char*)objectPath->toString().getCString()));
6870                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6871                                      "handleReferenceNamesRequest: role = %s ",
6872                                      (const char*)request->role.getCString()));
6873 mark.hamzy      1.43 #endif
6874                      
6875 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6876                      
6877 marek           1.68             jobjectArray jAr=(jobjectArray)env->CallObjectMethod(
6878                                                       (jobject)pr.jProvider,
6879                                                       id,
6880                                                       joc,
6881                                                       jPathName,
6882                                                       jAssociationName,
6883                                                       jRole);
6884 mark.hamzy      1.43 
6885                                  JMPIjvm::checkException(env);
6886                      
6887                                  if (joc)
6888                                  {
6889 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
6890 mark.hamzy      1.43 
6891                                     JMPIjvm::checkException(env);
6892                                  }
6893                      
6894                                  handler.processing();
6895 mark.hamzy      1.45             if (jAr) {
6896                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
6897 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6898 schuur          1.1  
6899 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
6900 schuur          1.1  
6901 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6902 mark.hamzy      1.24 
6903 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
6904                                                                 jcopRet,
6905                                                                 JMPIjvm::jv.CIMObjectPathCInst);
6906 mark.hamzy      1.24 
6907 mark.hamzy      1.43                     JMPIjvm::checkException(env);
6908 mark.hamzy      1.24 
6909 marek           1.68                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6910                                                                      jlong,
6911                                                                      CIMObjectPath*,
6912                                                                      jcopRetRef);
6913 mark.hamzy      1.24 
6914 mark.hamzy      1.43                     handler.deliver(*copRet);
6915                                      }
6916 mark.hamzy      1.24             }
6917 mark.hamzy      1.43             handler.complete();
6918                                  break;
6919 mark.hamzy      1.24         }
6920 schuur          1.11 
6921 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
6922 mark.hamzy      1.24         {
6923 marek           1.68             jlong jAssociationNameRef = DEBUG_ConvertCToJava(
6924                                                                  CIMObjectPath*,
6925                                                                  jlong,
6926                                                                  resultPath);
6927                                  jobject jAssociationName = env->NewObject(
6928                                                                 jv->CIMObjectPathClassRef,
6929                                                                 jv->CIMObjectPathNewJ,
6930                                                                 jAssociationNameRef);
6931 mark.hamzy      1.24 
6932 mark.hamzy      1.43             JMPIjvm::checkException(env);
6933 schuur          1.1  
6934 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
6935                                                           CIMObjectPath*,
6936                                                           jlong,
6937                                                           objectPath);
6938                                  jobject jPathName = env->NewObject(
6939                                                          jv->CIMObjectPathClassRef,
6940                                                          jv->CIMObjectPathNewJ,
6941                                                          jPathNameRef);
6942 mark.hamzy      1.25 
6943                                  JMPIjvm::checkException(env);
6944                      
6945                                  jstring jRole = env->NewStringUTF(request->role.getCString());
6946                      
6947                                  JMPIjvm::checkException(env);
6948                      
6949 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
6950 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6951                                      "handleReferenceNamesRequest: assocName = %s ",
6952                                      (const char*)objectPath->toString().getCString()));
6953                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6954                                      "handleReferenceNamesRequest: pathName = %s ",
6955                                      (const char*)resultPath->toString().getCString()));
6956                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
6957                                      "handleReferenceNamesRequest: role = %s ",
6958                                      (const char*)request->role.getCString()));
6959 mark.hamzy      1.29 #endif
6960                      
6961 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
6962                      
6963 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
6964                                                        (jobject)pr.jProvider,
6965                                                        id,
6966                                                        jAssociationName,
6967                                                        jPathName,
6968                                                        jRole);
6969 mark.hamzy      1.25 
6970 mark.hamzy      1.23             JMPIjvm::checkException(env);
6971                      
6972                                  handler.processing();
6973                                  if (jVec) {
6974 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
6975                                           i<m; i++)
6976                                      {
6977 mark.hamzy      1.23                     JMPIjvm::checkException(env);
6978                      
6979 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
6980                                                                jVec,
6981                                                                JMPIjvm::jv.VectorElementAt,
6982                                                                i);
6983 mark.hamzy      1.24 
6984 mark.hamzy      1.23                     JMPIjvm::checkException(env);
6985                      
6986 marek           1.68                     jlong jcopRetRef = env->CallLongMethod(
6987                                                                 jcopRet,
6988                                                                 JMPIjvm::jv.CIMObjectPathCInst);
6989 mark.hamzy      1.23 
6990                                          JMPIjvm::checkException(env);
6991                      
6992 marek           1.68                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
6993                                                                      jlong,
6994                                                                      CIMObjectPath*,
6995                                                                      jcopRetRef);
6996 mark.hamzy      1.24 
6997 mark.hamzy      1.29                     handler.deliver(*copRet);
6998 mark.hamzy      1.23                 }
6999                                  }
7000                                  handler.complete();
7001 mark.hamzy      1.24             break;
7002 mark.hamzy      1.23         }
7003 mark.hamzy      1.24 
7004 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
7005 mark.hamzy      1.24         {
7006 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
7007                                                     OperationContext*,
7008                                                     jlong,
7009                                                     &request->operationContext);
7010                                  jobject joc = env->NewObject(
7011                                                    jv->OperationContextClassRef,
7012                                                    jv->OperationContextNewJ,
7013                                                    jocRef);
7014                      
7015                                  jlong jAssociationNameRef = DEBUG_ConvertCToJava(
7016                                                                  CIMObjectPath*,
7017                                                                  jlong,
7018                                                                  resultPath);
7019                                  jobject jAssociationName = env->NewObject(
7020                                                                 jv->CIMObjectPathClassRef,
7021                                                                 jv->CIMObjectPathNewJ,
7022                                                                 jAssociationNameRef);
7023 mark.hamzy      1.25 
7024                                  JMPIjvm::checkException(env);
7025                      
7026 marek           1.68             jlong jPathNameRef = DEBUG_ConvertCToJava(
7027                                                           CIMObjectPath*,
7028                                                           jlong,
7029                                                           objectPath);
7030                                  jobject jPathName = env->NewObject(
7031                                                          jv->CIMObjectPathClassRef,
7032                                                          jv->CIMObjectPathNewJ,
7033                                                          jPathNameRef);
7034 mark.hamzy      1.24 
7035                                  JMPIjvm::checkException(env);
7036                      
7037 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
7038                      
7039                                  JMPIjvm::checkException(env);
7040                      
7041 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
7042 thilo.boehm     1.69             PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7043                                      "handleReferenceNamesRequest: assocName = %s ",
7044                                      (const char*)objectPath->toString().getCString()));
7045                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7046                                      "handleReferenceNamesRequest: pathName = %s ",
7047                                      (const char*)resultPath->toString().getCString()));
7048                                  PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7049                                      "handleReferenceNamesRequest: role = %s ",
7050                                      (const char*)request->role.getCString()));
7051 mark.hamzy      1.29 #endif
7052                      
7053 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7054                      
7055 marek           1.68             jobjectArray jVec=(jobjectArray)env->CallObjectMethod(
7056                                                        (jobject)pr.jProvider,
7057                                                        id,
7058                                                        joc,
7059                                                        jAssociationName,
7060                                                        jPathName,
7061                                                        jRole);
7062 mark.hamzy      1.25 
7063 mark.hamzy      1.23             JMPIjvm::checkException(env);
7064                      
7065 mark.hamzy      1.43             if (joc)
7066                                  {
7067 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
7068 mark.hamzy      1.43 
7069                                     JMPIjvm::checkException(env);
7070                                  }
7071                      
7072 mark.hamzy      1.23             handler.processing();
7073 mark.hamzy      1.24             if (jVec) {
7074 marek           1.68                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize);
7075                                           i<m; i++)
7076                                      {
7077 mark.hamzy      1.23                     JMPIjvm::checkException(env);
7078 marek           1.68                     jobject jcopRet = env->CallObjectMethod(
7079                                                                jVec,
7080                                                                JMPIjvm::jv.VectorElementAt,
7081                                                                i);
7082                                          JMPIjvm::checkException(env);
7083                                          jlong jcopRetRef = env->CallLongMethod(
7084                                                                 jcopRet,
7085                                                                 JMPIjvm::jv.CIMObjectPathCInst);
7086                                          JMPIjvm::checkException(env);
7087                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC(
7088                                                                      jlong,
7089                                                                      CIMObjectPath*,
7090                                                                      jcopRetRef);
7091 mark.hamzy      1.29                     handler.deliver(*copRet);
7092 mark.hamzy      1.23                 }
7093                                  }
7094                                  handler.complete();
7095 mark.hamzy      1.24             break;
7096                              }
7097                      
7098                              case METHOD_UNKNOWN:
7099                              {
7100 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7101                                      "handleReferenceNamesRequest: Unknown method provider!");
7102 mark.hamzy      1.24             break;
7103                              }
7104 mark.hamzy      1.23         }
7105 schuur          1.1      }
7106                          HandlerCatch(handler);
7107 schuur          1.11 
7108                          if (env) JMPIjvm::detachThread();
7109                      
7110 schuur          1.1      PEG_METHOD_EXIT();
7111                      
7112                          return(response);
7113                      }
7114                      
7115 marek           1.68 Message * JMPIProviderManager::handleGetPropertyRequest(
7116                          const Message * message) throw()
7117 mark.hamzy      1.26 {
7118 marek           1.68     PEG_METHOD_ENTER(
7119                              TRC_PROVIDERMANAGER,
7120                              "JMPIProviderManager::handleGetPropertyRequest");
7121 mark.hamzy      1.26 
7122 kumpf           1.55     HandlerIntro(GetProperty,message,request,response,handler);
7123 mark.hamzy      1.26 
7124                          typedef enum {
7125                             METHOD_UNKNOWN = 0,
7126 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
7127                             METHOD_PROPERTYPROVIDER2,
7128 mark.hamzy      1.26     } METHOD_VERSION;
7129                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
7130                          JNIEnv          *env           = NULL;
7131                      
7132                          try {
7133 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7134                                   "handleGetPropertyRequest: "
7135 kumpf           1.77                  "name space = %s class name = %s",
7136 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
7137                                   (const char*)request->
7138                                       instanceName.getClassName().getString().getCString()
7139                                   ));
7140 mark.hamzy      1.26 
7141                              // make target object path
7142 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
7143                                                              System::getHostName(),
7144                                                              request->nameSpace,
7145                                                              request->instanceName.getClassName(),
7146                                                              request->instanceName.getKeyBindings());
7147 mark.hamzy      1.26 
7148                              // resolve provider name
7149                              ProviderName name = _resolveProviderName(
7150                                  request->operationContext.get(ProviderIdContainer::NAME));
7151                      
7152                              // get cached or load new provider module
7153 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7154                                                                      name.getPhysicalName(),
7155                                                                      name.getLogicalName(),
7156                                                                      String::EMPTY);
7157 mark.hamzy      1.26 
7158                              // forward request
7159                              JMPIProvider &pr = ph.GetProvider();
7160                      
7161 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7162                                  "handleReferenceNamesRequest: "
7163 kumpf           1.77                 "Calling provider: %s",
7164 thilo.boehm     1.69             (const char*)pr.getName().getCString()
7165                                  ));
7166 mark.hamzy      1.26 
7167                              JvmVector *jv = 0;
7168                      
7169                              env = JMPIjvm::attachThread(&jv);
7170                      
7171 mark.hamzy      1.37         if (!env)
7172                              {
7173 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7174                                      "handleReferenceNamesRequest: "
7175                                          "Could not initialize the JVM (Java Virtual Machine) "
7176                                          "runtime environment.");
7177                      
7178 mark.hamzy      1.37             PEG_METHOD_EXIT();
7179                      
7180 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
7181                                      CIM_ERR_FAILED,
7182                                      MessageLoaderParms(
7183 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
7184 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
7185                                              "runtime environment."));
7186 mark.hamzy      1.37         }
7187                      
7188 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
7189                      
7190 mark.hamzy      1.43         jmethodID id               = NULL;
7191                              String    interfaceType;
7192                              String    interfaceVersion;
7193                      
7194 marek           1.68         getInterfaceType(
7195                                  request->operationContext.get(ProviderIdContainer::NAME),
7196                                  interfaceType,
7197                                  interfaceVersion);
7198 mark.hamzy      1.43 
7199                              if (interfaceType == "JMPI")
7200                              {
7201 marek           1.68            id = env->GetMethodID(
7202                                          (jclass)pr.jProviderClass,
7203                                          "getPropertyValue",
7204                                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7205                                              "Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
7206 mark.hamzy      1.26 
7207 mark.hamzy      1.43            if (id != NULL)
7208                                 {
7209                                     eMethodFound = METHOD_PROPERTYPROVIDER;
7210 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7211                                         "handleGetPropertyRequest: "
7212                                             "Found METHOD_PROPERTYPROVIDER.");
7213 mark.hamzy      1.43            }
7214                              }
7215                              else if (interfaceType == "JMPIExperimental")
7216                              {
7217 marek           1.68            id = env->GetMethodID(
7218                                          (jclass)pr.jProviderClass,
7219                                          "getPropertyValue",
7220                                          "(Lorg/pegasus/jmpi/OperationContext;"
7221                                              "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7222                                                  "Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
7223 mark.hamzy      1.26 
7224 mark.hamzy      1.43            if (id != NULL)
7225                                 {
7226                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
7227 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7228                                         "handleGetPropertyRequest: "
7229                                             "Found METHOD_PROPERTYPROVIDER2.");
7230 mark.hamzy      1.43            }
7231 mark.hamzy      1.26         }
7232                      
7233                              if (id == NULL)
7234                              {
7235 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7236                                      "handleGetPropertyRequest: No method provider found!");
7237 mark.hamzy      1.43 
7238                                  PEG_METHOD_EXIT();
7239                      
7240 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
7241                                      CIM_ERR_FAILED,
7242                                      MessageLoaderParms(
7243 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
7244 marek           1.68                     "Could not find a method for the provider based on "
7245                                              "InterfaceType."));
7246 mark.hamzy      1.26         }
7247                      
7248                              JMPIjvm::checkException(env);
7249                      
7250                              switch (eMethodFound)
7251                              {
7252 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
7253 mark.hamzy      1.26         {
7254 marek           1.68             jlong jcopref = DEBUG_ConvertCToJava(
7255                                                      CIMObjectPath*,
7256                                                      jlong,
7257                                                      objectPath);
7258                                  jobject jcop = env->NewObject(
7259                                                     jv->CIMObjectPathClassRef,
7260                                                     jv->CIMObjectPathNewJ,
7261                                                     jcopref);
7262 mark.hamzy      1.26 
7263                                  JMPIjvm::checkException(env);
7264                      
7265 kumpf           1.77             jstring joclass =
7266 marek           1.68               env->NewStringUTF(
7267                                       request->instanceName.getClassName().getString().getCString());
7268 mark.hamzy      1.26 
7269                                  JMPIjvm::checkException(env);
7270                      
7271 marek           1.68             jstring jpName =
7272                                      env->NewStringUTF(
7273                                          request->propertyName.getString().getCString());
7274 mark.hamzy      1.26 
7275                                  JMPIjvm::checkException(env);
7276                      
7277 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7278 mark.hamzy      1.26 
7279 mark.hamzy      1.29             jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
7280                                                                           id,
7281                                                                           jcop,
7282                                                                           joclass,
7283                                                                           jpName);
7284 mark.hamzy      1.26 
7285                                  JMPIjvm::checkException(env);
7286                      
7287                                  handler.processing();
7288                      
7289 mark.hamzy      1.29             if (jvalRet)
7290 mark.hamzy      1.26             {
7291 marek           1.68                jlong jvalRetRef = env->CallLongMethod(
7292                                                            jvalRet,
7293                                                            JMPIjvm::jv.CIMValueCInst);
7294                                     CIMValue *valRet = DEBUG_ConvertJavaToC(
7295                                                            jlong,
7296                                                            CIMValue*,
7297                                                            jvalRetRef);
7298 mark.hamzy      1.26 
7299                                     JMPIjvm::checkException(env);
7300                      
7301 mark.hamzy      1.29                handler.deliver(*valRet);
7302 mark.hamzy      1.26             }
7303                                  handler.complete();
7304                                  break;
7305                              }
7306                      
7307 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER2:
7308                              {
7309 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
7310                                                     OperationContext*,
7311                                                     jlong,
7312                                                     &request->operationContext);
7313                                  jobject joc = env->NewObject(
7314                                                    jv->OperationContextClassRef,
7315                                                    jv->OperationContextNewJ,
7316                                                    jocRef);
7317 mark.hamzy      1.43 
7318 marek           1.68             jlong jcopref = DEBUG_ConvertCToJava(
7319                                                      CIMObjectPath*,
7320                                                      jlong,
7321                                                      objectPath);
7322                                  jobject jcop = env->NewObject(
7323                                                     jv->CIMObjectPathClassRef,
7324                                                     jv->CIMObjectPathNewJ,
7325                                                     jcopref);
7326 mark.hamzy      1.43 
7327                                  JMPIjvm::checkException(env);
7328                      
7329 marek           1.68             jstring joclass = env->NewStringUTF(
7330                                      request->instanceName.getClassName().getString().getCString());
7331 mark.hamzy      1.43 
7332                                  JMPIjvm::checkException(env);
7333                      
7334 marek           1.68             jstring jpName = env->NewStringUTF(
7335                                      request->propertyName.getString().getCString());
7336 mark.hamzy      1.43 
7337                                  JMPIjvm::checkException(env);
7338                      
7339 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7340 mark.hamzy      1.43 
7341                                  jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
7342                                                                           id,
7343                                                                           joc,
7344                                                                           jcop,
7345                                                                           joclass,
7346                                                                           jpName);
7347                      
7348                                  JMPIjvm::checkException(env);
7349                      
7350                                  if (joc)
7351                                  {
7352 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
7353 mark.hamzy      1.43 
7354                                     JMPIjvm::checkException(env);
7355                                  }
7356                      
7357                                  handler.processing();
7358                      
7359                                  if (jvalRet)
7360                                  {
7361 marek           1.68                jlong jvalRetRef = env->CallLongMethod(
7362                                                            jvalRet,
7363                                                            JMPIjvm::jv.CIMValueCInst);
7364                                     CIMValue *valRet = DEBUG_ConvertJavaToC(
7365                                                            jlong,
7366                                                            CIMValue*,
7367                                                            jvalRetRef);
7368 mark.hamzy      1.43 
7369                                     JMPIjvm::checkException(env);
7370                      
7371                                     handler.deliver(*valRet);
7372                                  }
7373                                  handler.complete();
7374                                  break;
7375                              }
7376                      
7377 mark.hamzy      1.26         case METHOD_UNKNOWN:
7378                              {
7379 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7380                                      "handleGetPropertyRequest: Unknown method provider!");
7381 mark.hamzy      1.26             break;
7382                              }
7383                              }
7384                          }
7385                          HandlerCatch(handler);
7386                      
7387                          if (env) JMPIjvm::detachThread();
7388                      
7389                          PEG_METHOD_EXIT();
7390                      
7391                          return(response);
7392                      }
7393                      
7394 marek           1.68 Message * JMPIProviderManager::handleSetPropertyRequest(
7395                          const Message * message) throw()
7396 mark.hamzy      1.26 {
7397 marek           1.68     PEG_METHOD_ENTER(
7398                              TRC_PROVIDERMANAGER,
7399                              "JMPIProviderManager::handleSetPropertyRequest");
7400 mark.hamzy      1.26 
7401 kumpf           1.55     HandlerIntro(SetProperty,message,request,response,handler);
7402 mark.hamzy      1.26 
7403                          typedef enum {
7404                             METHOD_UNKNOWN = 0,
7405 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
7406                             METHOD_PROPERTYPROVIDER2,
7407 mark.hamzy      1.26     } METHOD_VERSION;
7408                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
7409                          JNIEnv          *env           = NULL;
7410                      
7411 kumpf           1.77     try
7412 marek           1.68     {
7413 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7414                                   "handleSetPropertyRequest: "
7415 kumpf           1.77                  "name space = %s class name = %s",
7416 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
7417                                   (const char*)request->
7418                                       instanceName.getClassName().getString().getCString()
7419                                   ));
7420 mark.hamzy      1.26 
7421                              // make target object path
7422 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
7423                                                              System::getHostName(),
7424                                                              request->nameSpace,
7425                                                              request->instanceName.getClassName(),
7426                                                              request->instanceName.getKeyBindings());
7427 mark.hamzy      1.26 
7428                              // resolve provider name
7429                              ProviderName name = _resolveProviderName(
7430                                  request->operationContext.get(ProviderIdContainer::NAME));
7431                      
7432                              // get cached or load new provider module
7433 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7434                                                                      name.getPhysicalName(),
7435                                                                      name.getLogicalName(),
7436                                                                      String::EMPTY);
7437 mark.hamzy      1.26 
7438                              // forward request
7439                              JMPIProvider &pr = ph.GetProvider();
7440                      
7441 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7442                                  "handleSetPropertyRequest: "
7443 kumpf           1.77             "Calling provider. setPropertyValue: %s",
7444 thilo.boehm     1.69             (const char*)pr.getName().getCString()));
7445 mark.hamzy      1.26 
7446                              JvmVector *jv = 0;
7447                      
7448                              env = JMPIjvm::attachThread(&jv);
7449                      
7450 mark.hamzy      1.37         if (!env)
7451                              {
7452 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7453                                      "Could not initialize the JVM (Java Virtual Machine) "
7454                                              "runtime environment.");
7455                      
7456 mark.hamzy      1.37             PEG_METHOD_EXIT();
7457                      
7458 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
7459                                      CIM_ERR_FAILED,
7460                                      MessageLoaderParms(
7461 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
7462 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
7463                                              "runtime environment."));
7464 mark.hamzy      1.37         }
7465                      
7466 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
7467                      
7468 mark.hamzy      1.43         jmethodID id               = NULL;
7469                              String    interfaceType;
7470                              String    interfaceVersion;
7471                      
7472 marek           1.68         getInterfaceType(
7473                                  request->operationContext.get(ProviderIdContainer::NAME),
7474                                  interfaceType,
7475                                  interfaceVersion);
7476 mark.hamzy      1.43 
7477                              if (interfaceType == "JMPI")
7478                              {
7479 marek           1.68            id = env->GetMethodID(
7480                                          (jclass)pr.jProviderClass,
7481                                          "setPropertyValue",
7482                                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7483                                              "Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
7484 mark.hamzy      1.26 
7485 mark.hamzy      1.43            if (id != NULL)
7486                                 {
7487                                     eMethodFound = METHOD_PROPERTYPROVIDER;
7488 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7489                                         "handleSetPropertyRequest: "
7490                                             "Found METHOD_PROPERTYPROVIDER.");
7491 mark.hamzy      1.43            }
7492                              }
7493                              else if (interfaceType == "JMPIExperimental")
7494                              {
7495 marek           1.68            id = env->GetMethodID(
7496                                          (jclass)pr.jProviderClass,
7497                                          "setPropertyValue",
7498                                          "(Lorg/pegasus/jmpi/OperationContext;"
7499                                              "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7500                                                  "Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
7501 mark.hamzy      1.26 
7502 mark.hamzy      1.43            if (id != NULL)
7503                                 {
7504                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
7505 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7506                                         "handleSetPropertyRequest: "
7507                                             "Found METHOD_PROPERTYPROVIDER2.");
7508 mark.hamzy      1.43            }
7509 mark.hamzy      1.26         }
7510                      
7511                              if (id == NULL)
7512                              {
7513 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7514                                      "handleSetPropertyRequest: No method provider found!");
7515 mark.hamzy      1.43 
7516                                  PEG_METHOD_EXIT();
7517                      
7518 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
7519                                      CIM_ERR_FAILED,
7520                                      MessageLoaderParms(
7521 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
7522 marek           1.68                     "Could not find a method for the provider based on "
7523                                              "InterfaceType."));
7524 mark.hamzy      1.26         }
7525                      
7526                              JMPIjvm::checkException(env);
7527                      
7528                              switch (eMethodFound)
7529                              {
7530 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
7531                              {
7532 marek           1.68             jlong jcopref = DEBUG_ConvertCToJava(
7533                                                      CIMObjectPath*,
7534 kumpf           1.77                                 jlong,
7535 marek           1.68                                 objectPath);
7536                                  jobject jcop = env->NewObject(
7537                                                     jv->CIMObjectPathClassRef,
7538                                                     jv->CIMObjectPathNewJ,
7539                                                     jcopref);
7540 mark.hamzy      1.43 
7541                                  JMPIjvm::checkException(env);
7542                      
7543 marek           1.68             jstring joclass =
7544                                    env->NewStringUTF(
7545                                       request->instanceName.getClassName().getString().getCString());
7546 mark.hamzy      1.43 
7547                                  JMPIjvm::checkException(env);
7548                      
7549 kumpf           1.77             jstring jpName =
7550 marek           1.68                 env->NewStringUTF(
7551                                          request->propertyName.getString().getCString());
7552 mark.hamzy      1.43 
7553                                  JMPIjvm::checkException(env);
7554                      
7555                                  CIMValue *val = new CIMValue (request->newValue);
7556                      
7557                                  JMPIjvm::checkException(env);
7558                      
7559 marek           1.68             jlong jvalref = DEBUG_ConvertCToJava(CIMValue*, jlong, val);
7560                                  jobject jval = env->NewObject(
7561                                                     jv->CIMValueClassRef,
7562                                                     jv->CIMValueNewJ,
7563                                                     jvalref);
7564 mark.hamzy      1.43 
7565                                  JMPIjvm::checkException(env);
7566                      
7567 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7568 mark.hamzy      1.43 
7569                                  env->CallVoidMethod ((jobject)pr.jProvider,
7570                                                       id,
7571                                                       jcop,
7572                                                       joclass,
7573                                                       jpName,
7574                                                       jval);
7575                      
7576                                  JMPIjvm::checkException(env);
7577                                  break;
7578                              }
7579                      
7580                              case METHOD_PROPERTYPROVIDER2:
7581 mark.hamzy      1.26         {
7582 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
7583                                                     OperationContext*,
7584                                                     jlong,
7585                                                     &request->operationContext);
7586                                  jobject joc = env->NewObject(
7587                                                    jv->OperationContextClassRef,
7588                                                    jv->OperationContextNewJ,
7589                                                    jocRef);
7590                      
7591                                  jlong jcopref = DEBUG_ConvertCToJava(
7592                                                      CIMObjectPath*,
7593                                                      jlong,
7594                                                      objectPath);
7595                                  jobject jcop = env->NewObject(
7596                                                     jv->CIMObjectPathClassRef,
7597                                                     jv->CIMObjectPathNewJ,
7598                                                     jcopref);
7599 mark.hamzy      1.26 
7600                                  JMPIjvm::checkException(env);
7601                      
7602 kumpf           1.77             jstring joclass =
7603 marek           1.68                env->NewStringUTF(
7604                                       request->instanceName.getClassName().getString().getCString());
7605 mark.hamzy      1.26 
7606                                  JMPIjvm::checkException(env);
7607                      
7608 kumpf           1.77             jstring jpName =
7609 marek           1.68                 env->NewStringUTF(
7610                                          request->propertyName.getString().getCString());
7611 mark.hamzy      1.26 
7612                                  JMPIjvm::checkException(env);
7613                      
7614 mark.hamzy      1.27             CIMValue *val = new CIMValue (request->newValue);
7615 mark.hamzy      1.26 
7616                                  JMPIjvm::checkException(env);
7617                      
7618 marek           1.68             jlong jvalref = DEBUG_ConvertCToJava (CIMValue*, jlong, val);
7619                                  jobject jval = env->NewObject(
7620                                                     jv->CIMValueClassRef,
7621                                                     jv->CIMValueNewJ,
7622                                                     jvalref);
7623 mark.hamzy      1.26 
7624                                  JMPIjvm::checkException(env);
7625                      
7626 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7627 mark.hamzy      1.26 
7628                                  env->CallVoidMethod ((jobject)pr.jProvider,
7629                                                       id,
7630 mark.hamzy      1.43                                  joc,
7631 mark.hamzy      1.26                                  jcop,
7632                                                       joclass,
7633                                                       jpName,
7634                                                       jval);
7635                      
7636                                  JMPIjvm::checkException(env);
7637                      
7638 mark.hamzy      1.43             if (joc)
7639                                  {
7640 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
7641 mark.hamzy      1.43 
7642                                     JMPIjvm::checkException(env);
7643                                  }
7644 mark.hamzy      1.26             break;
7645                              }
7646                      
7647                              case METHOD_UNKNOWN:
7648                              {
7649 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7650                                      "handleSetPropertyRequest: Unknown method provider!");
7651 mark.hamzy      1.26             break;
7652                              }
7653                              }
7654                          }
7655                          HandlerCatch(handler);
7656                      
7657                          if (env) JMPIjvm::detachThread();
7658                      
7659                          PEG_METHOD_EXIT();
7660                      
7661                          return(response);
7662                      }
7663                      
7664 marek           1.68 Message * JMPIProviderManager::handleInvokeMethodRequest(
7665                          const Message * message) throw()
7666 schuur          1.1  {
7667 marek           1.68     PEG_METHOD_ENTER(
7668                              TRC_PROVIDERMANAGER,
7669                              "JMPIProviderManager::handleInvokeMethodRequest");
7670 mark.hamzy      1.23 
7671 kumpf           1.55     HandlerIntro(InvokeMethod,message,request,response,handler);
7672 schuur          1.1  
7673 mark.hamzy      1.25     typedef enum {
7674                             METHOD_UNKNOWN = 0,
7675 mark.hamzy      1.43        METHOD_CIMMETHODPROVIDER,
7676                             METHOD_CIMMETHODPROVIDER2,
7677                             METHOD_METHODPROVIDER,
7678                             METHOD_METHODPROVIDER2,
7679 mark.hamzy      1.25     } METHOD_VERSION;
7680                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
7681                          JNIEnv          *env           = NULL;
7682 schuur          1.13 
7683 schuur          1.1      try {
7684 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
7685                                   "handleInvokeMethodRequest: "
7686 kumpf           1.77                  "name space = %s class name = %s",
7687 thilo.boehm     1.69              (const char*)request->nameSpace.getString().getCString(),
7688                                   (const char*)request->
7689                                       instanceName.getClassName().getString().getCString()
7690                                   ));
7691 mark.hamzy      1.23 
7692 schuur          1.1          // make target object path
7693 marek           1.68         CIMObjectPath *objectPath = new CIMObjectPath(
7694                                                              System::getHostName(),
7695                                                              request->nameSpace,
7696                                                              request->instanceName.getClassName(),
7697                                                              request->instanceName.getKeyBindings());
7698 schuur          1.1  
7699                              // resolve provider name
7700 kumpf           1.2          ProviderName name = _resolveProviderName(
7701                                  request->operationContext.get(ProviderIdContainer::NAME));
7702 schuur          1.1  
7703                              // get cached or load new provider module
7704 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
7705                                                                      name.getPhysicalName(),
7706                                                                      name.getLogicalName(),
7707                                                                      String::EMPTY);
7708 schuur          1.1  
7709 mark.hamzy      1.25         JMPIProvider &pr=ph.GetProvider();
7710 schuur          1.1  
7711 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
7712                                  "handleInvokeMethodRequest: "
7713 kumpf           1.77                 "Calling provider: %s",
7714 thilo.boehm     1.69             (const char*)pr.getName().getCString()
7715                                  ));
7716 schuur          1.11 
7717 mark.hamzy      1.25         JvmVector *jv = 0;
7718 mark.hamzy      1.23 
7719 mark.hamzy      1.25         env = JMPIjvm::attachThread(&jv);
7720 schuur          1.11 
7721 mark.hamzy      1.37         if (!env)
7722                              {
7723 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7724                                      "handleInvokeMethodRequest: "
7725                                          "Could not initialize the JVM (Java Virtual Machine) "
7726                                          "runtime environment.");
7727                      
7728 mark.hamzy      1.43             PEG_METHOD_EXIT();
7729                      
7730 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
7731                                      CIM_ERR_FAILED,
7732                                      MessageLoaderParms(
7733 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
7734 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
7735                                              "runtime environment."));
7736 mark.hamzy      1.43         }
7737                      
7738                              JMPIProvider::pm_service_op_lock op_lock(&pr);
7739                      
7740                              jmethodID id               = NULL;
7741                              String    interfaceType;
7742                              String    interfaceVersion;
7743                      
7744 marek           1.68         getInterfaceType(
7745                                  request->operationContext.get(ProviderIdContainer::NAME),
7746                                  interfaceType,
7747                                  interfaceVersion);
7748 mark.hamzy      1.43 
7749                              if (interfaceType == "JMPI")
7750                              {
7751 marek           1.68            id = env->GetMethodID(
7752                                          (jclass)pr.jProviderClass,
7753                                          "invokeMethod",
7754                                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7755                                              "Ljava/util/Vector;Ljava/util/Vector;)"
7756                                                  "Lorg/pegasus/jmpi/CIMValue;");
7757 mark.hamzy      1.43 
7758                                 if (id != NULL)
7759                                 {
7760                                     eMethodFound = METHOD_METHODPROVIDER;
7761 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7762                                         "handleInvokeMethodRequest: "
7763                                             "Found METHOD_PROPERTYPROVIDER.");
7764 mark.hamzy      1.43            }
7765                      
7766                                 if (id == NULL)
7767                                 {
7768                                     env->ExceptionClear();
7769 marek           1.68                id = env->GetMethodID(
7770                                              (jclass)pr.jProviderClass,
7771                                              "invokeMethod",
7772                                              "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7773                                                  "[Lorg/pegasus/jmpi/CIMArgument;"
7774                                                      "[Lorg/pegasus/jmpi/CIMArgument;)"
7775                                                          "Lorg/pegasus/jmpi/CIMValue;");
7776 mark.hamzy      1.43 
7777                                     if (id != NULL)
7778                                     {
7779                                         eMethodFound = METHOD_CIMMETHODPROVIDER;
7780 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7781                                             "handleInvokeMethodRequest: "
7782                                                 "Found METHOD_CIMMETHODPROVIDER.");
7783 mark.hamzy      1.43                }
7784                                 }
7785                              }
7786                              else if (interfaceType == "JMPIExperimental")
7787                              {
7788 marek           1.68            id = env->GetMethodID(
7789                                          (jclass)pr.jProviderClass,
7790                                          "invokeMethod",
7791                                          "(Lorg/pegasus/jmpi/OperationContext;"
7792                                              "Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
7793                                                  "Ljava/util/Vector;Ljava/util/Vector;)"
7794                                                      "Lorg/pegasus/jmpi/CIMValue;");
7795 mark.hamzy      1.43 
7796                                 if (id != NULL)
7797                                 {
7798                                     eMethodFound = METHOD_METHODPROVIDER2;
7799 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7800                                         "handleInvokeMethodRequest: "
7801                                             "Found METHOD_METHODPROVIDER2.");
7802 mark.hamzy      1.43            }
7803                      
7804                                 if (id == NULL)
7805                                 {
7806                                     env->ExceptionClear();
7807                      
7808 marek           1.68                id = env->GetMethodID(
7809                                              (jclass)pr.jProviderClass,
7810                                              "invokeMethod",
7811                                              "(Lorg/pegasus/jmpi/OperationContext;"
7812                                                  "Lorg/pegasus/jmpi/CIMObjectPath;"
7813                                                      "Ljava/lang/String;"
7814                                                          "[Lorg/pegasus/jmpi/CIMArgument;["
7815                                                              "Lorg/pegasus/jmpi/CIMArgument;)"
7816                                                                  "Lorg/pegasus/jmpi/CIMValue;");
7817 mark.hamzy      1.43 
7818                                     if (id != NULL)
7819                                     {
7820                                         eMethodFound = METHOD_CIMMETHODPROVIDER2;
7821 thilo.boehm     1.69                    PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
7822                                             "handleInvokeMethodRequest: "
7823                                                 "Found METHOD_CIMMETHODPROVIDER2.");
7824 mark.hamzy      1.43                }
7825                                 }
7826                              }
7827                      
7828                              if (id == NULL)
7829                              {
7830 thilo.boehm     1.69            PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7831                                     "handleInvokeMethod: No method provider found!");
7832 mark.hamzy      1.43 
7833                                 PEG_METHOD_EXIT();
7834                      
7835 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
7836                                     CIM_ERR_FAILED,
7837                                     MessageLoaderParms(
7838 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
7839 marek           1.68                    "Could not find a method for the provider based on "
7840                                             "InterfaceType."));
7841 mark.hamzy      1.43         }
7842                      
7843                              JMPIjvm::checkException(env);
7844                      
7845                              switch (eMethodFound)
7846                              {
7847                              case METHOD_CIMMETHODPROVIDER:
7848                              {
7849 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava(
7850                                                      CIMObjectPath*,
7851                                                      jlong,
7852                                                      objectPath);
7853                                  jobject jcop = env->NewObject(
7854                                                     jv->CIMObjectPathClassRef,
7855                                                     jv->CIMObjectPathNewJ,
7856                                                     jcopRef);
7857 mark.hamzy      1.43 
7858                                  JMPIjvm::checkException(env);
7859                      
7860 kumpf           1.77             jstring jMethod =
7861 marek           1.68                 env->NewStringUTF(
7862                                          request->methodName.getString().getCString());
7863 mark.hamzy      1.43 
7864                                  JMPIjvm::checkException(env);
7865                      
7866                                  Uint32 m=request->inParameters.size();
7867                      
7868 marek           1.68             jobjectArray jArIn=(jobjectArray)env->NewObjectArray(
7869                                                         m,
7870                                                         jv->CIMArgumentClassRef,
7871                                                         NULL);
7872 mark.hamzy      1.43 
7873                                  for (Uint32 i=0; i<m; i++) {
7874 marek           1.68               CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
7875                                    jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm);
7876                                    jobject jArg = env->NewObject(
7877                                                       jv->CIMArgumentClassRef,
7878                                                       jv->CIMArgumentNewJ,
7879                                                       jArgRef);
7880 mark.hamzy      1.43 
7881                                    env->SetObjectArrayElement(jArIn,i,jArg);
7882                                  }
7883                      
7884 marek           1.68             jobjectArray jArOut=(jobjectArray)env->NewObjectArray(
7885                                                          24,
7886                                                          jv->CIMArgumentClassRef,
7887                                                          NULL);
7888 mark.hamzy      1.43 
7889 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7890                      
7891 mark.hamzy      1.43             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
7892                                                                            id,
7893                                                                            jcop,
7894                                                                            jMethod,
7895                                                                            jArIn,
7896                                                                            jArOut);
7897                                  JMPIjvm::checkException(env);
7898 mark.hamzy      1.37 
7899 mark.hamzy      1.43             handler.processing();
7900 mark.hamzy      1.37 
7901 marek           1.68             jlong jValueRetRef = env->CallLongMethod(
7902                                                           jValueRet,
7903                                                           JMPIjvm::jv.CIMValueCInst);
7904                                  CIMValue *valueRet = DEBUG_ConvertJavaToC(
7905                                                           jlong,
7906                                                           CIMValue*,
7907                                                           jValueRetRef);
7908 schuur          1.11 
7909 mark.hamzy      1.43             handler.deliver(*valueRet);
7910 schuur          1.1  
7911 mark.hamzy      1.43             for (int i=0; i<24; i++) {
7912                                      jobject jArg = env->GetObjectArrayElement(jArOut,i);
7913 mark.hamzy      1.25 
7914 mark.hamzy      1.43                 JMPIjvm::checkException(env);
7915 mark.hamzy      1.25 
7916 mark.hamzy      1.43                 if (jArg==NULL)
7917                                         break;
7918 mark.hamzy      1.25 
7919 marek           1.68                 jlong jpRef = env->CallLongMethod(
7920                                                        jArg,
7921                                                        JMPIjvm::jv.CIMArgumentCInst);
7922                                      CIMParamValue *p = DEBUG_ConvertJavaToC(
7923                                                             jlong,
7924                                                             CIMParamValue*,
7925                                                             jpRef);
7926 mark.hamzy      1.25 
7927 mark.hamzy      1.43                 JMPIjvm::checkException(env);
7928 mark.hamzy      1.25 
7929 mark.hamzy      1.43                 handler.deliverParamValue(*p);
7930 mark.hamzy      1.25             }
7931 mark.hamzy      1.43 
7932                                  handler.complete();
7933                                  break;
7934 mark.hamzy      1.23         }
7935 mark.hamzy      1.25 
7936 mark.hamzy      1.43         case METHOD_CIMMETHODPROVIDER2:
7937                              {
7938 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
7939                                                     OperationContext*,
7940                                                     jlong,
7941                                                     &request->operationContext);
7942                                  jobject joc = env->NewObject(
7943                                                    jv->OperationContextClassRef,
7944                                                    jv->OperationContextNewJ,
7945                                                    jocRef);
7946                      
7947 kumpf           1.77             jlong jcopRef = DEBUG_ConvertCToJava(
7948 marek           1.68                                 CIMObjectPath*,
7949                                                      jlong,
7950                                                      objectPath);
7951                                  jobject jcop = env->NewObject(
7952                                                     jv->CIMObjectPathClassRef,
7953                                                     jv->CIMObjectPathNewJ,
7954                                                     jcopRef);
7955 mark.hamzy      1.25 
7956                                  JMPIjvm::checkException(env);
7957                      
7958 kumpf           1.77             jstring jMethod =
7959 marek           1.68                 env->NewStringUTF(request->methodName.getString().getCString());
7960 mark.hamzy      1.29 
7961 mark.hamzy      1.23             JMPIjvm::checkException(env);
7962                      
7963 mark.hamzy      1.25             Uint32 m=request->inParameters.size();
7964                      
7965 marek           1.68             jobjectArray jArIn=(jobjectArray)env->NewObjectArray(
7966                                                         m,
7967                                                         jv->CIMArgumentClassRef,
7968                                                         NULL);
7969 mark.hamzy      1.29 
7970 mark.hamzy      1.25             for (Uint32 i=0; i<m; i++) {
7971 marek           1.68               CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
7972                                    jlong jArgRef = DEBUG_ConvertCToJava(CIMParamValue*, jlong, parm);
7973                                    jobject jArg = env->NewObject(
7974                                                       jv->CIMArgumentClassRef,
7975                                                       jv->CIMArgumentNewJ,
7976                                                       jArgRef);
7977 mark.hamzy      1.23 
7978 mark.hamzy      1.25               env->SetObjectArrayElement(jArIn,i,jArg);
7979                                  }
7980 mark.hamzy      1.23 
7981 marek           1.68             jobjectArray jArOut=(jobjectArray)env->NewObjectArray(
7982                                                          24,
7983                                                          jv->CIMArgumentClassRef,
7984                                                          NULL);
7985 mark.hamzy      1.23 
7986 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
7987                      
7988 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
7989                                                                            id,
7990 mark.hamzy      1.43                                                       joc,
7991 mark.hamzy      1.29                                                       jcop,
7992                                                                            jMethod,
7993                                                                            jArIn,
7994                                                                            jArOut);
7995 mark.hamzy      1.23             JMPIjvm::checkException(env);
7996                      
7997 mark.hamzy      1.43             if (joc)
7998                                  {
7999 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
8000 mark.hamzy      1.43 
8001                                     JMPIjvm::checkException(env);
8002                                  }
8003                      
8004 mark.hamzy      1.23             handler.processing();
8005                      
8006 marek           1.68             jlong     jValueRetRef = env->CallLongMethod(
8007                                                               jValueRet,
8008                                                               JMPIjvm::jv.CIMValueCInst);
8009                                  CIMValue *valueRet = DEBUG_ConvertJavaToC(
8010                                                           jlong,
8011                                                           CIMValue*,
8012                                                           jValueRetRef);
8013 mark.hamzy      1.23 
8014 mark.hamzy      1.29             handler.deliver(*valueRet);
8015 schuur          1.13 
8016 mark.hamzy      1.25             for (int i=0; i<24; i++) {
8017 mark.hamzy      1.29                 jobject jArg = env->GetObjectArrayElement(jArOut,i);
8018                      
8019 mark.hamzy      1.23                 JMPIjvm::checkException(env);
8020 schuur          1.13 
8021 mark.hamzy      1.29                 if (jArg==NULL)
8022                                         break;
8023 schuur          1.13 
8024 marek           1.68                 jlong jpRef = env->CallLongMethod(
8025                                                        jArg,
8026                                                        JMPIjvm::jv.CIMArgumentCInst);
8027                                      CIMParamValue *p = DEBUG_ConvertJavaToC(
8028                                                             jlong,
8029                                                             CIMParamValue*,
8030                                                             jpRef);
8031 schuur          1.13 
8032 mark.hamzy      1.23                 JMPIjvm::checkException(env);
8033 schuur          1.1  
8034 mark.hamzy      1.25                 handler.deliverParamValue(*p);
8035 mark.hamzy      1.23             }
8036 schuur          1.1  
8037 mark.hamzy      1.23             handler.complete();
8038 mark.hamzy      1.25             break;
8039 mark.hamzy      1.23         }
8040 schuur          1.11 
8041 mark.hamzy      1.43         case METHOD_METHODPROVIDER:
8042                              {
8043 marek           1.68             jlong   jcopRef = DEBUG_ConvertCToJava(
8044                                                        CIMObjectPath*,
8045                                                        jlong,
8046                                                        objectPath);
8047                                  jobject jcop = env->NewObject(
8048                                                     jv->CIMObjectPathClassRef,
8049                                                     jv->CIMObjectPathNewJ,
8050                                                     jcopRef);
8051 mark.hamzy      1.43 
8052                                  JMPIjvm::checkException(env);
8053                      
8054 marek           1.68             jstring jMethod = env->NewStringUTF(
8055                                                        request->methodName.getString().getCString());
8056 mark.hamzy      1.43 
8057                                  JMPIjvm::checkException(env);
8058                      
8059                                  jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
8060                      
8061                                  JMPIjvm::checkException(env);
8062                      
8063                                  for (int i=0,m=request->inParameters.size(); i<m; i++)
8064                                  {
8065 marek           1.68                 const CIMParamValue &parm = request->inParameters[i];
8066                                      const CIMValue v = parm.getValue();
8067                                      CIMProperty *p = new CIMProperty(
8068                                                           parm.getParameterName(),
8069                                                           v,
8070                                                           v.getArraySize());
8071                                      jlong jpRef = DEBUG_ConvertCToJava (CIMProperty*, jlong, p);
8072                                      jobject jp = env->NewObject(
8073                                                       jv->CIMPropertyClassRef,
8074                                                       jv->CIMPropertyNewJ,
8075                                                       jpRef);
8076 mark.hamzy      1.43 
8077                                      env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
8078                                   }
8079                      
8080                                  jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
8081                                  JMPIjvm::checkException(env);
8082                      
8083 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8084                      
8085 mark.hamzy      1.43             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
8086                                                                            id,
8087                                                                            jcop,
8088                                                                            jMethod,
8089                                                                            jVecIn,
8090                                                                            jVecOut);
8091                                  JMPIjvm::checkException(env);
8092                      
8093                                  handler.processing();
8094                      
8095 marek           1.68             jlong jValueRetRef = env->CallLongMethod(
8096                                                           jValueRet,
8097                                                           JMPIjvm::jv.CIMValueCInst);
8098                                  CIMValue *valueRet = DEBUG_ConvertJavaToC(
8099                                                           jlong,
8100                                                           CIMValue*,
8101                                                           jValueRetRef);
8102 mark.hamzy      1.43 
8103                                  handler.deliver(*valueRet);
8104                      
8105 marek           1.68             for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize);
8106                                        i<m;
8107                                        i++)
8108 mark.hamzy      1.43             {
8109                                      JMPIjvm::checkException(env);
8110                      
8111 marek           1.68                 jobject jProp = env->CallObjectMethod(
8112                                                          jVecOut,
8113                                                          JMPIjvm::jv.VectorElementAt,
8114                                                          i);
8115 mark.hamzy      1.43 
8116                                      JMPIjvm::checkException(env);
8117                      
8118 marek           1.68                 jlong jpRef = env->CallLongMethod(
8119                                                        jProp,
8120                                                        JMPIjvm::jv.CIMPropertyCInst);
8121                                      CIMProperty *p = DEBUG_ConvertJavaToC(
8122 kumpf           1.77                                      jlong,
8123 marek           1.68                                      CIMProperty*,
8124                                                           jpRef);
8125 mark.hamzy      1.43 
8126                                      JMPIjvm::checkException(env);
8127                      
8128 marek           1.68                 handler.deliverParamValue(
8129                                          CIMParamValue(p->getName().getString(),
8130                                                        p->getValue()));
8131 mark.hamzy      1.43             }
8132                      
8133                                  handler.complete();
8134                                  break;
8135                              }
8136                      
8137                              case METHOD_METHODPROVIDER2:
8138 mark.hamzy      1.25         {
8139 marek           1.68             jlong   jocRef = DEBUG_ConvertCToJava(
8140                                                       OperationContext*,
8141                                                       jlong,
8142                                                       &request->operationContext);
8143                                  jobject joc    = env->NewObject(
8144                                                       jv->OperationContextClassRef,
8145                                                       jv->OperationContextNewJ,
8146                                                       jocRef);
8147                      
8148                                  jlong jcopRef = DEBUG_ConvertCToJava(
8149                                                      CIMObjectPath*,
8150                                                      jlong,
8151                                                      objectPath);
8152 kumpf           1.77             jobject jcop = env->NewObject(
8153 marek           1.68                                jv->CIMObjectPathClassRef,
8154                                                     jv->CIMObjectPathNewJ,
8155                                                     jcopRef);
8156 mark.hamzy      1.25 
8157                                  JMPIjvm::checkException(env);
8158                      
8159 marek           1.68             jstring jMethod = env->NewStringUTF(
8160                                                        request->methodName.getString().getCString());
8161 mark.hamzy      1.29 
8162 mark.hamzy      1.25             JMPIjvm::checkException(env);
8163                      
8164 mark.hamzy      1.29             jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
8165                      
8166 mark.hamzy      1.25             JMPIjvm::checkException(env);
8167                      
8168 mark.hamzy      1.29             for (int i=0,m=request->inParameters.size(); i<m; i++)
8169                                  {
8170                                      const CIMParamValue &parm  = request->inParameters[i];
8171                                      const CIMValue       v     = parm.getValue();
8172 marek           1.68                 CIMProperty *p = new CIMProperty(
8173                                                           parm.getParameterName(),
8174                                                           v,
8175                                                           v.getArraySize());
8176                                      jlong jpRef = DEBUG_ConvertCToJava(CIMProperty*, jlong, p);
8177                                      jobject jp = env->NewObject(
8178                                                       jv->CIMPropertyClassRef,
8179                                                       jv->CIMPropertyNewJ,
8180                                                       jpRef);
8181 mark.hamzy      1.23 
8182 mark.hamzy      1.29                 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
8183 mark.hamzy      1.25              }
8184 mark.hamzy      1.23 
8185 mark.hamzy      1.25             jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
8186                                  JMPIjvm::checkException(env);
8187 mark.hamzy      1.23 
8188 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8189                      
8190 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
8191                                                                            id,
8192 mark.hamzy      1.43                                                       joc,
8193 mark.hamzy      1.29                                                       jcop,
8194                                                                            jMethod,
8195                                                                            jVecIn,
8196                                                                            jVecOut);
8197 mark.hamzy      1.23             JMPIjvm::checkException(env);
8198                      
8199 mark.hamzy      1.43             if (joc)
8200                                  {
8201 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
8202 mark.hamzy      1.43 
8203                                     JMPIjvm::checkException(env);
8204                                  }
8205                      
8206 mark.hamzy      1.23             handler.processing();
8207 schuur          1.1  
8208 marek           1.68             jlong jValueRetRef = env->CallLongMethod(
8209                                                           jValueRet,
8210                                                           JMPIjvm::jv.CIMValueCInst);
8211                                  CIMValue *valueRet = DEBUG_ConvertJavaToC(
8212                                                           jlong,
8213                                                           CIMValue*,
8214                                                           jValueRetRef);
8215 mark.hamzy      1.23 
8216 mark.hamzy      1.29             handler.deliver(*valueRet);
8217 mark.hamzy      1.23 
8218 kumpf           1.77             for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize);
8219 marek           1.68                  i<m;
8220                                       i++)
8221 mark.hamzy      1.29             {
8222 mark.hamzy      1.23                 JMPIjvm::checkException(env);
8223 schuur          1.13 
8224 marek           1.68                 jobject jProp = env->CallObjectMethod(
8225                                                          jVecOut,
8226                                                          JMPIjvm::jv.VectorElementAt,
8227                                                          i);
8228 mark.hamzy      1.29 
8229 mark.hamzy      1.25                 JMPIjvm::checkException(env);
8230 schuur          1.13 
8231 marek           1.68                 jlong jpRef = env->CallLongMethod(
8232                                                        jProp,
8233                                                        JMPIjvm::jv.CIMPropertyCInst);
8234                                      CIMProperty *p = DEBUG_ConvertJavaToC(
8235                                                           jlong,
8236                                                           CIMProperty*,
8237                                                           jpRef);
8238 schuur          1.13 
8239 mark.hamzy      1.23                 JMPIjvm::checkException(env);
8240 schuur          1.13 
8241 marek           1.68                 handler.deliverParamValue(
8242                                          CIMParamValue(p->getName().getString(),
8243                                                        p->getValue()));
8244 mark.hamzy      1.25             }
8245                      
8246                                  handler.complete();
8247                                  break;
8248                              }
8249 mark.hamzy      1.23 
8250 mark.hamzy      1.25         case METHOD_UNKNOWN:
8251                              {
8252 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8253                                      "handleInvokeMethodRequest: Unknown method provider!");
8254 mark.hamzy      1.25             break;
8255                              }
8256 mark.hamzy      1.23         }
8257 schuur          1.1      }
8258                          HandlerCatch(handler);
8259 schuur          1.11 
8260                          if (env) JMPIjvm::detachThread();
8261                      
8262 schuur          1.1      PEG_METHOD_EXIT();
8263                      
8264 schuur          1.11     return(response);
8265 schuur          1.1  }
8266 mark.hamzy      1.23 
8267 marek           1.68 int LocateIndicationProviderNames(
8268                          const CIMInstance& pInstance,
8269                          const CIMInstance& pmInstance,
8270                          String& providerName,
8271                          String& location)
8272 schuur          1.1  {
8273 marek           1.73     Uint32 pos = pInstance.findProperty(PEGASUS_PROPERTYNAME_NAME);
8274 schuur          1.1      pInstance.getProperty(pos).getValue().get(providerName);
8275                      
8276                          pos = pmInstance.findProperty(CIMName ("Location"));
8277                          pmInstance.getProperty(pos).getValue().get(location);
8278                          return 0;
8279                      }
8280                      
8281 mark.hamzy      1.52 WQLSelectStatement *
8282                      newSelectExp (String& query,
8283                                    String& queryLanguage)
8284 mark.hamzy      1.44 {
8285 mark.hamzy      1.52    WQLSelectStatement *stmt = new WQLSelectStatement (queryLanguage, query);
8286 mark.hamzy      1.44 
8287 mark.hamzy      1.52    try
8288 mark.hamzy      1.44    {
8289 mark.hamzy      1.52       WQLParser::parse (query, *stmt);
8290 mark.hamzy      1.44    }
8291 mark.hamzy      1.52    catch (const Exception &e)
8292 mark.hamzy      1.44    {
8293 mark.hamzy      1.52       cerr << "Error: newSelectExp caught: " << e.getMessage () << endl;
8294 mark.hamzy      1.44    }
8295                      
8296 mark.hamzy      1.52    return stmt;
8297 mark.hamzy      1.44 }
8298                      
8299 marek           1.68 Message * JMPIProviderManager::handleCreateSubscriptionRequest(
8300                          const Message * message) throw()
8301 schuur          1.1  {
8302 marek           1.68     PEG_METHOD_ENTER(
8303                              TRC_PROVIDERMANAGER,
8304                              "JMPIProviderManager::handleCreateSubscriptionRequest");
8305 schuur          1.1  
8306 mark.hamzy      1.23     HandlerIntroInd(CreateSubscription,message,request,response,handler);
8307                      
8308 mark.hamzy      1.25     typedef enum {
8309                             METHOD_UNKNOWN = 0,
8310 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
8311                             METHOD_EVENTPROVIDER2,
8312 mark.hamzy      1.25     } METHOD_VERSION;
8313 mark.hamzy      1.44     METHOD_VERSION  eMethodFound = METHOD_UNKNOWN;
8314                          JNIEnv         *env          = NULL;
8315 mark.hamzy      1.25 
8316 schuur          1.1      try {
8317 mark.hamzy      1.44         String               fileName,
8318                                                   providerName,
8319 mark.hamzy      1.25                              providerLocation;
8320                              CIMInstance          req_provider,
8321                                                   req_providerModule;
8322 kumpf           1.77         ProviderIdContainer  pidc =
8323 marek           1.68             (ProviderIdContainer) request->operationContext.get(
8324                                      ProviderIdContainer::NAME);
8325 mark.hamzy      1.25 
8326 marek           1.68         req_provider = pidc.getProvider ();
8327 mark.hamzy      1.44         req_providerModule = pidc.getModule ();
8328 mark.hamzy      1.25 
8329 marek           1.68         LocateIndicationProviderNames(
8330                                  req_provider,
8331                                  req_providerModule,
8332                                  providerName,
8333                                  providerLocation);
8334                      
8335                              fileName = resolveFileName(providerLocation);
8336                      
8337 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
8338                                   "handleCreateSubscriptionRequest: "
8339                                       "name space = %s provider name = %s provider filename = %s",
8340 thilo.boehm     1.70              (const char*)request->nameSpace.getString().getCString(),
8341 kumpf           1.77              (const char*)providerName.getCString(),
8342 thilo.boehm     1.70              (const char*)fileName.getCString()
8343 thilo.boehm     1.69              ));
8344 schuur          1.1  
8345                              // get cached or load new provider module
8346 kumpf           1.77         JMPIProvider::OpProviderHolder ph =
8347 marek           1.68             providerManager.getProvider(
8348                                      fileName,
8349                                      providerName,
8350                                      String::EMPTY);
8351 schuur          1.1  
8352 carolann.graves 1.21         //
8353                              //  Save the provider instance from the request
8354                              //
8355                              ph.GetProvider ().setProviderInstance (req_provider);
8356                      
8357 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
8358 mark.hamzy      1.25 
8359 mark.hamzy      1.44         //
8360                              //  Increment count of current subscriptions for this provider
8361                              //
8362                              pr.testIfZeroAndIncrementSubscriptions ();
8363 schuur          1.1  
8364 kumpf           1.77         SubscriptionFilterConditionContainer sub_cntr =
8365 marek           1.68             request->operationContext.get(
8366                                      SubscriptionFilterConditionContainer::NAME);
8367                              indProvRecord *prec = NULL;
8368                              bool fNewPrec = false;
8369 schuur          1.1  
8370 mark.hamzy      1.25         {
8371 mark.hamzy      1.44            AutoMutex lock (mutexProvTab);
8372                      
8373                                 provTab.lookup (providerName, prec);
8374 schuur          1.12 
8375 mark.hamzy      1.44            if (!prec)
8376                                 {
8377                                     fNewPrec = true;
8378 schuur          1.1  
8379 mark.hamzy      1.44                prec = new indProvRecord ();
8380 schuur          1.1  
8381 mark.hamzy      1.44                // convert arguments
8382                                     prec->ctx = new OperationContext ();
8383 schuur          1.12 
8384 marek           1.68                prec->ctx->insert(
8385                                         request->operationContext.get(
8386                                             IdentityContainer::NAME));
8387                                     prec->ctx->insert(
8388                                         request->operationContext.get(
8389                                             AcceptLanguageListContainer::NAME));
8390                                     prec->ctx->insert(
8391                                         request->operationContext.get(
8392                                             ContentLanguageListContainer::NAME));
8393                                     prec->ctx->insert(
8394                                         request->operationContext.get(
8395                                             SubscriptionInstanceContainer::NAME));
8396                                     prec->ctx->insert(
8397                                         request->operationContext.get(
8398                                             SubscriptionFilterConditionContainer::NAME));
8399 konrad.r        1.22 
8400 mark.hamzy      1.44                prec->enabled = true;
8401 konrad.r        1.22 
8402 marek           1.68                prec->handler = new EnableIndicationsResponseHandler(
8403                                                         0,
8404                                                         0,
8405                                                         req_provider,
8406                                                         _indicationCallback,
8407                                                         _responseChunkCallback);
8408                      
8409 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8410 marek           1.68                              "handleCreateSubscriptionRequest: "
8411 thilo.boehm     1.69                        "Adding %s to provTab.",
8412                                         (const char*)providerName.getCString()));
8413 schuur          1.1  
8414 mark.hamzy      1.44                provTab.insert (providerName, prec);
8415                                 }
8416                              }
8417 schuur          1.1  
8418 mark.hamzy      1.44         {
8419                                 AutoMutex lock (prec->mutex);
8420 schuur          1.1  
8421 mark.hamzy      1.44            prec->count++;
8422 schuur          1.1          }
8423                      
8424 mark.hamzy      1.44         // Add a selection record for JNI CIMOMHandle deliverEvent calls
8425                              indSelectRecord *srec = new indSelectRecord ();
8426 mark.hamzy      1.29 
8427                              {
8428 mark.hamzy      1.44            srec->query         = request->query;
8429                                 srec->queryLanguage = sub_cntr.getQueryLanguage ();
8430                                 srec->propertyList  = request->propertyList;
8431                      
8432 kumpf           1.77            CIMOMHandleQueryContext *qContext =
8433 marek           1.68                new CIMOMHandleQueryContext(
8434                                         CIMNamespaceName(
8435                                             request->nameSpace.getString()),
8436                                         *pr._cimom_handle);
8437 mark.hamzy      1.44            srec->qContext = qContext;
8438                      
8439 marek           1.68            CIMObjectPath sPath = request->subscriptionInstance.getPath();
8440 dave.sudlik     1.62            Array<CIMKeyBinding> kb;
8441 mark.hamzy      1.44 
8442 dave.sudlik     1.62            // Technically we only need Name and Handler for uniqueness
8443                                 kb = sPath.getKeyBindings ();
8444                      
8445                                 // Add an entry for every provider.
8446                                 kb.append (CIMKeyBinding ("Provider",
8447                                                           pr.getName (),
8448                                                           CIMKeyBinding::STRING));
8449                      
8450                                 sPath.setKeyBindings (kb);
8451 mark.hamzy      1.29 
8452 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
8453 mark.hamzy      1.29 
8454 thilo.boehm     1.69            PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8455                                     "handleCreateSubscriptionRequest: "
8456                                         "Adding %s to selxTab.",
8457                                     (const char*)sPath.toString().getCString()));
8458 mark.hamzy      1.44 
8459                                 selxTab.insert (sPath.toString (), srec);
8460                      
8461 thilo.boehm     1.69            PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8462                                       "handleCreateSubscriptionRequest: "
8463 thilo.boehm     1.70                      "For selxTab %s , srec = %p, qContext = %p",
8464 thilo.boehm     1.69                  (const char*)sPath.toString().getCString(),
8465 thilo.boehm     1.70                  srec,qContext));
8466 schuur          1.1          }
8467                      
8468 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL4,
8469 kumpf           1.77             "handleCreateSubscriptionRequest: Calling provider: %s",
8470 thilo.boehm     1.69             (const char*)pr.getName().getCString()));
8471 mark.hamzy      1.44 
8472 mark.hamzy      1.25         JvmVector *jv = 0;
8473                      
8474                              env = JMPIjvm::attachThread(&jv);
8475                      
8476 mark.hamzy      1.37         if (!env)
8477                              {
8478 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8479                                      "handleCreateSubscriptionRequest: "
8480                                          "Could not initialize the JVM (Java Virtual Machine) "
8481                                          "runtime environment.");
8482                      
8483 mark.hamzy      1.37             PEG_METHOD_EXIT();
8484                      
8485 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
8486                                      CIM_ERR_FAILED,
8487                                      MessageLoaderParms(
8488 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
8489 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
8490                                              "runtime environment."));
8491 mark.hamzy      1.37         }
8492                      
8493 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
8494                      
8495 mark.hamzy      1.43         jmethodID id               = NULL;
8496                              String    interfaceType;
8497                              String    interfaceVersion;
8498                      
8499 mark.hamzy      1.44         getInterfaceType (pidc,
8500 mark.hamzy      1.43                           interfaceType,
8501                                                interfaceVersion);
8502                      
8503                              if (interfaceType == "JMPI")
8504                              {
8505 marek           1.68            id = env->GetMethodID(
8506                                          (jclass)pr.jProviderClass,
8507                                          "activateFilter",
8508                                          "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8509                                              "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
8510 mark.hamzy      1.43 
8511                                 if (id != NULL)
8512                                 {
8513                                     eMethodFound = METHOD_EVENTPROVIDER;
8514 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8515                                         "handleCreateSubscriptionRequest: "
8516                                             "Found METHOD_EVENTPROVIDER.");
8517 mark.hamzy      1.43            }
8518                              }
8519                              else if (interfaceType == "JMPIExperimental")
8520                              {
8521 marek           1.68            id = env->GetMethodID(
8522                                          (jclass)pr.jProviderClass,
8523                                          "activateFilter",
8524                                          "(Lorg/pegasus/jmpi/OperationContext;"
8525                                              "Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8526                                                  "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
8527 mark.hamzy      1.25 
8528 mark.hamzy      1.43            if (id != NULL)
8529                                 {
8530                                     eMethodFound = METHOD_EVENTPROVIDER2;
8531 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8532                                         "handleCreateSubscriptionRequest: "
8533                                             "Found METHOD_EVENTPROVIDER2.");
8534 mark.hamzy      1.43            }
8535                              }
8536 schuur          1.12 
8537 mark.hamzy      1.43         if (id == NULL)
8538 mark.hamzy      1.25         {
8539 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8540                                      "handleCreateSubscriptionRequest: No method provider found!");
8541 mark.hamzy      1.43 
8542                                 PEG_METHOD_EXIT();
8543                      
8544 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
8545                                     CIM_ERR_FAILED,
8546                                     MessageLoaderParms(
8547 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
8548 marek           1.68                    "Could not find a method for the provider based on"
8549                                             " InterfaceType."));
8550 mark.hamzy      1.25         }
8551 mark.hamzy      1.23 
8552                              JMPIjvm::checkException(env);
8553                      
8554 mark.hamzy      1.25         switch (eMethodFound)
8555                              {
8556 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
8557                              {
8558 marek           1.68             WQLSelectStatement *stmt = newSelectExp(
8559                                                                 srec->query,
8560                                                                 srec->queryLanguage);
8561                                  jlong jStmtRef = DEBUG_ConvertCToJava(
8562                                                       WQLSelectStatement *,
8563                                                       jlong,
8564                                                       stmt);
8565                                  jobject jSelectExp = env->NewObject(
8566                                                           jv->SelectExpClassRef,
8567                                                           jv->SelectExpNewJ,
8568                                                           jStmtRef);
8569 mark.hamzy      1.43 
8570                                  JMPIjvm::checkException(env);
8571                      
8572 marek           1.68             jstring jType = env->NewStringUTF(
8573                                                      request->nameSpace.getString().getCString());
8574 mark.hamzy      1.43 
8575                                  JMPIjvm::checkException(env);
8576                      
8577 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
8578                                                                              request->nameSpace,
8579                                                                              request->classNames[0]);
8580 marek           1.68             jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8581                                  jobject jcop = env->NewObject(
8582                                                     jv->CIMObjectPathClassRef,
8583                                                     jv->CIMObjectPathNewJ,jcopRef);
8584 mark.hamzy      1.43 
8585                                  JMPIjvm::checkException(env);
8586                      
8587 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8588                      
8589 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
8590                                                       id,
8591 mark.hamzy      1.52                                  jSelectExp,
8592 mark.hamzy      1.44                                  jType,
8593                                                       jcop,
8594                                                       (jboolean)fNewPrec);
8595 mark.hamzy      1.43 
8596                                  JMPIjvm::checkException(env);
8597                                  break;
8598                              }
8599                      
8600                              case METHOD_EVENTPROVIDER2:
8601 mark.hamzy      1.25         {
8602 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
8603                                                     OperationContext*,
8604                                                     jlong,
8605                                                     &request->operationContext);
8606                                  jobject joc = env->NewObject(
8607                                                    jv->OperationContextClassRef,
8608                                                    jv->OperationContextNewJ,jocRef);
8609                      
8610                                  WQLSelectStatement *stmt = newSelectExp(srec->query,
8611                                                                          srec->queryLanguage);
8612                                  jlong   jStmtRef   = DEBUG_ConvertCToJava(
8613                                                           WQLSelectStatement *,
8614                                                           jlong,
8615                                                           stmt);
8616                                  jobject jSelectExp = env->NewObject(
8617                                                           jv->SelectExpClassRef,
8618                                                           jv->SelectExpNewJ,
8619                                                           jStmtRef);
8620 mark.hamzy      1.25 
8621                                  JMPIjvm::checkException(env);
8622                      
8623 marek           1.68             jstring jType = env->NewStringUTF(
8624                                                      request->nameSpace.getString().getCString());
8625 schuur          1.12 
8626 mark.hamzy      1.25             JMPIjvm::checkException(env);
8627 schuur          1.1  
8628 marek           1.68             CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
8629                                                                          request->nameSpace,
8630                                                                          request->classNames[0]);
8631                                  jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8632                                  jobject jcop = env->NewObject(
8633                                                     jv->CIMObjectPathClassRef,
8634                                                     jv->CIMObjectPathNewJ,jcopRef);
8635 schuur          1.1  
8636 mark.hamzy      1.25             JMPIjvm::checkException(env);
8637 schuur          1.1  
8638 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8639                      
8640 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
8641                                                       id,
8642                                                       joc,
8643 mark.hamzy      1.52                                  jSelectExp,
8644 mark.hamzy      1.44                                  jType,
8645                                                       jcop,
8646                                                       (jboolean)fNewPrec);
8647 schuur          1.12 
8648 mark.hamzy      1.25             JMPIjvm::checkException(env);
8649 schuur          1.1  
8650 mark.hamzy      1.43             if (joc)
8651                                  {
8652 marek           1.68                env->CallVoidMethod(joc,JMPIjvm::jv.OperationContextUnassociate);
8653 mark.hamzy      1.43 
8654                                     JMPIjvm::checkException(env);
8655                                  }
8656 mark.hamzy      1.25             break;
8657 carolann.graves 1.21         }
8658                      
8659 mark.hamzy      1.25         case METHOD_UNKNOWN:
8660                              {
8661 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8662                                      "handleCreateSubscriptionRequest: Unknown method provider!");
8663 mark.hamzy      1.25             break;
8664                              }
8665                              }
8666 schuur          1.1      }
8667                          HandlerCatch(handler);
8668 schuur          1.12 
8669 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
8670                      
8671 schuur          1.1      PEG_METHOD_EXIT();
8672                      
8673                          return(response);
8674                      }
8675                      
8676 marek           1.68 Message * JMPIProviderManager::handleDeleteSubscriptionRequest(
8677                          const Message * message) throw()
8678 schuur          1.1  {
8679 marek           1.68     PEG_METHOD_ENTER(
8680                              TRC_PROVIDERMANAGER,
8681                              "JMPIProviderManager::handleDeleteSubscriptionRequest");
8682 schuur          1.1  
8683 mark.hamzy      1.23     HandlerIntroInd(DeleteSubscription,message,request,response,handler);
8684                      
8685 mark.hamzy      1.25     typedef enum {
8686                             METHOD_UNKNOWN = 0,
8687 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
8688                             METHOD_EVENTPROVIDER2,
8689 mark.hamzy      1.25     } METHOD_VERSION;
8690 mark.hamzy      1.44     METHOD_VERSION           eMethodFound = METHOD_UNKNOWN;
8691                          JNIEnv                  *env          = NULL;
8692                          bool                     fFreePrec    = false;
8693                          indProvRecord           *prec         = NULL;
8694                          indSelectRecord         *srec         = NULL;
8695 mark.hamzy      1.25 
8696 schuur          1.1      try {
8697 mark.hamzy      1.44         String              fileName,
8698                                                  providerName,
8699 mark.hamzy      1.25                             providerLocation;
8700                              CIMInstance         req_provider,
8701                                                  req_providerModule;
8702 marek           1.68         ProviderIdContainer pidc = (ProviderIdContainer)
8703                                                             request->operationContext.get(
8704                                                                 ProviderIdContainer::NAME);
8705 mark.hamzy      1.25 
8706 mark.hamzy      1.44         req_provider       = pidc.getProvider ();
8707                              req_providerModule = pidc.getModule ();
8708                      
8709                              LocateIndicationProviderNames (req_provider,
8710                                                             req_providerModule,
8711                                                             providerName,
8712                                                             providerLocation);
8713                      
8714                              fileName = resolveFileName (providerLocation);
8715                      
8716 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL3,
8717                                   "handleDeleteSubscriptionRequest: "
8718                                       "name space = %s provider name = %s provider filename = %s",
8719                                   (const char*)request->nameSpace.getString().getCString(),
8720 kumpf           1.77              (const char*)providerName.getCString(),
8721 thilo.boehm     1.70              (const char*)fileName.getCString()
8722 thilo.boehm     1.69              ));
8723 se.gupta        1.9  
8724 mark.hamzy      1.44         // get cached or load new provider module
8725 marek           1.68         JMPIProvider::OpProviderHolder ph = providerManager.getProvider(
8726                                                                      fileName,
8727                                                                      providerName,
8728                                                                      String::EMPTY);
8729 schuur          1.1  
8730 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
8731                      
8732                              {
8733                                 AutoMutex lock (mutexProvTab);
8734                      
8735                                 provTab.lookup (providerName, prec);
8736                              }
8737 schuur          1.1  
8738 mark.hamzy      1.44         {
8739                                 AutoMutex lock (prec->mutex);
8740 mark.hamzy      1.23 
8741 mark.hamzy      1.44            if (--prec->count <= 0)
8742                                 {
8743 thilo.boehm     1.69                PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8744                                          "handleDeleteSubscriptionRequest: "
8745                                             "Removing %s from provTab.",
8746                                          (const char*)providerName.getCString()));
8747 schuur          1.1  
8748 mark.hamzy      1.44                provTab.remove (providerName);
8749 schuur          1.1  
8750 mark.hamzy      1.44                fFreePrec = true;
8751                                 }
8752                              }
8753 mark.hamzy      1.25 
8754                              {
8755 marek           1.68            CIMObjectPath sPath = request->subscriptionInstance.getPath();
8756 dave.sudlik     1.62            Array<CIMKeyBinding> kb;
8757                      
8758                                 // Technically we only need Name and Handler for uniqueness
8759                                 kb = sPath.getKeyBindings ();
8760 mark.hamzy      1.44 
8761 dave.sudlik     1.62            // Add an entry for every provider.
8762                                 kb.append (CIMKeyBinding ("Provider",
8763                                                           pr.getName (),
8764                                                           CIMKeyBinding::STRING));
8765                      
8766                                 sPath.setKeyBindings (kb);
8767 schuur          1.1  
8768 mark.hamzy      1.44            String sPathString = sPath.toString ();
8769 mark.hamzy      1.25 
8770 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
8771 schuur          1.1  
8772 thilo.boehm     1.69            PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8773                                      "handleDeleteSubscriptionRequest: "
8774                                         "Removing %s from selxTab.",
8775                                      (const char*)sPathString.getCString()));
8776 konrad.r        1.22 
8777 dave.sudlik     1.62            if (!selxTab.lookup (sPathString, srec))
8778                                 {
8779                                     PEGASUS_ASSERT(0);
8780                                 }
8781 schuur          1.1  
8782 thilo.boehm     1.69            PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8783                                       "handleDeleteSubscriptionRequest: "
8784 thilo.boehm     1.70                      "For selxTab %s , srec = %p, qContext = %p",
8785 thilo.boehm     1.69                  (const char*)sPathString.getCString(),
8786 thilo.boehm     1.70                  srec,srec->qContext));
8787 schuur          1.1  
8788 mark.hamzy      1.44            selxTab.remove (sPathString);
8789                              }
8790 schuur          1.1  
8791 thilo.boehm     1.69         PEG_TRACE((TRC_PROVIDERMANAGER,Tracer::LEVEL3,
8792                                  "handleDeleteSubscriptionRequest: "
8793                                      "Calling provider: %s",
8794                                  (const char*)pr.getName().getCString()));
8795 schuur          1.1  
8796 mark.hamzy      1.25         JvmVector *jv = 0;
8797                      
8798                              env = JMPIjvm::attachThread(&jv);
8799                      
8800 mark.hamzy      1.37         if (!env)
8801                              {
8802 thilo.boehm     1.69             PEG_TRACE_CSTRING( TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8803                                      "handleDeleteSubscriptionRequest: "
8804                                          "Could not initialize the JVM (Java Virtual Machine) "
8805                                          "runtime environment.");
8806                      
8807 mark.hamzy      1.37             PEG_METHOD_EXIT();
8808                      
8809 marek           1.68             throw PEGASUS_CIM_EXCEPTION_L(
8810                                      CIM_ERR_FAILED,
8811                                      MessageLoaderParms(
8812 thilo.boehm     1.69                     "ProviderManager.JMPI.JMPIProviderManager.INIT_JVM_FAILED",
8813 marek           1.68                     "Could not initialize the JVM (Java Virtual Machine) "
8814                                              "runtime environment."));
8815 mark.hamzy      1.37         }
8816                      
8817 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
8818                      
8819 mark.hamzy      1.43         jmethodID id               = NULL;
8820                              String    interfaceType;
8821                              String    interfaceVersion;
8822                      
8823 marek           1.68         getInterfaceType(
8824                                  request->operationContext.get(ProviderIdContainer::NAME),
8825                                  interfaceType,
8826                                  interfaceVersion);
8827 mark.hamzy      1.43 
8828                              if (interfaceType == "JMPI")
8829                              {
8830 marek           1.68            id = env->GetMethodID(
8831                                          (jclass)pr.jProviderClass,
8832                                          "deActivateFilter",
8833                                          "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8834                                              "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
8835 mark.hamzy      1.43 
8836                                 if (id != NULL)
8837                                 {
8838                                     eMethodFound = METHOD_EVENTPROVIDER;
8839 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8840                                         "handleDeleteSubscriptionRequest: "
8841                                             "Found METHOD_EVENTPROVIDER.");
8842 mark.hamzy      1.43            }
8843                              }
8844                              else if (interfaceType == "JMPIExperimental")
8845                              {
8846 marek           1.68            id = env->GetMethodID(
8847                                          (jclass)pr.jProviderClass,
8848                                          "deActivateFilter",
8849                                          "(Lorg/pegasus/jmpi/OperationContext;"
8850                                               "Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
8851                                                   "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
8852 mark.hamzy      1.25 
8853 mark.hamzy      1.43            if (id != NULL)
8854                                 {
8855                                     eMethodFound = METHOD_EVENTPROVIDER2;
8856 thilo.boehm     1.69                PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
8857                                         "handleDeleteSubscriptionRequest: "
8858                                             "Found METHOD_EVENTPROVIDER2.");
8859 mark.hamzy      1.43            }
8860                              }
8861 schuur          1.12 
8862 mark.hamzy      1.43         if (id == NULL)
8863 mark.hamzy      1.25         {
8864 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8865                                      "handleDeleteSubscriptionRequest: No method provider found!");
8866 mark.hamzy      1.43 
8867                                 PEG_METHOD_EXIT();
8868                      
8869 marek           1.68            throw PEGASUS_CIM_EXCEPTION_L(
8870                                     CIM_ERR_FAILED,
8871                                     MessageLoaderParms(
8872 thilo.boehm     1.69                    "ProviderManager.JMPI.JMPIProviderManager.METHOD_NOT_FOUND",
8873 marek           1.68                    "Could not find a method for the provider based on"
8874                                              " InterfaceType."));
8875 mark.hamzy      1.25         }
8876 mark.hamzy      1.23 
8877                              JMPIjvm::checkException(env);
8878                      
8879 mark.hamzy      1.25         switch (eMethodFound)
8880                              {
8881 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
8882                              {
8883 marek           1.68             WQLSelectStatement *stmt = newSelectExp(
8884                                                                 srec->query,
8885                                                                 srec->queryLanguage);
8886                                  jlong jStmtRef = DEBUG_ConvertCToJava(
8887                                                       WQLSelectStatement *,
8888                                                       jlong,
8889                                                       stmt);
8890                                  jobject jSelectExp = env->NewObject(
8891                                                           jv->SelectExpClassRef,
8892                                                           jv->SelectExpNewJ,jStmtRef);
8893 mark.hamzy      1.43 
8894                                  JMPIjvm::checkException(env);
8895                      
8896 marek           1.68             jstring jType = env->NewStringUTF(
8897                                                      request->nameSpace.getString().getCString());
8898 mark.hamzy      1.43 
8899                                  JMPIjvm::checkException(env);
8900                      
8901 marek           1.68             CIMObjectPath *cop = new CIMObjectPath(
8902                                                           System::getHostName(),
8903                                                           request->nameSpace,
8904                                                           request->classNames[0]);
8905                                  jlong jcopRef = DEBUG_ConvertCToJava(CIMObjectPath*, jlong, cop);
8906                                  jobject jcop = env->NewObject(
8907                                                     jv->CIMObjectPathClassRef,
8908                                                     jv->CIMObjectPathNewJ,jcopRef);
8909 mark.hamzy      1.43 
8910                                  JMPIjvm::checkException(env);
8911                      
8912 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8913                      
8914 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
8915                                                       id,
8916 mark.hamzy      1.52                                  jSelectExp,
8917 mark.hamzy      1.44                                  jType,
8918                                                       jcop,
8919                                                       (jboolean)fFreePrec);
8920 mark.hamzy      1.43 
8921                                  JMPIjvm::checkException(env);
8922                                  break;
8923                              }
8924                      
8925                              case METHOD_EVENTPROVIDER2:
8926 mark.hamzy      1.25         {
8927 marek           1.68             jlong jocRef = DEBUG_ConvertCToJava(
8928                                                     OperationContext*,
8929                                                     jlong,
8930                                                     &request->operationContext);
8931                                  jobject joc = env->NewObject(
8932                                                    jv->OperationContextClassRef,
8933                                                    jv->OperationContextNewJ,jocRef);
8934 mark.hamzy      1.43 
8935 mark.hamzy      1.52             WQLSelectStatement *stmt       = newSelectExp (srec->query,
8936                                                                                 srec->queryLanguage);
8937 marek           1.68             jlong jStmtRef   = DEBUG_ConvertCToJava(
8938                                                         WQLSelectStatement *,
8939                                                         jlong,
8940                                                         stmt);
8941                                  jobject jSelectExp = env->NewObject(
8942                                                           jv->SelectExpClassRef,
8943                                                           jv->SelectExpNewJ,
8944                                                           jStmtRef);
8945 mark.hamzy      1.25 
8946                                  JMPIjvm::checkException(env);
8947                      
8948 marek           1.68             jstring jType = env->NewStringUTF(
8949                                                      request->nameSpace.getString().getCString());
8950 schuur          1.12 
8951 mark.hamzy      1.25             JMPIjvm::checkException(env);
8952 schuur          1.12 
8953 marek           1.68             CIMObjectPath *cop = new CIMObjectPath (System::getHostName(),
8954                                                                          request->nameSpace,
8955                                                                          request->classNames[0]);
8956                                  jlong jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jlong, cop);
8957                                  jobject jcop = env->NewObject(
8958                                                     jv->CIMObjectPathClassRef,
8959                                                     jv->CIMObjectPathNewJ,jcopRef);
8960 schuur          1.1  
8961 mark.hamzy      1.25             JMPIjvm::checkException(env);
8962 schuur          1.1  
8963 kumpf           1.55             StatProviderTimeMeasurement providerTime(response);
8964                      
8965 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
8966                                                       id,
8967                                                       joc,
8968 mark.hamzy      1.52                                  jSelectExp,
8969 mark.hamzy      1.44                                  jType,
8970                                                       jcop,
8971                                                       (jboolean)fFreePrec);
8972 schuur          1.1  
8973 mark.hamzy      1.25             JMPIjvm::checkException(env);
8974 schuur          1.1  
8975 mark.hamzy      1.43             if (joc)
8976                                  {
8977 marek           1.68                env->CallVoidMethod(
8978                                         joc,
8979                                         JMPIjvm::jv.OperationContextUnassociate);
8980 mark.hamzy      1.43 
8981                                     JMPIjvm::checkException(env);
8982                                  }
8983 mark.hamzy      1.25             break;
8984                              }
8985 schuur          1.12 
8986 mark.hamzy      1.25         case METHOD_UNKNOWN:
8987                              {
8988 thilo.boehm     1.69             PEG_TRACE_CSTRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
8989                                      "handleDeleteSubscriptionRequest: Unknown method provider!");
8990 mark.hamzy      1.25             break;
8991                              }
8992                              }
8993 mark.hamzy      1.44 
8994                              //
8995                              //  Decrement count of current subscriptions for this provider
8996                              //
8997                              pr.decrementSubscriptionsAndTestIfZero ();
8998 schuur          1.1      }
8999                          HandlerCatch(handler);
9000 schuur          1.12 
9001 mark.hamzy      1.44     if (srec)
9002                          {
9003                             delete srec->qContext;
9004                          }
9005                          delete srec;
9006                      
9007                          if (fFreePrec)
9008                          {
9009                             delete prec->ctx;
9010                             delete prec->handler;
9011                             delete prec;
9012                          }
9013                      
9014 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
9015                      
9016 schuur          1.1      PEG_METHOD_EXIT();
9017                      
9018                          return(response);
9019                      }
9020                      
9021 marek           1.68 Message * JMPIProviderManager::handleDisableModuleRequest(
9022                          const Message * message) throw()
9023 schuur          1.1  {
9024 marek           1.68     PEG_METHOD_ENTER(
9025                              TRC_PROVIDERMANAGER,
9026                              "JMPIProviderManager::handleDisableModuleRequest");
9027 schuur          1.1  
9028                          CIMDisableModuleRequestMessage * request =
9029 marek           1.68         dynamic_cast<CIMDisableModuleRequestMessage *>
9030                              (const_cast<Message *>(message));
9031 schuur          1.1  
9032                          PEGASUS_ASSERT(request != 0);
9033                      
9034                          // get provider module name
9035                          String moduleName;
9036                          CIMInstance mInstance = request->providerModule;
9037 marek           1.73     Uint32 pos = mInstance.findProperty(PEGASUS_PROPERTYNAME_NAME);
9038 schuur          1.1  
9039                          if(pos != PEG_NOT_FOUND)
9040                          {
9041                              mInstance.getProperty(pos).getValue().get(moduleName);
9042                          }
9043                      
9044                          Boolean disableProviderOnly = request->disableProviderOnly;
9045                      
9046                          Array<Uint16> operationalStatus;
9047 kumpf           1.2      // Assume success.
9048 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
9049 schuur          1.1  
9050 kumpf           1.2      //
9051 schuur          1.1      // Unload providers
9052 kumpf           1.2      //
9053 schuur          1.1      Array<CIMInstance> _pInstances = request->providers;
9054                      
9055 kumpf           1.67     CIMDisableModuleResponseMessage* response =
9056                              dynamic_cast<CIMDisableModuleResponseMessage*>(
9057                                  request->buildResponse());
9058 schuur          1.1      PEGASUS_ASSERT(response != 0);
9059 kumpf           1.67     response->operationalStatus = operationalStatus;
9060 schuur          1.1  
9061                          PEG_METHOD_EXIT();
9062                      
9063                          return(response);
9064                      }
9065                      
9066 marek           1.68 Message * JMPIProviderManager::handleEnableModuleRequest(
9067                          const Message * message) throw()
9068 schuur          1.1  {
9069 marek           1.68     PEG_METHOD_ENTER(
9070                              TRC_PROVIDERMANAGER,
9071                              "JMPIProviderManager::handleEnableModuleRequest");
9072 schuur          1.1  
9073                          CIMEnableModuleRequestMessage * request =
9074 marek           1.68         dynamic_cast<CIMEnableModuleRequestMessage *>
9075                                  (const_cast<Message *>(message));
9076 schuur          1.1  
9077                          PEGASUS_ASSERT(request != 0);
9078                      
9079                          Array<Uint16> operationalStatus;
9080 kumpf           1.67     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
9081 schuur          1.1  
9082 kumpf           1.67     CIMEnableModuleResponseMessage* response =
9083                              dynamic_cast<CIMEnableModuleResponseMessage*>(
9084                                  request->buildResponse());
9085 schuur          1.1      PEGASUS_ASSERT(response != 0);
9086 kumpf           1.67     response->operationalStatus = operationalStatus;
9087 schuur          1.1  
9088                          PEG_METHOD_EXIT();
9089                      
9090                          return(response);
9091                      }
9092                      
9093 marek           1.68 Message * JMPIProviderManager::handleStopAllProvidersRequest(
9094                          const Message * message) throw()
9095 schuur          1.1  {
9096 marek           1.68     PEG_METHOD_ENTER(
9097                              TRC_PROVIDERMANAGER,
9098                              "JMPIProviderManager::handleStopAllProvidersRequest");
9099 schuur          1.1  
9100                          CIMStopAllProvidersRequestMessage * request =
9101 marek           1.68         dynamic_cast<CIMStopAllProvidersRequestMessage *>
9102                                  (const_cast<Message *>(message));
9103 schuur          1.1  
9104                          PEGASUS_ASSERT(request != 0);
9105                      
9106 kumpf           1.67     CIMStopAllProvidersResponseMessage* response =
9107                              dynamic_cast<CIMStopAllProvidersResponseMessage*>(
9108                                  request->buildResponse());
9109 schuur          1.1      PEGASUS_ASSERT(response != 0);
9110                      
9111                          // tell the provider manager to shutdown all the providers
9112                          providerManager.shutdownAllProviders();
9113                      
9114                          PEG_METHOD_EXIT();
9115                      
9116                          return(response);
9117                      }
9118                      
9119 venkat.puvvada  1.79 Message* JMPIProviderManager::handleIndicationServiceDisabledRequest(
9120                          Message* message)
9121                      {
9122                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
9123                              "JMPIProviderManager::_handleIndicationServiceDisabledRequest");
9124                      
9125                          CIMIndicationServiceDisabledRequestMessage* request =
9126                              dynamic_cast<CIMIndicationServiceDisabledRequestMessage*>(message);
9127                          PEGASUS_ASSERT(request != 0);
9128                      
9129                          CIMIndicationServiceDisabledResponseMessage* response =
9130                              dynamic_cast<CIMIndicationServiceDisabledResponseMessage*>(
9131                                  request->buildResponse());
9132                          PEGASUS_ASSERT(response != 0);
9133                      
9134                          _subscriptionInitComplete = false;
9135                      
9136                          PEG_METHOD_EXIT ();
9137                          return response;
9138                      }
9139                      
9140 marek           1.68 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest(
9141                          const Message * message)
9142 carolann.graves 1.21 {
9143                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
9144                           "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
9145                      
9146                          CIMSubscriptionInitCompleteRequestMessage * request =
9147                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
9148                                  (const_cast <Message *> (message));
9149                      
9150                          PEGASUS_ASSERT (request != 0);
9151                      
9152                          CIMSubscriptionInitCompleteResponseMessage * response =
9153                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
9154                                  (request->buildResponse ());
9155                      
9156                          PEGASUS_ASSERT (response != 0);
9157                      
9158                          //
9159                          //  Set indicator
9160                          //
9161                          _subscriptionInitComplete = true;
9162                      
9163 carolann.graves 1.21     //
9164                          //  For each provider that has at least one subscription, call
9165                          //  provider's enableIndications method
9166                          //
9167                          Array <JMPIProvider *> enableProviders;
9168 mark.hamzy      1.44 
9169 carolann.graves 1.21     enableProviders = providerManager.getIndicationProvidersToEnable ();
9170                      
9171                          Uint32 numProviders = enableProviders.size ();
9172 mark.hamzy      1.44 
9173 thilo.boehm     1.69     PEG_TRACE((TRC_PROVIDERMANAGER, Tracer::LEVEL4,
9174                              "handleSubscriptionInitCompleteRequest: numProviders = %d ",
9175                              numProviders));
9176 carolann.graves 1.21 
9177                          PEG_METHOD_EXIT ();
9178                          return (response);
9179                      }
9180                      
9181 marek           1.68 Message * JMPIProviderManager::handleUnsupportedRequest(
9182                          const Message * message) throw()
9183 schuur          1.1  {
9184 marek           1.68     PEG_METHOD_ENTER(
9185                              TRC_PROVIDERMANAGER,
9186                              "JMPIProviderManager::handleUnsupportedRequest");
9187 mark.hamzy      1.23 
9188 konrad.r        1.16     CIMRequestMessage* request =
9189                              dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
9190                          PEGASUS_ASSERT(request != 0 );
9191                      
9192                          CIMResponseMessage* response = request->buildResponse();
9193                          response->cimException =
9194                              PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
9195 schuur          1.1  
9196                          PEG_METHOD_EXIT();
9197 konrad.r        1.16     return response;
9198 schuur          1.1  }
9199                      
9200 kumpf           1.2  ProviderName JMPIProviderManager::_resolveProviderName(
9201                          const ProviderIdContainer & providerId)
9202 schuur          1.1  {
9203 kumpf           1.2      String providerName;
9204                          String fileName;
9205 dmitry.mikulin  1.63     String moduleName;
9206 kumpf           1.2      CIMValue genericValue;
9207                      
9208 dmitry.mikulin  1.63     genericValue = providerId.getModule().getProperty(
9209 marek           1.73         providerId.getModule().findProperty(
9210                                  PEGASUS_PROPERTYNAME_NAME)).getValue();
9211 dmitry.mikulin  1.63     genericValue.get(moduleName);
9212                      
9213 kumpf           1.2      genericValue = providerId.getProvider().getProperty(
9214 marek           1.73         providerId.getProvider().findProperty(
9215                                  PEGASUS_PROPERTYNAME_NAME)).getValue();
9216 kumpf           1.2      genericValue.get(providerName);
9217                      
9218                          genericValue = providerId.getModule().getProperty(
9219                              providerId.getModule().findProperty("Location")).getValue();
9220                          genericValue.get(fileName);
9221                          fileName = resolveFileName(fileName);
9222                      
9223 dmitry.mikulin  1.63     return ProviderName(moduleName, providerName, fileName);
9224 schuur          1.1  }
9225                      
9226                      String JMPIProviderManager::resolveFileName(String fileName)
9227                      {
9228 marek           1.68     String name = ConfigManager::getHomedPath(
9229                              ConfigManager::getInstance()->getCurrentValue("providerDir"));
9230 marek           1.54     // physfilename = everything up to the delimiter pointing at class start
9231                          // in case there is no delimiter anymore, it takes the entire filename
9232                          String physfilename = fileName.subString(0, fileName.find(":"));
9233                          // look in all(multiple) homed pathes for the physical file
9234                          name = FileSystem::getAbsoluteFileName(name, physfilename);
9235                          // construct back the fully specified jar:<classname> provider name
9236                          name = FileSystem::extractFilePath(name) + fileName;
9237 schuur          1.1      return name;
9238                      }
9239                      
9240                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2