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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2