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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2