(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                                  JMPIjvm::checkException(env);
3101                      
3102                                  jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3103                      
3104                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3105                      
3106                                  JMPIjvm::checkException(env);
3107                      
3108 mark.hamzy      1.45             jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3109 mark.hamzy      1.43                                                                    id,
3110                                                                                         joc,
3111                                                                                         jcop,
3112                                                                                         jCc,
3113                                                                                         jquery,
3114                                                                                         jqueryLanguage);
3115                      
3116                                  JMPIjvm::checkException(env);
3117                      
3118                                  STAT_PMS_PROVIDEREND;
3119                      
3120                                  if (joc)
3121                                  {
3122                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3123                      
3124                                     JMPIjvm::checkException(env);
3125                                  }
3126                      
3127 mark.hamzy      1.36             handler.processing();
3128 mark.hamzy      1.45             if (jAr) {
3129                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3130 mark.hamzy      1.36                     JMPIjvm::checkException(env);
3131                      
3132 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3133 mark.hamzy      1.36 
3134                                          JMPIjvm::checkException(env);
3135                      
3136                                          jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3137                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3138                      
3139                                          JMPIjvm::checkException(env);
3140                      
3141                                          handler.deliver(*ciRet);
3142                                      }
3143                                  }
3144                                  handler.complete();
3145                                  break;
3146                              }
3147                      
3148 mark.hamzy      1.43         case METHOD_INSTANCEPROVIDER:
3149 mark.hamzy      1.25         {
3150 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3151 mark.hamzy      1.25             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3152                      
3153                                  JMPIjvm::checkException(env);
3154                      
3155                                  jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
3156                                  jstring jquery         = env->NewStringUTF(request->query.getCString());
3157                      
3158 mark.hamzy      1.40             CIMClass cls;
3159                      
3160                                  try
3161                                  {
3162                                     DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3163                                     AutoMutex lock (pr._cimomMutex);
3164                      
3165                                     cls = pr._cimom_handle->getClass(context,
3166                                                                      request->nameSpace,
3167                                                                      request->className,
3168                                                                      false,
3169                                                                      true,
3170                                                                      true,
3171                                                                      CIMPropertyList());
3172                                     DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
3173                                  }
3174                                  catch (CIMException e)
3175                                  {
3176                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3177                                     throw;
3178                                  }
3179 mark.hamzy      1.40 
3180 mark.hamzy      1.27             CIMClass *pcls = new CIMClass (cls);
3181                      
3182 mark.hamzy      1.25             JMPIjvm::checkException(env);
3183                      
3184 mark.hamzy      1.27             jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
3185 mark.hamzy      1.25 
3186                                  jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
3187                      
3188                                  JMPIjvm::checkException(env);
3189                      
3190                                  jint jql = 0; // @BUG - how to convert?
3191                      
3192                                  jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3193                                                                                          id,
3194                                                                                          jcop,
3195                                                                                          jquery,
3196                                                                                          jql,
3197                                                                                          jCc);
3198                      
3199                                  JMPIjvm::checkException(env);
3200                      
3201                                  STAT_PMS_PROVIDEREND;
3202                      
3203                                  handler.processing();
3204                                  if (jVec) {
3205                                      for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3206 mark.hamzy      1.25                     JMPIjvm::checkException(env);
3207                      
3208 mark.hamzy      1.29                     jobject jciRet = env->GetObjectArrayElement(jVec,i);
3209                      
3210 mark.hamzy      1.25                     JMPIjvm::checkException(env);
3211                      
3212 mark.hamzy      1.29                     jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3213                                          CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3214 mark.hamzy      1.25 
3215                                          JMPIjvm::checkException(env);
3216                      
3217 mark.hamzy      1.29                     handler.deliver(*ciRet);
3218 mark.hamzy      1.25                 }
3219                                  }
3220                                  handler.complete();
3221                                  break;
3222                              }
3223                      
3224                              case METHOD_UNKNOWN:
3225                              {
3226                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: should not be here!"<<PEGASUS_STD(endl));
3227                                  break;
3228                              }
3229                              }
3230 schuur          1.1      }
3231                          HandlerCatch(handler);
3232 mark.hamzy      1.23 
3233 schuur          1.1      if (env) JMPIjvm::detachThread();
3234 mark.hamzy      1.23 
3235 schuur          1.1      PEG_METHOD_EXIT();
3236                      
3237 w.white         1.31     STAT_COPYDISPATCHER
3238                      
3239 schuur          1.1      return(response);
3240                      }
3241                      
3242                      Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
3243                      {
3244 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
3245                      
3246                          HandlerIntro(Associators,message,request,response,handler,Array<CIMObject>());
3247 schuur          1.1  
3248 mark.hamzy      1.24     typedef enum {
3249                             METHOD_UNKNOWN = 0,
3250 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
3251                             METHOD_CIMASSOCIATORPROVIDER2,
3252                             METHOD_ASSOCIATORPROVIDER,
3253                             METHOD_ASSOCIATORPROVIDER2,
3254 mark.hamzy      1.24     } METHOD_VERSION;
3255                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3256                          JNIEnv          *env           = NULL;
3257 schuur          1.13 
3258 schuur          1.1      try {
3259                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3260                                  "JMPIProviderManager::handleAssociatorsRequest - Host name: $0  Name space: $1  Class name: $2",
3261                                  System::getHostName(),
3262                                  request->nameSpace.getString(),
3263                                  request->objectName.getClassName().getString());
3264                      
3265 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));
3266 mark.hamzy      1.23 
3267 schuur          1.1          // make target object path
3268 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3269                                                                             request->nameSpace,
3270                                                                             request->objectName.getClassName(),
3271                                                                             request->objectName.getKeyBindings());
3272                              CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
3273                                                                             request->nameSpace,
3274                                                                             request->assocClass.getString());
3275 schuur          1.1  
3276                              // resolve provider name
3277 kumpf           1.2          ProviderName name = _resolveProviderName(
3278                                  request->operationContext.get(ProviderIdContainer::NAME));
3279 schuur          1.1  
3280                              // get cached or load new provider module
3281 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3282                                                                                               name.getLogicalName(),
3283                                                                                               String::EMPTY);
3284 schuur          1.1  
3285 mark.hamzy      1.24         // convert arguments
3286 schuur          1.1          OperationContext context;
3287                      
3288 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
3289                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3290                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3291 schuur          1.1  
3292                              // forward request
3293 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
3294                      
3295                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
3296 schuur          1.1  
3297 mark.hamzy      1.24         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
3298 schuur          1.1  
3299 mark.hamzy      1.24         JvmVector *jv = 0;
3300 schuur          1.1  
3301 mark.hamzy      1.24         env = JMPIjvm::attachThread(&jv);
3302 schuur          1.1  
3303 mark.hamzy      1.37         if (!env)
3304                              {
3305                                  PEG_METHOD_EXIT();
3306                      
3307                                  STAT_COPYDISPATCHER
3308                      
3309                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3310                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3311                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3312                              }
3313                      
3314 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
3315                      
3316                              STAT_GETSTARTTIME;
3317                      
3318 mark.hamzy      1.43         jmethodID id               = NULL;
3319                              String    interfaceType;
3320                              String    interfaceVersion;
3321                      
3322                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3323                                                interfaceType,
3324                                                interfaceVersion);
3325                      
3326                              if (interfaceType == "JMPI")
3327                              {
3328                                 // public java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
3329                                 //                                      org.pegasus.jmpi.CIMObjectPath pathName,
3330                                 //                                      java.lang.String               resultClass,
3331                                 //                                      java.lang.String               role,
3332                                 //                                      java.lang.String               resultRole,
3333                                 //                                      boolean                        includeQualifiers,
3334                                 //                                      boolean                        includeClassOrigin,
3335                                 //                                      java.lang.String[]             propertyList)
3336                                 //        throws org.pegasus.jmpi.CIMException
3337                                 //
3338                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3339 mark.hamzy      1.43                                  "associators",
3340                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
3341 mark.hamzy      1.24 
3342 mark.hamzy      1.43            if (id != NULL)
3343                                 {
3344                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
3345                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3346                                 }
3347                      
3348                                 if (id == NULL)
3349                                 {
3350                                     env->ExceptionClear();
3351 mark.hamzy      1.24 
3352 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.CIMObjectPath assocName,
3353                                     //                                                    org.pegasus.jmpi.CIMObjectPath pathName,
3354                                     //                                                    java.lang.String               resultClass,
3355                                     //                                                    java.lang.String               role,
3356                                     //                                                    java.lang.String               resultRole,
3357                                     //                                                    boolean                        includeQualifiers,
3358                                     //                                                    boolean                        includeClassOrigin,
3359                                     //                                                    java.lang.String[]             propertyList)
3360                                     //        throws org.pegasus.jmpi.CIMException
3361                                     //
3362                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3363                                                           "associators",
3364                                                           "(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;");
3365                      
3366                                     if (id != NULL)
3367                                     {
3368                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3369                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3370                                     }
3371                                 }
3372                              }
3373 mark.hamzy      1.43         else if (interfaceType == "JMPIExperimental")
3374 mark.hamzy      1.24         {
3375 mark.hamzy      1.43            // public java.util.Vector associators (org.pegasus.jmpi.OperationContext oc,
3376                                 //                                      org.pegasus.jmpi.CIMObjectPath    assocName,
3377                                 //                                      org.pegasus.jmpi.CIMObjectPath    pathName,
3378                                 //                                      java.lang.String                  resultClass,
3379                                 //                                      java.lang.String                  role,
3380                                 //                                      java.lang.String                  resultRole,
3381                                 //                                      boolean                           includeQualifiers,
3382                                 //                                      boolean                           includeClassOrigin,
3383                                 //                                      java.lang.String[]                propertyList)
3384                                 //        throws org.pegasus.jmpi.CIMException
3385                                 //
3386                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3387                                                       "associators",
3388                                                       "(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;");
3389 schuur          1.12 
3390 mark.hamzy      1.43            if (id != NULL)
3391                                 {
3392                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3393                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3394                                 }
3395 mark.hamzy      1.24 
3396 mark.hamzy      1.43            if (id == NULL)
3397                                 {
3398                                     env->ExceptionClear();
3399 mark.hamzy      1.24 
3400 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMInstance[] associators (org.pegasus.jmpi.OperationContext oc,
3401                                     //                                                    org.pegasus.jmpi.CIMObjectPath assocName,
3402                                     //                                                    org.pegasus.jmpi.CIMObjectPath pathName,
3403                                     //                                                    java.lang.String               resultClass,
3404                                     //                                                    java.lang.String               role,
3405                                     //                                                    java.lang.String               resultRole,
3406                                     //                                                    boolean                        includeQualifiers,
3407                                     //                                                    boolean                        includeClassOrigin,
3408                                     //                                                    java.lang.String[]             propertyList)
3409                                     //        throws org.pegasus.jmpi.CIMException
3410                                     //
3411                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3412                                                           "associators",
3413                                                           "(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;");
3414                      
3415                                     if (id != NULL)
3416                                     {
3417                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
3418                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3419                                     }
3420                                 }
3421 mark.hamzy      1.24         }
3422                      
3423                              if (id == NULL)
3424                              {
3425                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
3426 mark.hamzy      1.43 
3427                                  PEG_METHOD_EXIT();
3428                      
3429                                  STAT_COPYDISPATCHER
3430                      
3431                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3432                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
3433                                                                                     "Could not find a method for the provider based on InterfaceType."));
3434 mark.hamzy      1.23         }
3435 mark.hamzy      1.24 
3436 schuur          1.1          JMPIjvm::checkException(env);
3437                      
3438 mark.hamzy      1.24         switch (eMethodFound)
3439                              {
3440 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
3441 mark.hamzy      1.24         {
3442 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3443 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3444                      
3445                                  JMPIjvm::checkException(env);
3446                      
3447 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3448                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3449                      
3450                                  JMPIjvm::checkException(env);
3451                      
3452 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3453                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3454                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3455                      
3456                                  JMPIjvm::checkException(env);
3457                      
3458                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3459                      
3460 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
3461                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3462 mark.hamzy      1.49             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3463 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3464                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3465                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3466                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3467                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3468                      #endif
3469                      
3470 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3471 mark.hamzy      1.24                                                                   id,
3472                                                                                        jAssociationName,
3473 mark.hamzy      1.43                                                                   jPathName,
3474 mark.hamzy      1.24                                                                   jResultClass,
3475                                                                                        jRole,
3476                                                                                        jResultRole,
3477 mark.hamzy      1.36                                                                   JMPI_INCLUDE_QUALIFIERS,
3478                                                                                        request->includeClassOrigin,
3479 mark.hamzy      1.24                                                                   jPropertyList);
3480 mark.hamzy      1.25 
3481 mark.hamzy      1.23             JMPIjvm::checkException(env);
3482 schuur          1.13 
3483 mark.hamzy      1.23             STAT_PMS_PROVIDEREND;
3484 schuur          1.1  
3485 mark.hamzy      1.23             handler.processing();
3486 mark.hamzy      1.45             if (jAr) {
3487                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3488 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3489 schuur          1.1  
3490 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3491 mark.hamzy      1.24 
3492 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3493 schuur          1.13 
3494 mark.hamzy      1.29                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3495 schuur          1.13 
3496 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3497 schuur          1.13 
3498 mark.hamzy      1.29                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3499 mark.hamzy      1.40                     CIMClass             cls;
3500                      
3501                                          try
3502                                          {
3503                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3504                                             AutoMutex lock (pr._cimomMutex);
3505                      
3506                                             cls = pr._cimom_handle->getClass(context,
3507                                                                              request->nameSpace,
3508                                                                              ciRet->getClassName(),
3509                                                                              false,
3510                                                                              true,
3511                                                                              true,
3512                                                                              CIMPropertyList());
3513                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3514                                          }
3515                                          catch (CIMException e)
3516                                          {
3517                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3518                                             throw;
3519                                          }
3520 mark.hamzy      1.40 
3521 mark.hamzy      1.29                     const CIMObjectPath& op    = ciRet->getPath();
3522                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
3523 mark.hamzy      1.24 
3524 mark.hamzy      1.27                     JMPIjvm::checkException(env);
3525                      
3526 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
3527 mark.hamzy      1.29                     ciRet->setPath(iop);
3528 schuur          1.13 
3529 mark.hamzy      1.29                     handler.deliver(*ciRet);
3530 mark.hamzy      1.23                 }
3531                                  }
3532 mark.hamzy      1.24             handler.complete();
3533                                  break;
3534 mark.hamzy      1.23         }
3535 mark.hamzy      1.24 
3536 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER2:
3537 mark.hamzy      1.24         {
3538 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3539                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3540                      
3541 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3542 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3543                      
3544                                  JMPIjvm::checkException(env);
3545                      
3546 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3547 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3548                      
3549                                  JMPIjvm::checkException(env);
3550                      
3551 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3552                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3553                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3554                      
3555                                  JMPIjvm::checkException(env);
3556                      
3557                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3558                      
3559 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
3560                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3561 mark.hamzy      1.47             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3562 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3563                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3564                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3565                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3566                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3567                      #endif
3568                      
3569 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3570 mark.hamzy      1.43                                                                   id,
3571                                                                                        joc,
3572                                                                                        jAssociationName,
3573                                                                                        jPathName,
3574                                                                                        jResultClass,
3575                                                                                        jRole,
3576                                                                                        jResultRole,
3577                                                                                        JMPI_INCLUDE_QUALIFIERS,
3578                                                                                        request->includeClassOrigin,
3579                                                                                        jPropertyList);
3580 mark.hamzy      1.25 
3581 mark.hamzy      1.23             JMPIjvm::checkException(env);
3582                      
3583                                  STAT_PMS_PROVIDEREND;
3584                      
3585 mark.hamzy      1.43             if (joc)
3586                                  {
3587                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3588                      
3589                                     JMPIjvm::checkException(env);
3590                                  }
3591                      
3592 mark.hamzy      1.23             handler.processing();
3593 mark.hamzy      1.45             if (jAr) {
3594                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
3595 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3596                      
3597 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
3598 mark.hamzy      1.43 
3599 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3600                      
3601 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3602 mark.hamzy      1.24 
3603 mark.hamzy      1.23                     JMPIjvm::checkException(env);
3604                      
3605 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3606 mark.hamzy      1.40                     CIMClass             cls;
3607                      
3608                                          try
3609                                          {
3610                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3611                                             AutoMutex lock (pr._cimomMutex);
3612                      
3613                                             cls = pr._cimom_handle->getClass(context,
3614                                                                              request->nameSpace,
3615                                                                              ciRet->getClassName(),
3616                                                                              false,
3617                                                                              true,
3618                                                                              true,
3619                                                                              CIMPropertyList());
3620                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3621                                          }
3622                                          catch (CIMException e)
3623                                          {
3624                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3625                                             throw;
3626                                          }
3627 mark.hamzy      1.40 
3628 mark.hamzy      1.43                     const CIMObjectPath& op    = ciRet->getPath();
3629                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
3630 mark.hamzy      1.24 
3631 mark.hamzy      1.27                     JMPIjvm::checkException(env);
3632                      
3633 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
3634 mark.hamzy      1.29                     ciRet->setPath(iop);
3635 schuur          1.13 
3636 mark.hamzy      1.29                     handler.deliver(*ciRet);
3637 mark.hamzy      1.23                 }
3638                                  }
3639 mark.hamzy      1.24             handler.complete();
3640                                  break;
3641                              }
3642                      
3643 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
3644 mark.hamzy      1.24         {
3645 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
3646                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
3647 schuur          1.13 
3648 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3649                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3650 schuur          1.13 
3651 mark.hamzy      1.43             JMPIjvm::checkException(env);
3652 schuur          1.1  
3653 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3654                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3655 w.white         1.31 
3656 mark.hamzy      1.43             JMPIjvm::checkException(env);
3657 schuur          1.13 
3658 mark.hamzy      1.43             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3659                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3660                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3661 mark.hamzy      1.23 
3662 mark.hamzy      1.43             JMPIjvm::checkException(env);
3663 schuur          1.1  
3664 mark.hamzy      1.43             jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3665 schuur          1.13 
3666 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
3667                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3668 mark.hamzy      1.49             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3669 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3670                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3671                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3672                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3673                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3674                      #endif
3675 schuur          1.1  
3676 mark.hamzy      1.43             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3677                                                                                        id,
3678                                                                                        joc,
3679                                                                                        jAssociationName,
3680                                                                                        jPathName,
3681                                                                                        jResultClass,
3682                                                                                        jRole,
3683                                                                                        jResultRole,
3684                                                                                        JMPI_INCLUDE_QUALIFIERS,
3685                                                                                        request->includeClassOrigin,
3686                                                                                        jPropertyList);
3687 mark.hamzy      1.23 
3688 mark.hamzy      1.43             JMPIjvm::checkException(env);
3689 mark.hamzy      1.23 
3690 mark.hamzy      1.43             STAT_PMS_PROVIDEREND;
3691 schuur          1.1  
3692 mark.hamzy      1.43             if (joc)
3693                                  {
3694                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
3695 schuur          1.1  
3696 mark.hamzy      1.43                JMPIjvm::checkException(env);
3697                                  }
3698 schuur          1.1  
3699 mark.hamzy      1.43             handler.processing();
3700                                  if (jVec) {
3701 mark.hamzy      1.45                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3702 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3703 schuur          1.1  
3704 mark.hamzy      1.45                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3705 schuur          1.1  
3706 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3707 schuur          1.1  
3708 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3709 schuur          1.1  
3710 mark.hamzy      1.43                     JMPIjvm::checkException(env);
3711 mark.hamzy      1.24 
3712 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3713                                          CIMClass             cls;
3714 schuur          1.1  
3715 mark.hamzy      1.43                     try
3716                                          {
3717                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3718                                             AutoMutex lock (pr._cimomMutex);
3719                      
3720                                             cls = pr._cimom_handle->getClass(context,
3721                                                                              request->nameSpace,
3722                                                                              ciRet->getClassName(),
3723                                                                              false,
3724                                                                              true,
3725                                                                              true,
3726                                                                              CIMPropertyList());
3727                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3728                                          }
3729                                          catch (CIMException e)
3730                                          {
3731                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3732                                             throw;
3733                                          }
3734                      
3735                                          const CIMObjectPath& op    = ciRet->getPath();
3736 mark.hamzy      1.43                     CIMObjectPath        iop   = ciRet->buildPath(cls);
3737                      
3738                                          JMPIjvm::checkException(env);
3739                      
3740                                          iop.setNameSpace(op.getNameSpace());
3741                                          ciRet->setPath(iop);
3742                      
3743                                          handler.deliver(*ciRet);
3744                                      }
3745                                  }
3746                                  handler.complete();
3747                                  break;
3748                              }
3749                      
3750                              case METHOD_ASSOCIATORPROVIDER:
3751                              {
3752                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
3753                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3754                      
3755                                  JMPIjvm::checkException(env);
3756                      
3757 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3758                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3759                      
3760                                  JMPIjvm::checkException(env);
3761                      
3762                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
3763                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
3764                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
3765                      
3766                                  JMPIjvm::checkException(env);
3767                      
3768                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3769                      
3770                      #ifdef PEGASUS_DEBUG
3771                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
3772                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3773                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
3774                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3775                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
3776                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3777                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3778 mark.hamzy      1.43 #endif
3779                      
3780                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3781 mark.hamzy      1.49                                                                   id,
3782                                                                                        jAssociationName,
3783                                                                                        jPathName,
3784                                                                                        jResultClass,
3785                                                                                        jRole,
3786                                                                                        jResultRole,
3787                                                                                        JMPI_INCLUDE_QUALIFIERS,
3788                                                                                        request->includeClassOrigin,
3789                                                                                        jPropertyList);
3790 mark.hamzy      1.43 
3791                                  JMPIjvm::checkException(env);
3792                      
3793                                  STAT_PMS_PROVIDEREND;
3794                      
3795                                  handler.processing();
3796                                  if (jVec) {
3797                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3798                                          JMPIjvm::checkException(env);
3799                      
3800                                          jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3801                      
3802                                          JMPIjvm::checkException(env);
3803                      
3804                                          jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3805                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3806                                          CIMClass             cls;
3807                      
3808                                          try
3809                                          {
3810                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3811 mark.hamzy      1.43                        AutoMutex lock (pr._cimomMutex);
3812                      
3813                                             cls = pr._cimom_handle->getClass(context,
3814                                                                              request->nameSpace,
3815                                                                              ciRet->getClassName(),
3816                                                                              false,
3817                                                                              true,
3818                                                                              true,
3819                                                                              CIMPropertyList());
3820                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3821                                          }
3822                                          catch (CIMException e)
3823                                          {
3824                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3825                                             throw;
3826                                          }
3827                      
3828                                          const CIMObjectPath& op        = ciRet->getPath();
3829                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
3830                      
3831                                          JMPIjvm::checkException(env);
3832 mark.hamzy      1.43 
3833                                          iop.setNameSpace(op.getNameSpace());
3834                                          ciRet->setPath(iop);
3835                      
3836                                          handler.deliver(*ciRet);
3837                                      }
3838                                  }
3839                                  handler.complete();
3840                                  break;
3841                              }
3842                      
3843                              case METHOD_UNKNOWN:
3844                              {
3845                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
3846                                  break;
3847                              }
3848                              }
3849                          }
3850                          HandlerCatch(handler);
3851                      
3852                          if (env) JMPIjvm::detachThread();
3853 mark.hamzy      1.43 
3854                          PEG_METHOD_EXIT();
3855                      
3856                          STAT_COPYDISPATCHER
3857                      
3858                          return(response);
3859                      }
3860                      
3861                      Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
3862                      {
3863                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
3864                      
3865                          HandlerIntro(AssociatorNames,message,request,response,handler,Array<CIMObjectPath>());
3866                      
3867                          typedef enum {
3868                             METHOD_UNKNOWN = 0,
3869                             METHOD_CIMASSOCIATORPROVIDER,
3870                             METHOD_CIMASSOCIATORPROVIDER2,
3871                             METHOD_ASSOCIATORPROVIDER,
3872                             METHOD_ASSOCIATORPROVIDER2
3873                          } METHOD_VERSION;
3874 mark.hamzy      1.43     METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3875                          JNIEnv          *env           = NULL;
3876                      
3877                          try {
3878                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3879                                  "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0  Name space: $1  Class name: $2",
3880                                  System::getHostName(),
3881                                  request->nameSpace.getString(),
3882                                  request->objectName.getClassName().getString());
3883                      
3884                              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));
3885                      
3886                              // make target object path
3887                              CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3888                                                                             request->nameSpace,
3889                                                                             request->objectName.getClassName(),
3890                                                                             request->objectName.getKeyBindings());
3891                              CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
3892                                                                             request->nameSpace,
3893                                                                             request->assocClass.getString());
3894                      
3895 mark.hamzy      1.43         // resolve provider name
3896                              ProviderName name = _resolveProviderName(
3897                                  request->operationContext.get(ProviderIdContainer::NAME));
3898                      
3899                              // get cached or load new provider module
3900                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
3901                                                                                               name.getLogicalName(),
3902                                                                                               String::EMPTY);
3903                      
3904                              // forward request
3905                              JMPIProvider &pr = ph.GetProvider();
3906                      
3907                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
3908                      
3909                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
3910                      
3911                              JvmVector *jv = 0;
3912                      
3913                              env = JMPIjvm::attachThread(&jv);
3914                      
3915                              if (!env)
3916 mark.hamzy      1.43         {
3917                                  PEG_METHOD_EXIT();
3918 mark.hamzy      1.37 
3919                                  STAT_COPYDISPATCHER
3920                      
3921                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3922                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3923                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3924                              }
3925                      
3926 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
3927                      
3928                              STAT_GETSTARTTIME;
3929                      
3930 mark.hamzy      1.43         jmethodID id               = NULL;
3931                              String    interfaceType;
3932                              String    interfaceVersion;
3933                      
3934                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
3935                                                interfaceType,
3936                                                interfaceVersion);
3937                      
3938                              if (interfaceType == "JMPI")
3939                              {
3940                                 // public java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3941                                 //                                          org.pegasus.jmpi.CIMObjectPath pathName,
3942                                 //                                          java.lang.String               resultClass,
3943                                 //                                          java.lang.String               role,
3944                                 //                                          java.lang.String               resultRole)
3945                                 //        throws org.pegasus.jmpi.CIMException
3946                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3947                                                       "associatorNames",
3948                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
3949                      
3950                                 if (id != NULL)
3951 mark.hamzy      1.43            {
3952                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
3953                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3954                                 }
3955 mark.hamzy      1.24 
3956 mark.hamzy      1.43            if (id == NULL)
3957                                 {
3958                                     env->ExceptionClear();
3959 mark.hamzy      1.24 
3960 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
3961                                     //                                                          org.pegasus.jmpi.CIMObjectPath pathName,
3962                                     //                                                          java.lang.String               resultClass,
3963                                     //                                                          java.lang.String               role,
3964                                     //                                                          java.lang.String               resultRole)
3965                                     //        throws org.pegasus.jmpi.CIMException
3966                                     id = env->GetMethodID((jclass)pr.jProviderClass,
3967                                                           "associatorNames",
3968                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
3969                      
3970                                     if (id != NULL)
3971                                     {
3972                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
3973                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
3974                                     }
3975                                 }
3976                              }
3977                              else if (interfaceType == "JMPIExperimental")
3978 mark.hamzy      1.24         {
3979 mark.hamzy      1.43            // public java.util.Vector associatorNames (org.pegasus.jmpi.OperationContext oc,
3980                                 //                                          org.pegasus.jmpi.CIMObjectPath    assocName,
3981                                 //                                          org.pegasus.jmpi.CIMObjectPath    pathName,
3982                                 //                                          java.lang.String                  resultClass,
3983                                 //                                          java.lang.String                  role,
3984                                 //                                          java.lang.String                  resultRole)
3985                                 //        throws org.pegasus.jmpi.CIMException
3986                                 id = env->GetMethodID((jclass)pr.jProviderClass,
3987                                                       "associatorNames",
3988                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
3989 mark.hamzy      1.24 
3990 mark.hamzy      1.43            if (id != NULL)
3991                                 {
3992                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
3993                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
3994                                 }
3995 mark.hamzy      1.24 
3996 mark.hamzy      1.43            if (id == NULL)
3997                                 {
3998                                     env->ExceptionClear();
3999 mark.hamzy      1.24 
4000 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMObjectPath[] associatorNames (org.pegasus.jmpi.OperationContext oc,
4001                                     //                                                          org.pegasus.jmpi.CIMObjectPath    assocName,
4002                                     //                                                          org.pegasus.jmpi.CIMObjectPath    pathName,
4003                                     //                                                          java.lang.String                  resultClass,
4004                                     //                                                          java.lang.String                  role,
4005                                     //                                                          java.lang.String                  resultRole)
4006                                     //        throws org.pegasus.jmpi.CIMException
4007                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4008                                                           "associatorNames",
4009                                                           "(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;");
4010                      
4011                                     if (id != NULL)
4012                                     {
4013                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4014                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4015                                     }
4016                                 }
4017 mark.hamzy      1.24         }
4018 schuur          1.13 
4019 mark.hamzy      1.24         if (id == NULL)
4020                              {
4021                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
4022 mark.hamzy      1.43 
4023                                  PEG_METHOD_EXIT();
4024                      
4025                                  STAT_COPYDISPATCHER
4026                      
4027                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4028                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4029                                                                                     "Could not find a method for the provider based on InterfaceType."));
4030 mark.hamzy      1.23         }
4031 mark.hamzy      1.24 
4032 schuur          1.1          JMPIjvm::checkException(env);
4033                      
4034 mark.hamzy      1.24         switch (eMethodFound)
4035                              {
4036 mark.hamzy      1.43         case METHOD_CIMASSOCIATORPROVIDER:
4037                              {
4038                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4039                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4040                      
4041                                  JMPIjvm::checkException(env);
4042                      
4043                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4044                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4045                      
4046                                  JMPIjvm::checkException(env);
4047                      
4048                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4049                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4050                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4051                      
4052                                  JMPIjvm::checkException(env);
4053                      
4054                      #ifdef PEGASUS_DEBUG
4055                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4056                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4057 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4058                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4059                      #endif
4060                      
4061 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4062 mark.hamzy      1.43                                                                   id,
4063                                                                                        jAssociationName,
4064                                                                                        jPathName,
4065                                                                                        jResultClass,
4066                                                                                        jRole,
4067                                                                                        jResultRole);
4068                      
4069                                  JMPIjvm::checkException(env);
4070                      
4071                                  STAT_PMS_PROVIDEREND;
4072                      
4073                                  handler.processing();
4074 mark.hamzy      1.45             if (jAr) {
4075                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4076 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4077                      
4078 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
4079 mark.hamzy      1.43 
4080                                          JMPIjvm::checkException(env);
4081                      
4082                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4083 mark.hamzy      1.50                     CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4084 mark.hamzy      1.43 
4085                                          JMPIjvm::checkException(env);
4086                      
4087                                          handler.deliver(*copRet);
4088                                      }
4089                                  }
4090                                  handler.complete();
4091                                  break;
4092                              }
4093                      
4094                              case METHOD_CIMASSOCIATORPROVIDER2:
4095 mark.hamzy      1.24         {
4096 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4097                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4098 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4099 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4100                      
4101                                  JMPIjvm::checkException(env);
4102                      
4103 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4104                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4105                      
4106                                  JMPIjvm::checkException(env);
4107                      
4108 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4109                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4110                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4111                      
4112                                  JMPIjvm::checkException(env);
4113                      
4114 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4115                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4116                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4117                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4118                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4119                      #endif
4120                      
4121 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4122 mark.hamzy      1.24                                                                   id,
4123 mark.hamzy      1.43                                                                   joc,
4124 mark.hamzy      1.24                                                                   jAssociationName,
4125 mark.hamzy      1.43                                                                   jPathName,
4126 mark.hamzy      1.24                                                                   jResultClass,
4127                                                                                        jRole,
4128                                                                                        jResultRole);
4129 mark.hamzy      1.25 
4130 mark.hamzy      1.23             JMPIjvm::checkException(env);
4131                      
4132                                  STAT_PMS_PROVIDEREND;
4133                      
4134 mark.hamzy      1.43             if (joc)
4135                                  {
4136                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4137                      
4138                                     JMPIjvm::checkException(env);
4139                                  }
4140                      
4141 mark.hamzy      1.23             handler.processing();
4142 mark.hamzy      1.45             if (jAr) {
4143                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4144 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4145                      
4146 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
4147 mark.hamzy      1.24 
4148 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4149                      
4150 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4151 mark.hamzy      1.50                     CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4152 mark.hamzy      1.23 
4153                                          JMPIjvm::checkException(env);
4154                      
4155 mark.hamzy      1.29                     handler.deliver(*copRet);
4156 mark.hamzy      1.23                 }
4157                                  }
4158                                  handler.complete();
4159 mark.hamzy      1.24             break;
4160 mark.hamzy      1.23         }
4161 mark.hamzy      1.24 
4162 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
4163                              {
4164                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4165                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4166                      
4167                                  JMPIjvm::checkException(env);
4168                      
4169                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4170                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4171                      
4172                                  JMPIjvm::checkException(env);
4173                      
4174                                  jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4175                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4176                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4177                      
4178                                  JMPIjvm::checkException(env);
4179                      
4180                      #ifdef PEGASUS_DEBUG
4181                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4182                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName    = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4183 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4184                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4185                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4186                      #endif
4187                      
4188                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4189                                                                                        id,
4190                                                                                        jAssociationName,
4191                                                                                        jPathName,
4192                                                                                        jResultClass,
4193                                                                                        jRole,
4194                                                                                        jResultRole);
4195                      
4196                                  JMPIjvm::checkException(env);
4197                      
4198                                  STAT_PMS_PROVIDEREND;
4199                      
4200                                  handler.processing();
4201                                  if (jVec) {
4202                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4203                                          JMPIjvm::checkException(env);
4204 mark.hamzy      1.43 
4205                                          jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4206                      
4207                                          JMPIjvm::checkException(env);
4208                      
4209                                          jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4210                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4211                      
4212                                          JMPIjvm::checkException(env);
4213                      
4214                                          handler.deliver(*copRet);
4215                                      }
4216                                  }
4217                                  handler.complete();
4218                                  break;
4219                              }
4220                      
4221                              case METHOD_ASSOCIATORPROVIDER2:
4222 mark.hamzy      1.24         {
4223 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4224                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4225                      
4226 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
4227 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4228                      
4229                                  JMPIjvm::checkException(env);
4230                      
4231 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4232 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4233                      
4234                                  JMPIjvm::checkException(env);
4235                      
4236 mark.hamzy      1.25             jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
4237                                  jstring jRole        = env->NewStringUTF(request->role.getCString());
4238                                  jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
4239                      
4240                                  JMPIjvm::checkException(env);
4241                      
4242 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4243                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
4244                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName    = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4245                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
4246                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
4247                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
4248                      #endif
4249                      
4250 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4251                                                                                        id,
4252 mark.hamzy      1.43                                                                   joc,
4253 mark.hamzy      1.24                                                                   jAssociationName,
4254 mark.hamzy      1.29                                                                   jPathName,
4255 mark.hamzy      1.24                                                                   jResultClass,
4256                                                                                        jRole,
4257                                                                                        jResultRole);
4258 mark.hamzy      1.25 
4259 mark.hamzy      1.23             JMPIjvm::checkException(env);
4260                      
4261                                  STAT_PMS_PROVIDEREND;
4262 schuur          1.13 
4263 mark.hamzy      1.43             if (joc)
4264                                  {
4265                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4266                      
4267                                     JMPIjvm::checkException(env);
4268                                  }
4269                      
4270 mark.hamzy      1.23             handler.processing();
4271 mark.hamzy      1.24             if (jVec) {
4272 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4273 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4274 schuur          1.13 
4275 mark.hamzy      1.29                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4276 mark.hamzy      1.24 
4277 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4278 schuur          1.13 
4279 mark.hamzy      1.29                     jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
4280                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
4281 schuur          1.1  
4282 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4283 schuur          1.1  
4284 mark.hamzy      1.29                     handler.deliver(*copRet);
4285 mark.hamzy      1.23                 }
4286                                  }
4287                                  handler.complete();
4288 mark.hamzy      1.24             break;
4289                              }
4290                      
4291                              case METHOD_UNKNOWN:
4292                              {
4293                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
4294                                  break;
4295                              }
4296 mark.hamzy      1.23         }
4297 schuur          1.1      }
4298                          HandlerCatch(handler);
4299 schuur          1.12 
4300 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
4301 schuur          1.12 
4302 schuur          1.1      PEG_METHOD_EXIT();
4303                      
4304 w.white         1.31     STAT_COPYDISPATCHER
4305                      
4306 schuur          1.1      return(response);
4307                      }
4308                      
4309                      Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
4310                      {
4311 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
4312                      
4313                          HandlerIntro(References,message,request,response,handler,Array<CIMObject>());
4314 schuur          1.1  
4315 mark.hamzy      1.24     typedef enum {
4316                             METHOD_UNKNOWN = 0,
4317 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
4318                             METHOD_CIMASSOCIATORPROVIDER2,
4319                             METHOD_ASSOCIATORPROVIDER,
4320                             METHOD_ASSOCIATORPROVIDER2,
4321 mark.hamzy      1.24     } METHOD_VERSION;
4322                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4323                          JNIEnv          *env           = NULL;
4324 schuur          1.13 
4325 schuur          1.1      try {
4326                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4327 konrad.r        1.15             "JMPIProviderManager::handleReferencesRequest - Host name: $0  Name space: $1  Class name: $2",
4328 schuur          1.1              System::getHostName(),
4329                                  request->nameSpace.getString(),
4330                                  request->objectName.getClassName().getString());
4331                      
4332 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));
4333 mark.hamzy      1.23 
4334 schuur          1.1          // make target object path
4335 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4336                                                                             request->nameSpace,
4337                                                                             request->objectName.getClassName(),
4338                                                                             request->objectName.getKeyBindings());
4339                              CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4340                                                                             request->nameSpace,
4341                                                                             request->resultClass.getString());
4342 schuur          1.1  
4343                              // resolve provider name
4344 kumpf           1.2          ProviderName name = _resolveProviderName(
4345                                  request->operationContext.get(ProviderIdContainer::NAME));
4346 schuur          1.1  
4347 mark.hamzy      1.43         // get cached or load new provider module
4348                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4349                                                                                               name.getLogicalName(),
4350                                                                                               String::EMPTY);
4351                      
4352                              // convert arguments
4353                              OperationContext context;
4354                      
4355                              context.insert(request->operationContext.get(IdentityContainer::NAME));
4356                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
4357                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
4358                      
4359                              // forward request
4360                              JMPIProvider &pr = ph.GetProvider();
4361                      
4362                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
4363                      
4364                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
4365                      
4366                              JvmVector *jv = 0;
4367                      
4368 mark.hamzy      1.43         env = JMPIjvm::attachThread(&jv);
4369                      
4370                              if (!env)
4371                              {
4372                                  PEG_METHOD_EXIT();
4373                      
4374                                  STAT_COPYDISPATCHER
4375                      
4376                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4377                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4378                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4379                              }
4380                      
4381                              JMPIProvider::pm_service_op_lock op_lock(&pr);
4382                      
4383                              STAT_GETSTARTTIME;
4384                      
4385                              jmethodID id               = NULL;
4386                              String    interfaceType;
4387                              String    interfaceVersion;
4388                      
4389 mark.hamzy      1.43         getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4390                                                interfaceType,
4391                                                interfaceVersion);
4392                      
4393                              if (interfaceType == "JMPI")
4394                              {
4395                                 // public java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
4396                                 //                                     org.pegasus.jmpi.CIMObjectPath pathName,
4397                                 //                                     java.lang.String               role,
4398                                 //                                     boolean                        includeQualifiers,
4399                                 //                                     boolean                        includeClassOrigin,
4400                                 //                                     java.lang.String[]             propertyList)
4401                                 //        throws org.pegasus.jmpi.CIMException
4402                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4403                                                       "references",
4404                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
4405                      
4406                                 if (id != NULL)
4407                                 {
4408                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
4409                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4410 mark.hamzy      1.43            }
4411                      
4412                                 if (id == NULL)
4413                                 {
4414                                     env->ExceptionClear();
4415                      
4416                                     // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.CIMObjectPath assocName,
4417                                     //                                                   org.pegasus.jmpi.CIMObjectPath pathName,
4418                                     //                                                   java.lang.String               role,
4419                                     //                                                   boolean                        includeQualifiers,
4420                                     //                                                   boolean                        includeClassOrigin,
4421                                     //                                                   java.lang.String[]             propertyList)
4422                                     //        throws org.pegasus.jmpi.CIMException
4423                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4424                                                           "references",
4425                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
4426                      
4427                                     if (id != NULL)
4428                                     {
4429                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4430                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4431 mark.hamzy      1.43                }
4432                                 }
4433                              }
4434                              else if (interfaceType == "JMPIExperimental")
4435                              {
4436                                 // public java.util.Vector references (org.pegasus.jmpi.OperationContext oc,
4437                                 //                                     org.pegasus.jmpi.CIMObjectPath    assocName,
4438                                 //                                     org.pegasus.jmpi.CIMObjectPath    pathName,
4439                                 //                                     java.lang.String                  role,
4440                                 //                                     boolean                           includeQualifiers,
4441                                 //                                     boolean                           includeClassOrigin,
4442                                 //                                     java.lang.String[]                propertyList)
4443                                 //        throws org.pegasus.jmpi.CIMException
4444                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4445                                                       "references",
4446 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;");
4447 mark.hamzy      1.43 
4448                                 if (id != NULL)
4449                                 {
4450                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
4451                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4452                                 }
4453                      
4454                                 if (id == NULL)
4455                                 {
4456                                     env->ExceptionClear();
4457                      
4458                                     // public org.pegasus.jmpi.CIMInstance[] references (org.pegasus.jmpi.OperationContext oc,
4459                                     //                                                   org.pegasus.jmpi.CIMObjectPath    assocName,
4460                                     //                                                   org.pegasus.jmpi.CIMObjectPath    pathName,
4461                                     //                                                   java.lang.String                  role,
4462                                     //                                                   boolean                           includeQualifiers,
4463                                     //                                                   boolean                           includeClassOrigin,
4464                                     //                                                   java.lang.String[]                propertyList)
4465                                     //        throws org.pegasus.jmpi.CIMException
4466                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4467                                                           "references",
4468 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;");
4469                      
4470                                     if (id != NULL)
4471                                     {
4472                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
4473                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
4474                                     }
4475                                 }
4476                              }
4477                      
4478                              if (id == NULL)
4479                              {
4480                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found no method!"<<PEGASUS_STD(endl));
4481                      
4482                                  PEG_METHOD_EXIT();
4483                      
4484                                  STAT_COPYDISPATCHER
4485                      
4486                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4487                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
4488                                                                                     "Could not find a method for the provider based on InterfaceType."));
4489 mark.hamzy      1.43         }
4490                      
4491                              JMPIjvm::checkException(env);
4492                      
4493                              switch (eMethodFound)
4494                              {
4495                              case METHOD_CIMASSOCIATORPROVIDER:
4496                              {
4497                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4498                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4499                      
4500                                  JMPIjvm::checkException(env);
4501                      
4502                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4503                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4504                      
4505                                  JMPIjvm::checkException(env);
4506                      
4507                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4508                      
4509                                  JMPIjvm::checkException(env);
4510 mark.hamzy      1.43 
4511                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4512                      
4513                      #ifdef PEGASUS_DEBUG
4514                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4515                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4516                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4517                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4518                      #endif
4519                      
4520 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4521 mark.hamzy      1.43                                                                   id,
4522                                                                                        jAssociationName,
4523                                                                                        jPathName,
4524                                                                                        jRole,
4525                                                                                        JMPI_INCLUDE_QUALIFIERS,
4526                                                                                        request->includeClassOrigin,
4527                                                                                        jPropertyList);
4528                      
4529                                  JMPIjvm::checkException(env);
4530                      
4531                                  STAT_PMS_PROVIDEREND;
4532                      
4533                                  handler.processing();
4534 mark.hamzy      1.45             if (jAr) {
4535                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4536 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4537                      
4538 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4539 mark.hamzy      1.43 
4540                                          JMPIjvm::checkException(env);
4541                      
4542                                          jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4543                      
4544                                          JMPIjvm::checkException(env);
4545                      
4546                                          CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4547                                          CIMClass             cls;
4548                      
4549                                          try
4550                                          {
4551                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4552                                             AutoMutex lock (pr._cimomMutex);
4553                      
4554                                             cls = pr._cimom_handle->getClass(context,
4555                                                                              request->nameSpace,
4556                                                                              ciRet->getClassName(),
4557                                                                              false,
4558                                                                              true,
4559                                                                              true,
4560 mark.hamzy      1.43                                                         CIMPropertyList());
4561                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4562                                          }
4563                                          catch (CIMException e)
4564                                          {
4565                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4566                                             throw;
4567                                          }
4568                      
4569                                          const CIMObjectPath& op    = ciRet->getPath();
4570                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
4571                      
4572                                          JMPIjvm::checkException(env);
4573                      
4574                                          iop.setNameSpace(op.getNameSpace());
4575                                          ciRet->setPath(iop);
4576                      
4577                                          handler.deliver(*ciRet);
4578                                      }
4579                                  }
4580                                  handler.complete();
4581 mark.hamzy      1.43             break;
4582                              }
4583                      
4584                              case METHOD_CIMASSOCIATORPROVIDER2:
4585                              {
4586                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4587                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4588                      
4589                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4590                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4591                      
4592                                  JMPIjvm::checkException(env);
4593                      
4594                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4595                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4596                      
4597                                  JMPIjvm::checkException(env);
4598                      
4599                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4600                      
4601                                  JMPIjvm::checkException(env);
4602 mark.hamzy      1.43 
4603                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4604 schuur          1.1  
4605 mark.hamzy      1.43 #ifdef PEGASUS_DEBUG
4606                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4607                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4608                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4609                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4610                      #endif
4611 schuur          1.1  
4612 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4613 mark.hamzy      1.43                                                                   id,
4614                                                                                        joc,
4615                                                                                        jAssociationName,
4616                                                                                        jPathName,
4617                                                                                        jRole,
4618                                                                                        JMPI_INCLUDE_QUALIFIERS,
4619                                                                                        request->includeClassOrigin,
4620                                                                                        jPropertyList);
4621 schuur          1.1  
4622 mark.hamzy      1.43             JMPIjvm::checkException(env);
4623 mark.hamzy      1.24 
4624 mark.hamzy      1.43             STAT_PMS_PROVIDEREND;
4625 schuur          1.1  
4626 mark.hamzy      1.43             if (joc)
4627                                  {
4628                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4629 schuur          1.1  
4630 mark.hamzy      1.43                JMPIjvm::checkException(env);
4631                                  }
4632 schuur          1.1  
4633 mark.hamzy      1.43             handler.processing();
4634 mark.hamzy      1.45             if (jAr) {
4635                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
4636 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4637 schuur          1.1  
4638 mark.hamzy      1.45                     jobject jciRet = env->GetObjectArrayElement(jAr,i);
4639 mark.hamzy      1.37 
4640 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4641 mark.hamzy      1.37 
4642 mark.hamzy      1.43                     jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4643 mark.hamzy      1.37 
4644 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4645 schuur          1.1  
4646 mark.hamzy      1.43                     CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4647                                          CIMClass             cls;
4648 schuur          1.1  
4649 mark.hamzy      1.43                     try
4650                                          {
4651                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4652                                             AutoMutex lock (pr._cimomMutex);
4653 mark.hamzy      1.24 
4654 mark.hamzy      1.43                        cls = pr._cimom_handle->getClass(context,
4655                                                                              request->nameSpace,
4656                                                                              ciRet->getClassName(),
4657                                                                              false,
4658                                                                              true,
4659                                                                              true,
4660                                                                              CIMPropertyList());
4661                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4662                                          }
4663                                          catch (CIMException e)
4664                                          {
4665                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4666                                             throw;
4667                                          }
4668 mark.hamzy      1.24 
4669 mark.hamzy      1.43                     const CIMObjectPath& op    = ciRet->getPath();
4670                                          CIMObjectPath        iop   = ciRet->buildPath(cls);
4671 mark.hamzy      1.24 
4672 mark.hamzy      1.43                     JMPIjvm::checkException(env);
4673 mark.hamzy      1.24 
4674 mark.hamzy      1.43                     iop.setNameSpace(op.getNameSpace());
4675                                          ciRet->setPath(iop);
4676 mark.hamzy      1.24 
4677 mark.hamzy      1.43                     handler.deliver(*ciRet);
4678                                      }
4679 mark.hamzy      1.24             }
4680 mark.hamzy      1.43             handler.complete();
4681                                  break;
4682 mark.hamzy      1.24         }
4683 schuur          1.12 
4684 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
4685 mark.hamzy      1.24         {
4686 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4687                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4688 mark.hamzy      1.24 
4689 mark.hamzy      1.43             JMPIjvm::checkException(env);
4690 schuur          1.1  
4691 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4692                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4693 mark.hamzy      1.25 
4694                                  JMPIjvm::checkException(env);
4695                      
4696                                  jstring jRole = env->NewStringUTF(request->role.getCString());
4697                      
4698                                  JMPIjvm::checkException(env);
4699                      
4700                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4701                      
4702 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4703                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4704 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4705 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4706                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4707                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4708                      #endif
4709                      
4710 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4711                                                                                        id,
4712                                                                                        jAssociationName,
4713 mark.hamzy      1.43                                                                   jPathName,
4714 mark.hamzy      1.24                                                                   jRole,
4715 mark.hamzy      1.36                                                                   JMPI_INCLUDE_QUALIFIERS,
4716                                                                                        request->includeClassOrigin,
4717 mark.hamzy      1.24                                                                   jPropertyList);
4718 mark.hamzy      1.25 
4719 mark.hamzy      1.23             JMPIjvm::checkException(env);
4720                      
4721                                  STAT_PMS_PROVIDEREND;
4722                      
4723                                  handler.processing();
4724                                  if (jVec) {
4725 mark.hamzy      1.43                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4726 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4727                      
4728 mark.hamzy      1.43                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4729 mark.hamzy      1.24 
4730 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4731                      
4732 mark.hamzy      1.43                     jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4733                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4734 mark.hamzy      1.40                     CIMClass             cls;
4735                      
4736                                          try
4737                                          {
4738                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4739                                             AutoMutex lock (pr._cimomMutex);
4740                      
4741                                             cls = pr._cimom_handle->getClass(context,
4742                                                                              request->nameSpace,
4743                                                                              ciRet->getClassName(),
4744                                                                              false,
4745                                                                              true,
4746                                                                              true,
4747                                                                              CIMPropertyList());
4748                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4749                                          }
4750                                          catch (CIMException e)
4751                                          {
4752                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4753                                             throw;
4754                                          }
4755 mark.hamzy      1.40 
4756 mark.hamzy      1.43                     const CIMObjectPath& op        = ciRet->getPath();
4757                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
4758 mark.hamzy      1.24 
4759 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4760                      
4761 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
4762 mark.hamzy      1.29                     ciRet->setPath(iop);
4763 schuur          1.13 
4764 mark.hamzy      1.29                     handler.deliver(*ciRet);
4765 mark.hamzy      1.23                 }
4766                                  }
4767                                  handler.complete();
4768 mark.hamzy      1.24             break;
4769 mark.hamzy      1.23         }
4770 schuur          1.1  
4771 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
4772 mark.hamzy      1.24         {
4773 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
4774                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
4775                      
4776 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
4777 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
4778                      
4779                                  JMPIjvm::checkException(env);
4780                      
4781 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4782 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
4783                      
4784                                  JMPIjvm::checkException(env);
4785                      
4786 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
4787                      
4788                                  JMPIjvm::checkException(env);
4789                      
4790                                  jobjectArray jPropertyList = getList(jv,env,request->propertyList);
4791                      
4792 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
4793                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
4794                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
4795                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
4796                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
4797                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
4798                      #endif
4799                      
4800 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
4801                                                                                        id,
4802 mark.hamzy      1.43                                                                   joc,
4803 mark.hamzy      1.24                                                                   jAssociationName,
4804                                                                                        jPathName,
4805                                                                                        jRole,
4806 mark.hamzy      1.32                                                                   JMPI_INCLUDE_QUALIFIERS,
4807                                                                                        request->includeClassOrigin,
4808 mark.hamzy      1.24                                                                   jPropertyList);
4809 mark.hamzy      1.25 
4810 mark.hamzy      1.24             JMPIjvm::checkException(env);
4811                      
4812                                  STAT_PMS_PROVIDEREND;
4813                      
4814 mark.hamzy      1.43             if (joc)
4815                                  {
4816                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
4817                      
4818                                     JMPIjvm::checkException(env);
4819                                  }
4820                      
4821 mark.hamzy      1.24             handler.processing();
4822                                  if (jVec) {
4823 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
4824 mark.hamzy      1.24                     JMPIjvm::checkException(env);
4825                      
4826 mark.hamzy      1.29                     jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
4827 mark.hamzy      1.24 
4828                                          JMPIjvm::checkException(env);
4829                      
4830 mark.hamzy      1.29                     jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
4831                                          CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
4832 mark.hamzy      1.40                     CIMClass             cls;
4833                      
4834                                          try
4835                                          {
4836                                             DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4837                                             AutoMutex lock (pr._cimomMutex);
4838                      
4839                                             cls = pr._cimom_handle->getClass(context,
4840                                                                              request->nameSpace,
4841                                                                              ciRet->getClassName(),
4842                                                                              false,
4843                                                                              true,
4844                                                                              true,
4845                                                                              CIMPropertyList());
4846                                             DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
4847                                          }
4848                                          catch (CIMException e)
4849                                          {
4850                                             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
4851                                             throw;
4852                                          }
4853 mark.hamzy      1.40 
4854 mark.hamzy      1.29                     const CIMObjectPath& op        = ciRet->getPath();
4855                                          CIMObjectPath        iop       = ciRet->buildPath(cls);
4856 schuur          1.1  
4857 mark.hamzy      1.27                     JMPIjvm::checkException(env);
4858                      
4859 mark.hamzy      1.24                     iop.setNameSpace(op.getNameSpace());
4860 mark.hamzy      1.29                     ciRet->setPath(iop);
4861 schuur          1.12 
4862 mark.hamzy      1.29                     handler.deliver(*ciRet);
4863 mark.hamzy      1.24                 }
4864                                  }
4865                                  handler.complete();
4866                                  break;
4867                              }
4868 mark.hamzy      1.23 
4869 mark.hamzy      1.24         case METHOD_UNKNOWN:
4870                              {
4871 mark.hamzy      1.25             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: should not be here!"<<PEGASUS_STD(endl));
4872 mark.hamzy      1.24             break;
4873                              }
4874 mark.hamzy      1.23         }
4875 schuur          1.1      }
4876                          HandlerCatch(handler);
4877 schuur          1.12 
4878                          if (env) JMPIjvm::detachThread();
4879                      
4880 schuur          1.1      PEG_METHOD_EXIT();
4881                      
4882 w.white         1.31     STAT_COPYDISPATCHER
4883                      
4884 schuur          1.1      return(response);
4885                      }
4886                      
4887                      Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
4888                      {
4889 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
4890                      
4891                          HandlerIntro(ReferenceNames,message,request,response,handler,Array<CIMObjectPath>());
4892 schuur          1.1  
4893 mark.hamzy      1.24     typedef enum {
4894                             METHOD_UNKNOWN = 0,
4895 mark.hamzy      1.43        METHOD_CIMASSOCIATORPROVIDER,
4896                             METHOD_CIMASSOCIATORPROVIDER2,
4897                             METHOD_ASSOCIATORPROVIDER,
4898                             METHOD_ASSOCIATORPROVIDER2,
4899 mark.hamzy      1.24     } METHOD_VERSION;
4900                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4901                          JNIEnv          *env           = NULL;
4902 schuur          1.13 
4903 schuur          1.1      try {
4904                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4905                                  "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
4906                                  System::getHostName(),
4907                                  request->nameSpace.getString(),
4908                                  request->objectName.getClassName().getString());
4909                      
4910 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));
4911                      
4912 schuur          1.1          // make target object path
4913 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
4914                                                                             request->nameSpace,
4915                                                                             request->objectName.getClassName(),
4916                                                                             request->objectName.getKeyBindings());
4917                              CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
4918                                                                             request->nameSpace,
4919                                                                             request->resultClass.getString());
4920 schuur          1.1  
4921                              // resolve provider name
4922 kumpf           1.2          ProviderName name = _resolveProviderName(
4923                                  request->operationContext.get(ProviderIdContainer::NAME));
4924 schuur          1.1  
4925                              // get cached or load new provider module
4926 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
4927                                                                                               name.getLogicalName(),
4928                                                                                               String::EMPTY);
4929 schuur          1.1  
4930 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
4931 schuur          1.1  
4932 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.referenceNames: " + pr.getName());
4933 schuur          1.1  
4934 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
4935 schuur          1.12 
4936 mark.hamzy      1.24         JvmVector *jv = 0;
4937                      
4938                              env = JMPIjvm::attachThread(&jv);
4939 schuur          1.1  
4940 mark.hamzy      1.37         if (!env)
4941                              {
4942                                  PEG_METHOD_EXIT();
4943                      
4944                                  STAT_COPYDISPATCHER
4945                      
4946                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4947                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4948                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4949                              }
4950                      
4951 mark.hamzy      1.43         JMPIProvider::pm_service_op_lock op_lock(&pr);
4952                      
4953                              STAT_GETSTARTTIME;
4954                      
4955                              jmethodID id               = NULL;
4956                              String    interfaceType;
4957                              String    interfaceVersion;
4958                      
4959                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
4960                                                interfaceType,
4961                                                interfaceVersion);
4962                      
4963                              if (interfaceType == "JMPI")
4964                              {
4965                                 // public java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4966                                 //                                         org.pegasus.jmpi.CIMObjectPath pathName,
4967                                 //                                         java.lang.String               role)
4968                                 //        throws org.pegasus.jmpi.CIMException
4969                                 id = env->GetMethodID((jclass)pr.jProviderClass,
4970                                                       "referenceNames",
4971                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
4972 mark.hamzy      1.43 
4973                                 if (id != NULL)
4974                                 {
4975                                     eMethodFound = METHOD_ASSOCIATORPROVIDER;
4976                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4977                                 }
4978                      
4979                                 if (id == NULL)
4980                                 {
4981                                     env->ExceptionClear();
4982                      
4983                                     // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
4984                                     //                                                         org.pegasus.jmpi.CIMObjectPath pathName,
4985                                     //                                                         java.lang.String               role)
4986                                     //        throws org.pegasus.jmpi.CIMException
4987                                     id = env->GetMethodID((jclass)pr.jProviderClass,
4988                                                           "referenceNames",
4989                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
4990                      
4991                                     if (id != NULL)
4992                                     {
4993 mark.hamzy      1.43                    eMethodFound = METHOD_CIMASSOCIATORPROVIDER;
4994                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER."<<PEGASUS_STD(endl));
4995                                     }
4996                                 }
4997                              }
4998                              else if (interfaceType == "JMPIExperimental")
4999                              {
5000                                 // public java.util.Vector referenceNames (org.pegasus.jmpi.OperationContext oc,
5001                                 //                                         org.pegasus.jmpi.CIMObjectPath    assocName,
5002                                 //                                         org.pegasus.jmpi.CIMObjectPath    pathName,
5003                                 //                                         java.lang.String                  role)
5004                                 //        throws org.pegasus.jmpi.CIMException
5005                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5006                                                       "referenceNames",
5007                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
5008                      
5009                                 if (id != NULL)
5010                                 {
5011                                     eMethodFound = METHOD_ASSOCIATORPROVIDER2;
5012                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_ASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
5013                                 }
5014 mark.hamzy      1.43 
5015                                 if (id == NULL)
5016                                 {
5017                                     env->ExceptionClear();
5018                      
5019                                     // public org.pegasus.jmpi.CIMObjectPath[] referenceNames (org.pegasus.jmpi.OperationContext oc,
5020                                     //                                                         org.pegasus.jmpi.CIMObjectPath    assocName,
5021                                     //                                                         org.pegasus.jmpi.CIMObjectPath    pathName,
5022                                     //                                                         java.lang.String                  role)
5023                                     //        throws org.pegasus.jmpi.CIMException
5024                                     id = env->GetMethodID((jclass)pr.jProviderClass,
5025                                                           "referenceNames",
5026                                                           "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
5027                      
5028                                     if (id != NULL)
5029                                     {
5030                                         eMethodFound = METHOD_CIMASSOCIATORPROVIDER2;
5031                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_CIMASSOCIATORPROVIDER2."<<PEGASUS_STD(endl));
5032                                     }
5033                                 }
5034                              }
5035 mark.hamzy      1.43 
5036                              if (id == NULL)
5037                              {
5038                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found no method!"<<PEGASUS_STD(endl));
5039                      
5040                                  PEG_METHOD_EXIT();
5041                      
5042                                  STAT_COPYDISPATCHER
5043                      
5044                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5045                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5046                                                                                     "Could not find a method for the provider based on InterfaceType."));
5047                              }
5048                      
5049                              JMPIjvm::checkException(env);
5050                      
5051                              switch (eMethodFound)
5052                              {
5053                              case METHOD_CIMASSOCIATORPROVIDER:
5054                              {
5055                                  jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5056 mark.hamzy      1.43             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5057                      
5058                                  JMPIjvm::checkException(env);
5059                      
5060                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5061                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5062                      
5063                                  JMPIjvm::checkException(env);
5064                      
5065                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5066                      
5067                                  JMPIjvm::checkException(env);
5068                      
5069                      #ifdef PEGASUS_DEBUG
5070                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5071                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5072                      #endif
5073                      
5074 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5075 mark.hamzy      1.43                                                                   id,
5076                                                                                        jPathName,
5077                                                                                        jAssociationName,
5078                                                                                        jRole);
5079                      
5080                                  JMPIjvm::checkException(env);
5081                      
5082                                  STAT_PMS_PROVIDEREND;
5083                      
5084                                  handler.processing();
5085 mark.hamzy      1.45             if (jAr) {
5086                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
5087 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5088                      
5089 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
5090 mark.hamzy      1.43 
5091                                          JMPIjvm::checkException(env);
5092                      
5093                                          jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5094                      
5095                                          JMPIjvm::checkException(env);
5096                      
5097                                          CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5098                      
5099                                          handler.deliver(*copRet);
5100                                      }
5101                                  }
5102                                  handler.complete();
5103                                  break;
5104                              }
5105                      
5106                              case METHOD_CIMASSOCIATORPROVIDER2:
5107                              {
5108                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5109                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5110                      
5111 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5112                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5113                      
5114                                  JMPIjvm::checkException(env);
5115                      
5116                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5117                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5118                      
5119                                  JMPIjvm::checkException(env);
5120                      
5121                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5122                      
5123                                  JMPIjvm::checkException(env);
5124                      
5125                      #ifdef PEGASUS_DEBUG
5126                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5127                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5128                      #endif
5129                      
5130 mark.hamzy      1.45             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5131 mark.hamzy      1.43                                                                   id,
5132                                                                                        joc,
5133                                                                                        jPathName,
5134                                                                                        jAssociationName,
5135                                                                                        jRole);
5136                      
5137                                  JMPIjvm::checkException(env);
5138                      
5139                                  STAT_PMS_PROVIDEREND;
5140                      
5141                                  if (joc)
5142                                  {
5143                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5144                      
5145                                     JMPIjvm::checkException(env);
5146                                  }
5147                      
5148                                  handler.processing();
5149 mark.hamzy      1.45             if (jAr) {
5150                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
5151 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5152 schuur          1.1  
5153 mark.hamzy      1.45                     jobject jcopRet = env->GetObjectArrayElement(jAr,i);
5154 schuur          1.1  
5155 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5156 mark.hamzy      1.24 
5157 mark.hamzy      1.43                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5158 mark.hamzy      1.24 
5159 mark.hamzy      1.43                     JMPIjvm::checkException(env);
5160 mark.hamzy      1.24 
5161 mark.hamzy      1.43                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5162 mark.hamzy      1.24 
5163 mark.hamzy      1.43                     handler.deliver(*copRet);
5164                                      }
5165 mark.hamzy      1.24             }
5166 mark.hamzy      1.43             handler.complete();
5167                                  break;
5168 mark.hamzy      1.24         }
5169 schuur          1.11 
5170 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER:
5171 mark.hamzy      1.24         {
5172 mark.hamzy      1.43             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5173                                  jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5174 mark.hamzy      1.24 
5175 mark.hamzy      1.43             JMPIjvm::checkException(env);
5176 schuur          1.1  
5177 mark.hamzy      1.43             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5178                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5179 mark.hamzy      1.25 
5180                                  JMPIjvm::checkException(env);
5181                      
5182                                  jstring jRole = env->NewStringUTF(request->role.getCString());
5183                      
5184                                  JMPIjvm::checkException(env);
5185                      
5186 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5187                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5188 mark.hamzy      1.43             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName           = "<<resultPath->toString ()<<PEGASUS_STD(endl));
5189 mark.hamzy      1.29             DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5190                      #endif
5191                      
5192 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5193                                                                                        id,
5194                                                                                        jAssociationName,
5195 mark.hamzy      1.43                                                                   jPathName,
5196 mark.hamzy      1.24                                                                   jRole);
5197 mark.hamzy      1.25 
5198 mark.hamzy      1.23             JMPIjvm::checkException(env);
5199                      
5200                                  STAT_PMS_PROVIDEREND;
5201                      
5202                                  handler.processing();
5203                                  if (jVec) {
5204 mark.hamzy      1.43                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
5205 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5206                      
5207 mark.hamzy      1.43                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
5208 mark.hamzy      1.24 
5209 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5210                      
5211 mark.hamzy      1.29                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5212 mark.hamzy      1.23 
5213                                          JMPIjvm::checkException(env);
5214                      
5215 mark.hamzy      1.29                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5216 mark.hamzy      1.24 
5217 mark.hamzy      1.29                     handler.deliver(*copRet);
5218 mark.hamzy      1.23                 }
5219                                  }
5220                                  handler.complete();
5221 mark.hamzy      1.24             break;
5222 mark.hamzy      1.23         }
5223 mark.hamzy      1.24 
5224 mark.hamzy      1.43         case METHOD_ASSOCIATORPROVIDER2:
5225 mark.hamzy      1.24         {
5226 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5227                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5228                      
5229 mark.hamzy      1.29             jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
5230 mark.hamzy      1.25             jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
5231                      
5232                                  JMPIjvm::checkException(env);
5233                      
5234 mark.hamzy      1.29             jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5235 mark.hamzy      1.24             jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
5236                      
5237                                  JMPIjvm::checkException(env);
5238                      
5239 mark.hamzy      1.25             jstring jRole = env->NewStringUTF(request->role.getCString());
5240                      
5241                                  JMPIjvm::checkException(env);
5242                      
5243 mark.hamzy      1.29 #ifdef PEGASUS_DEBUG
5244                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
5245                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName           = "<<resultPath->toString ()<<PEGASUS_STD(endl));
5246                                  DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
5247                      #endif
5248                      
5249 mark.hamzy      1.24             jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
5250                                                                                        id,
5251 mark.hamzy      1.43                                                                   joc,
5252 mark.hamzy      1.24                                                                   jAssociationName,
5253                                                                                        jPathName,
5254                                                                                        jRole);
5255 mark.hamzy      1.25 
5256 mark.hamzy      1.23             JMPIjvm::checkException(env);
5257                      
5258                                  STAT_PMS_PROVIDEREND;
5259 schuur          1.13 
5260 mark.hamzy      1.43             if (joc)
5261                                  {
5262                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5263                      
5264                                     JMPIjvm::checkException(env);
5265                                  }
5266                      
5267 mark.hamzy      1.23             handler.processing();
5268 mark.hamzy      1.24             if (jVec) {
5269 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
5270 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5271 schuur          1.13 
5272 mark.hamzy      1.29                     jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
5273 mark.hamzy      1.24 
5274 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5275 schuur          1.13 
5276 mark.hamzy      1.29                     jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
5277 schuur          1.1  
5278 mark.hamzy      1.23                     JMPIjvm::checkException(env);
5279 schuur          1.1  
5280 mark.hamzy      1.29                     CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
5281 mark.hamzy      1.24 
5282 mark.hamzy      1.29                     handler.deliver(*copRet);
5283 mark.hamzy      1.23                 }
5284                                  }
5285                                  handler.complete();
5286 mark.hamzy      1.24             break;
5287                              }
5288                      
5289                              case METHOD_UNKNOWN:
5290                              {
5291 mark.hamzy      1.25             DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
5292 mark.hamzy      1.24             break;
5293                              }
5294 mark.hamzy      1.23         }
5295 schuur          1.1      }
5296                          HandlerCatch(handler);
5297 schuur          1.11 
5298                          if (env) JMPIjvm::detachThread();
5299                      
5300 schuur          1.1      PEG_METHOD_EXIT();
5301                      
5302 w.white         1.31     STAT_COPYDISPATCHER
5303                      
5304 schuur          1.1      return(response);
5305                      }
5306                      
5307 mark.hamzy      1.26 Message * JMPIProviderManager::handleGetPropertyRequest(const Message * message) throw()
5308                      {
5309                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetPropertyRequest");
5310                      
5311                          HandlerIntro(GetProperty,message,request,response,handler,CIMValue());
5312                      
5313                          typedef enum {
5314                             METHOD_UNKNOWN = 0,
5315 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
5316                             METHOD_PROPERTYPROVIDER2,
5317 mark.hamzy      1.26     } METHOD_VERSION;
5318                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5319                          JNIEnv          *env           = NULL;
5320                      
5321                          try {
5322                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5323                                  "JMPIProviderManager::handleGetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
5324                                  System::getHostName(),
5325                                  request->nameSpace.getString(),
5326                                  request->instanceName.getClassName().getString());
5327                      
5328                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5329                      
5330                              // make target object path
5331 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5332                                                                             request->nameSpace,
5333                                                                             request->instanceName.getClassName(),
5334                                                                             request->instanceName.getKeyBindings());
5335 mark.hamzy      1.26 
5336                              // resolve provider name
5337                              ProviderName name = _resolveProviderName(
5338                                  request->operationContext.get(ProviderIdContainer::NAME));
5339                      
5340                              // get cached or load new provider module
5341 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5342                                                                                               name.getLogicalName(),
5343                                                                                               String::EMPTY);
5344 mark.hamzy      1.26 
5345                              // forward request
5346                              JMPIProvider &pr = ph.GetProvider();
5347                      
5348                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.getPropertyValue: " + pr.getName());
5349                      
5350                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: Calling provider getPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5351                      
5352                              JvmVector *jv = 0;
5353                      
5354                              env = JMPIjvm::attachThread(&jv);
5355                      
5356 mark.hamzy      1.37         if (!env)
5357                              {
5358                                  PEG_METHOD_EXIT();
5359                      
5360                                  STAT_COPYDISPATCHER
5361                      
5362                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5363                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5364                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5365                              }
5366                      
5367 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
5368                      
5369                              STAT_GETSTARTTIME;
5370                      
5371 mark.hamzy      1.43         jmethodID id               = NULL;
5372                              String    interfaceType;
5373                              String    interfaceVersion;
5374                      
5375                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5376                                                interfaceType,
5377                                                interfaceVersion);
5378                      
5379                              if (interfaceType == "JMPI")
5380                              {
5381                                 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5382                                 //                                                             java.lang.String               oclass,
5383                                 //                                                             java.lang.String               pName)
5384                                 //        throws org.pegasus.jmpi.CIMException
5385                                 //
5386                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5387                                                       "getPropertyValue",
5388                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
5389 mark.hamzy      1.26 
5390 mark.hamzy      1.43            if (id != NULL)
5391                                 {
5392                                     eMethodFound = METHOD_PROPERTYPROVIDER;
5393                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5394                                 }
5395                              }
5396                              else if (interfaceType == "JMPIExperimental")
5397                              {
5398                                 // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.OperationContext oc,
5399                                 //                                                             org.pegasus.jmpi.CIMObjectPath    cop,
5400                                 //                                                             java.lang.String                  oclass,
5401                                 //                                                             java.lang.String                  pName)
5402                                 //        throws org.pegasus.jmpi.CIMException
5403                                 //
5404                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5405                                                       "getPropertyValue",
5406 mark.hamzy      1.46                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
5407 mark.hamzy      1.26 
5408 mark.hamzy      1.43            if (id != NULL)
5409                                 {
5410                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
5411                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5412                                 }
5413 mark.hamzy      1.26         }
5414                      
5415                              if (id == NULL)
5416                              {
5417                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
5418 mark.hamzy      1.43 
5419                                  PEG_METHOD_EXIT();
5420                      
5421                                  STAT_COPYDISPATCHER
5422                      
5423                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5424                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5425                                                                                     "Could not find a method for the provider based on InterfaceType."));
5426 mark.hamzy      1.26         }
5427                      
5428                              JMPIjvm::checkException(env);
5429                      
5430                              switch (eMethodFound)
5431                              {
5432 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
5433 mark.hamzy      1.26         {
5434 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5435 mark.hamzy      1.26             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5436                      
5437                                  JMPIjvm::checkException(env);
5438                      
5439                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5440                      
5441                                  JMPIjvm::checkException(env);
5442                      
5443                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5444                      
5445                                  JMPIjvm::checkException(env);
5446                      
5447                                  STAT_GETSTARTTIME;
5448                      
5449 mark.hamzy      1.29             jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5450                                                                           id,
5451                                                                           jcop,
5452                                                                           joclass,
5453                                                                           jpName);
5454 mark.hamzy      1.26 
5455                                  JMPIjvm::checkException(env);
5456                      
5457                                  STAT_PMS_PROVIDEREND;
5458                      
5459                                  handler.processing();
5460                      
5461 mark.hamzy      1.29             if (jvalRet)
5462 mark.hamzy      1.26             {
5463 mark.hamzy      1.29                jint      jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5464                                     CIMValue *valRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
5465 mark.hamzy      1.26 
5466                                     JMPIjvm::checkException(env);
5467                      
5468 mark.hamzy      1.29                handler.deliver(*valRet);
5469 mark.hamzy      1.26             }
5470                                  handler.complete();
5471                                  break;
5472                              }
5473                      
5474 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER2:
5475                              {
5476                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5477                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5478                      
5479                                  jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5480                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5481                      
5482                                  JMPIjvm::checkException(env);
5483                      
5484                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5485                      
5486                                  JMPIjvm::checkException(env);
5487                      
5488                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5489                      
5490                                  JMPIjvm::checkException(env);
5491                      
5492                                  STAT_GETSTARTTIME;
5493                      
5494                                  jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
5495 mark.hamzy      1.43                                                      id,
5496                                                                           joc,
5497                                                                           jcop,
5498                                                                           joclass,
5499                                                                           jpName);
5500                      
5501                                  JMPIjvm::checkException(env);
5502                      
5503                                  STAT_PMS_PROVIDEREND;
5504                      
5505                                  if (joc)
5506                                  {
5507                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5508                      
5509                                     JMPIjvm::checkException(env);
5510                                  }
5511                      
5512                                  handler.processing();
5513                      
5514                                  if (jvalRet)
5515                                  {
5516 mark.hamzy      1.43                jint      jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
5517                                     CIMValue *valRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
5518                      
5519                                     JMPIjvm::checkException(env);
5520                      
5521                                     handler.deliver(*valRet);
5522                                  }
5523                                  handler.complete();
5524                                  break;
5525                              }
5526                      
5527 mark.hamzy      1.26         case METHOD_UNKNOWN:
5528                              {
5529                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5530                                  break;
5531                              }
5532                              }
5533                          }
5534                          HandlerCatch(handler);
5535                      
5536                          if (env) JMPIjvm::detachThread();
5537                      
5538                          PEG_METHOD_EXIT();
5539                      
5540 w.white         1.31     STAT_COPYDISPATCHER
5541                      
5542 mark.hamzy      1.26     return(response);
5543                      }
5544                      
5545                      Message * JMPIProviderManager::handleSetPropertyRequest(const Message * message) throw()
5546                      {
5547                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleSetPropertyRequest");
5548                      
5549                          HandlerIntroVoid(SetProperty,message,request,response,handler);
5550                      
5551                          typedef enum {
5552                             METHOD_UNKNOWN = 0,
5553 mark.hamzy      1.43        METHOD_PROPERTYPROVIDER,
5554                             METHOD_PROPERTYPROVIDER2,
5555 mark.hamzy      1.26     } METHOD_VERSION;
5556                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5557                          JNIEnv          *env           = NULL;
5558                      
5559                          try {
5560                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5561                                  "JMPIProviderManager::handleSetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
5562                                  System::getHostName(),
5563                                  request->nameSpace.getString(),
5564                                  request->instanceName.getClassName().getString());
5565                      
5566                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
5567                      
5568                              // make target object path
5569 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5570                                                                             request->nameSpace,
5571                                                                             request->instanceName.getClassName(),
5572                                                                             request->instanceName.getKeyBindings());
5573 mark.hamzy      1.26 
5574                              // resolve provider name
5575                              ProviderName name = _resolveProviderName(
5576                                  request->operationContext.get(ProviderIdContainer::NAME));
5577                      
5578                              // get cached or load new provider module
5579 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5580                                                                                               name.getLogicalName(),
5581                                                                                               String::EMPTY);
5582 mark.hamzy      1.26 
5583                              // forward request
5584                              JMPIProvider &pr = ph.GetProvider();
5585                      
5586                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.setPropertyValue: " + pr.getName());
5587                      
5588                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: Calling provider setPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
5589                      
5590                              JvmVector *jv = 0;
5591                      
5592                              env = JMPIjvm::attachThread(&jv);
5593                      
5594 mark.hamzy      1.37         if (!env)
5595                              {
5596                                  PEG_METHOD_EXIT();
5597                      
5598                                  STAT_COPYDISPATCHER
5599                      
5600                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5601                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5602                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5603                              }
5604                      
5605 mark.hamzy      1.26         JMPIProvider::pm_service_op_lock op_lock(&pr);
5606                      
5607                              STAT_GETSTARTTIME;
5608                      
5609 mark.hamzy      1.43         jmethodID id               = NULL;
5610                              String    interfaceType;
5611                              String    interfaceVersion;
5612                      
5613                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5614                                                interfaceType,
5615                                                interfaceVersion);
5616                      
5617                              if (interfaceType == "JMPI")
5618                              {
5619                                 // public abstract void setPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
5620                                 //                                        java.lang.String               oclass,
5621                                 //                                        java.lang.String               pName,
5622                                 //                                        org.pegasus.jmpi.CIMValue      val)
5623                                 //        throws org.pegasus.jmpi.CIMException
5624                                 //
5625                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5626                                                       "setPropertyValue",
5627                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
5628 mark.hamzy      1.26 
5629 mark.hamzy      1.43            if (id != NULL)
5630                                 {
5631                                     eMethodFound = METHOD_PROPERTYPROVIDER;
5632                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER."<<PEGASUS_STD(endl));
5633                                 }
5634                              }
5635                              else if (interfaceType == "JMPIExperimental")
5636                              {
5637                                 // public abstract void setPropertyValue (org.pegasus.jmpi.OperationContext oc,
5638                                 //                                        org.pegasus.jmpi.CIMObjectPath    cop,
5639                                 //                                        java.lang.String                  oclass,
5640                                 //                                        java.lang.String                  pName,
5641                                 //                                        org.pegasus.jmpi.CIMValue         val)
5642                                 //        throws org.pegasus.jmpi.CIMException
5643                                 //
5644                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5645                                                       "setPropertyValue",
5646 mark.hamzy      1.46                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
5647 mark.hamzy      1.26 
5648 mark.hamzy      1.43            if (id != NULL)
5649                                 {
5650                                     eMethodFound = METHOD_PROPERTYPROVIDER2;
5651                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_PROPERTYPROVIDER2."<<PEGASUS_STD(endl));
5652                                 }
5653 mark.hamzy      1.26         }
5654                      
5655                              if (id == NULL)
5656                              {
5657                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
5658 mark.hamzy      1.43 
5659                                  PEG_METHOD_EXIT();
5660                      
5661                                  STAT_COPYDISPATCHER
5662                      
5663                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5664                                                                 MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5665                                                                                     "Could not find a method for the provider based on InterfaceType."));
5666 mark.hamzy      1.26         }
5667                      
5668                              JMPIjvm::checkException(env);
5669                      
5670                              switch (eMethodFound)
5671                              {
5672 mark.hamzy      1.43         case METHOD_PROPERTYPROVIDER:
5673                              {
5674                                  jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5675                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5676                      
5677                                  JMPIjvm::checkException(env);
5678                      
5679                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5680                      
5681                                  JMPIjvm::checkException(env);
5682                      
5683                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5684                      
5685                                  JMPIjvm::checkException(env);
5686                      
5687                                  CIMValue *val = new CIMValue (request->newValue);
5688                      
5689                                  JMPIjvm::checkException(env);
5690                      
5691                                  jint    jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
5692                                  jobject jval    = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5693 mark.hamzy      1.43 
5694                                  JMPIjvm::checkException(env);
5695                      
5696                                  STAT_GETSTARTTIME;
5697                      
5698                                  env->CallVoidMethod ((jobject)pr.jProvider,
5699                                                       id,
5700                                                       jcop,
5701                                                       joclass,
5702                                                       jpName,
5703                                                       jval);
5704                      
5705                                  JMPIjvm::checkException(env);
5706                      
5707                                  STAT_PMS_PROVIDEREND;
5708                                  break;
5709                              }
5710                      
5711                              case METHOD_PROPERTYPROVIDER2:
5712 mark.hamzy      1.26         {
5713 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
5714                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
5715                      
5716 mark.hamzy      1.27             jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5717 mark.hamzy      1.26             jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
5718                      
5719                                  JMPIjvm::checkException(env);
5720                      
5721                                  jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
5722                      
5723                                  JMPIjvm::checkException(env);
5724                      
5725                                  jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
5726                      
5727                                  JMPIjvm::checkException(env);
5728                      
5729 mark.hamzy      1.27             CIMValue *val = new CIMValue (request->newValue);
5730 mark.hamzy      1.26 
5731                                  JMPIjvm::checkException(env);
5732                      
5733 mark.hamzy      1.27             jint    jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
5734 mark.hamzy      1.26             jobject jval    = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
5735                      
5736                                  JMPIjvm::checkException(env);
5737                      
5738                                  STAT_GETSTARTTIME;
5739                      
5740                                  env->CallVoidMethod ((jobject)pr.jProvider,
5741                                                       id,
5742 mark.hamzy      1.43                                  joc,
5743 mark.hamzy      1.26                                  jcop,
5744                                                       joclass,
5745                                                       jpName,
5746                                                       jval);
5747                      
5748                                  JMPIjvm::checkException(env);
5749                      
5750 mark.hamzy      1.43             if (joc)
5751                                  {
5752                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
5753                      
5754                                     JMPIjvm::checkException(env);
5755                                  }
5756                      
5757 mark.hamzy      1.26             STAT_PMS_PROVIDEREND;
5758                                  break;
5759                              }
5760                      
5761                              case METHOD_UNKNOWN:
5762                              {
5763                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
5764                                  break;
5765                              }
5766                              }
5767                          }
5768                          HandlerCatch(handler);
5769                      
5770                          if (env) JMPIjvm::detachThread();
5771                      
5772                          PEG_METHOD_EXIT();
5773                      
5774 w.white         1.31     STAT_COPYDISPATCHER
5775                      
5776 mark.hamzy      1.26     return(response);
5777                      }
5778                      
5779 schuur          1.1  Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
5780                      {
5781 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
5782                      
5783                          HandlerIntroMethod(InvokeMethod,message,request,response,handler);
5784 schuur          1.1  
5785 mark.hamzy      1.25     typedef enum {
5786                             METHOD_UNKNOWN = 0,
5787 mark.hamzy      1.43        METHOD_CIMMETHODPROVIDER,
5788                             METHOD_CIMMETHODPROVIDER2,
5789                             METHOD_METHODPROVIDER,
5790                             METHOD_METHODPROVIDER2,
5791 mark.hamzy      1.25     } METHOD_VERSION;
5792                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
5793                          JNIEnv          *env           = NULL;
5794 schuur          1.13 
5795 schuur          1.1      try {
5796                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
5797                                  "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0  Name space: $1  Class name: $2",
5798                                  System::getHostName(),
5799                                  request->nameSpace.getString(),
5800                                  request->instanceName.getClassName().getString());
5801                      
5802 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));
5803                      
5804 schuur          1.1          // make target object path
5805 mark.hamzy      1.27         CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
5806                                                                             request->nameSpace,
5807                                                                             request->instanceName.getClassName(),
5808                                                                             request->instanceName.getKeyBindings());
5809 schuur          1.1  
5810                              // resolve provider name
5811 kumpf           1.2          ProviderName name = _resolveProviderName(
5812                                  request->operationContext.get(ProviderIdContainer::NAME));
5813 schuur          1.1  
5814                              // get cached or load new provider module
5815 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
5816                                                                                               name.getLogicalName(),
5817                                                                                               String::EMPTY);
5818 schuur          1.1  
5819 mark.hamzy      1.25         JMPIProvider &pr=ph.GetProvider();
5820 schuur          1.1  
5821 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.invokeMethod: " + pr.getName());
5822 schuur          1.1  
5823 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
5824 schuur          1.11 
5825 mark.hamzy      1.25         JvmVector *jv = 0;
5826 mark.hamzy      1.23 
5827 mark.hamzy      1.25         env = JMPIjvm::attachThread(&jv);
5828 schuur          1.11 
5829 mark.hamzy      1.37         if (!env)
5830                              {
5831 mark.hamzy      1.43             PEG_METHOD_EXIT();
5832                      
5833                                  STAT_COPYDISPATCHER
5834                      
5835                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5836                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
5837                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
5838                              }
5839                      
5840                              JMPIProvider::pm_service_op_lock op_lock(&pr);
5841                      
5842                              STAT_GETSTARTTIME;
5843                      
5844                              jmethodID id               = NULL;
5845                              String    interfaceType;
5846                              String    interfaceVersion;
5847                      
5848                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
5849                                                interfaceType,
5850                                                interfaceVersion);
5851                      
5852 mark.hamzy      1.43         if (interfaceType == "JMPI")
5853                              {
5854                                 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath cop,
5855                                 //                                                         java.lang.String               name,
5856                                 //                                                         java.util.Vector               in,
5857                                 //                                                         java.util.Vector               out)
5858                                 //        throws org.pegasus.jmpi.CIMException
5859                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5860                                                       "invokeMethod",
5861                                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5862                      
5863                                 if (id != NULL)
5864                                 {
5865                                     eMethodFound = METHOD_METHODPROVIDER;
5866                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER."<<PEGASUS_STD(endl));
5867                                 }
5868                      
5869                                 if (id == NULL)
5870                                 {
5871                                     env->ExceptionClear();
5872                      
5873 mark.hamzy      1.43                // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath op,
5874                                     //                                                java.lang.String               methodName,
5875                                     //                                                org.pegasus.jmpi.CIMArgument[] inArgs,
5876                                     //                                                org.pegasus.jmpi.CIMArgument[] outArgs)
5877                                     //        throws org.pegasus.jmpi.CIMException
5878                                     id = env->GetMethodID((jclass)pr.jProviderClass,
5879                                                           "invokeMethod",
5880                                                           "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5881                      
5882                                     if (id != NULL)
5883                                     {
5884                                         eMethodFound = METHOD_CIMMETHODPROVIDER;
5885                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER."<<PEGASUS_STD(endl));
5886                                     }
5887                                 }
5888                              }
5889                              else if (interfaceType == "JMPIExperimental")
5890                              {
5891                                 // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5892                                 //                                                         org.pegasus.jmpi.CIMObjectPath    cop,
5893                                 //                                                         java.lang.String                  name,
5894 mark.hamzy      1.43            //                                                         java.util.Vector                  in,
5895                                 //                                                         java.util.Vector                  out)
5896                                 //        throws org.pegasus.jmpi.CIMException
5897                                 id = env->GetMethodID((jclass)pr.jProviderClass,
5898                                                       "invokeMethod",
5899                                                       "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
5900                      
5901                                 if (id != NULL)
5902                                 {
5903                                     eMethodFound = METHOD_METHODPROVIDER2;
5904                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_METHODPROVIDER2."<<PEGASUS_STD(endl));
5905                                 }
5906                      
5907                                 if (id == NULL)
5908                                 {
5909                                     env->ExceptionClear();
5910                      
5911                                     // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.OperationContext oc,
5912                                     //                                                org.pegasus.jmpi.CIMObjectPath    op,
5913                                     //                                                java.lang.String                  methodName,
5914                                     //                                                org.pegasus.jmpi.CIMArgument[]    inArgs,
5915 mark.hamzy      1.43                //                                                org.pegasus.jmpi.CIMArgument[]    outArgs)
5916                                     //        throws org.pegasus.jmpi.CIMException
5917                                     id = env->GetMethodID((jclass)pr.jProviderClass,
5918                                                           "invokeMethod",
5919                                                           "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
5920                      
5921                                     if (id != NULL)
5922                                     {
5923                                         eMethodFound = METHOD_CIMMETHODPROVIDER2;
5924                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_CIMMETHODPROVIDER2."<<PEGASUS_STD(endl));
5925                                     }
5926                                 }
5927                              }
5928                      
5929                              if (id == NULL)
5930                              {
5931                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: No method found!"<<PEGASUS_STD(endl));
5932                      
5933                                 PEG_METHOD_EXIT();
5934                      
5935                                 STAT_COPYDISPATCHER
5936 mark.hamzy      1.43 
5937                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
5938                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
5939                                                                                    "Could not find a method for the provider based on InterfaceType."));
5940                              }
5941                      
5942                              JMPIjvm::checkException(env);
5943                      
5944                              switch (eMethodFound)
5945                              {
5946                              case METHOD_CIMMETHODPROVIDER:
5947                              {
5948                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
5949                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
5950                      
5951                                  JMPIjvm::checkException(env);
5952                      
5953                                  jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
5954                      
5955                                  JMPIjvm::checkException(env);
5956                      
5957 mark.hamzy      1.43             Uint32 m=request->inParameters.size();
5958                      
5959                                  jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
5960                      
5961                                  for (Uint32 i=0; i<m; i++) {
5962                                    CIMParamValue *parm    = new CIMParamValue(request->inParameters[i]);
5963                                    jint           jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
5964                                    jobject        jArg    = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
5965                      
5966                                    env->SetObjectArrayElement(jArIn,i,jArg);
5967                                  }
5968                      
5969                                  jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
5970                      
5971                                  jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
5972                                                                            id,
5973                                                                            jcop,
5974                                                                            jMethod,
5975                                                                            jArIn,
5976                                                                            jArOut);
5977                                  JMPIjvm::checkException(env);
5978 mark.hamzy      1.37 
5979 mark.hamzy      1.43             STAT_PMS_PROVIDEREND;
5980 mark.hamzy      1.37 
5981 mark.hamzy      1.43             handler.processing();
5982 mark.hamzy      1.37 
5983 mark.hamzy      1.43             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
5984                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
5985 schuur          1.11 
5986 mark.hamzy      1.43             handler.deliver(*valueRet);
5987 schuur          1.1  
5988 mark.hamzy      1.43             for (int i=0; i<24; i++) {
5989                                      jobject jArg = env->GetObjectArrayElement(jArOut,i);
5990 mark.hamzy      1.25 
5991 mark.hamzy      1.43                 JMPIjvm::checkException(env);
5992 mark.hamzy      1.25 
5993 mark.hamzy      1.43                 if (jArg==NULL)
5994                                         break;
5995 mark.hamzy      1.25 
5996 mark.hamzy      1.43                 jint           jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
5997                                      CIMParamValue *p     = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
5998 mark.hamzy      1.25 
5999 mark.hamzy      1.43                 JMPIjvm::checkException(env);
6000 mark.hamzy      1.25 
6001 mark.hamzy      1.43                 handler.deliverParamValue(*p);
6002 mark.hamzy      1.25             }
6003 mark.hamzy      1.43 
6004                                  handler.complete();
6005                                  break;
6006 mark.hamzy      1.23         }
6007 mark.hamzy      1.25 
6008 mark.hamzy      1.43         case METHOD_CIMMETHODPROVIDER2:
6009                              {
6010                                  jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6011                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6012 schuur          1.11 
6013 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6014                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6015 mark.hamzy      1.25 
6016                                  JMPIjvm::checkException(env);
6017                      
6018 mark.hamzy      1.29             jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6019                      
6020 mark.hamzy      1.23             JMPIjvm::checkException(env);
6021                      
6022 mark.hamzy      1.25             Uint32 m=request->inParameters.size();
6023                      
6024                                  jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
6025 mark.hamzy      1.29 
6026 mark.hamzy      1.25             for (Uint32 i=0; i<m; i++) {
6027 mark.hamzy      1.29               CIMParamValue *parm    = new CIMParamValue(request->inParameters[i]);
6028                                    jint           jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
6029                                    jobject        jArg    = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
6030 mark.hamzy      1.23 
6031 mark.hamzy      1.25               env->SetObjectArrayElement(jArIn,i,jArg);
6032                                  }
6033 mark.hamzy      1.23 
6034 mark.hamzy      1.25             jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
6035 mark.hamzy      1.23 
6036 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6037                                                                            id,
6038 mark.hamzy      1.43                                                       joc,
6039 mark.hamzy      1.29                                                       jcop,
6040                                                                            jMethod,
6041                                                                            jArIn,
6042                                                                            jArOut);
6043 mark.hamzy      1.23             JMPIjvm::checkException(env);
6044                      
6045                                  STAT_PMS_PROVIDEREND;
6046                      
6047 mark.hamzy      1.43             if (joc)
6048                                  {
6049                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6050                      
6051                                     JMPIjvm::checkException(env);
6052                                  }
6053                      
6054 mark.hamzy      1.23             handler.processing();
6055                      
6056 mark.hamzy      1.29             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6057                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
6058 mark.hamzy      1.23 
6059 mark.hamzy      1.29             handler.deliver(*valueRet);
6060 schuur          1.13 
6061 mark.hamzy      1.25             for (int i=0; i<24; i++) {
6062 mark.hamzy      1.29                 jobject jArg = env->GetObjectArrayElement(jArOut,i);
6063                      
6064 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6065 schuur          1.13 
6066 mark.hamzy      1.29                 if (jArg==NULL)
6067                                         break;
6068 schuur          1.13 
6069 mark.hamzy      1.29                 jint           jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
6070                                      CIMParamValue *p     = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
6071 schuur          1.13 
6072 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6073 schuur          1.1  
6074 mark.hamzy      1.25                 handler.deliverParamValue(*p);
6075 mark.hamzy      1.23             }
6076 schuur          1.1  
6077 mark.hamzy      1.23             handler.complete();
6078 mark.hamzy      1.25             break;
6079 mark.hamzy      1.23         }
6080 schuur          1.11 
6081 mark.hamzy      1.43         case METHOD_METHODPROVIDER:
6082                              {
6083                                  jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6084                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6085                      
6086                                  JMPIjvm::checkException(env);
6087                      
6088                                  jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6089                      
6090                                  JMPIjvm::checkException(env);
6091                      
6092                                  jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
6093                      
6094                                  JMPIjvm::checkException(env);
6095                      
6096                                  for (int i=0,m=request->inParameters.size(); i<m; i++)
6097                                  {
6098                                      const CIMParamValue &parm  = request->inParameters[i];
6099                                      const CIMValue       v     = parm.getValue();
6100                                      CIMProperty         *p     = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
6101                                      jint                 jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
6102 mark.hamzy      1.43                 jobject              jp    = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
6103                      
6104                                      env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
6105                                   }
6106                      
6107                                  jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
6108                                  JMPIjvm::checkException(env);
6109                      
6110                                  jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6111                                                                            id,
6112                                                                            jcop,
6113                                                                            jMethod,
6114                                                                            jVecIn,
6115                                                                            jVecOut);
6116                                  JMPIjvm::checkException(env);
6117                      
6118                                  STAT_PMS_PROVIDEREND;
6119                      
6120                                  handler.processing();
6121                      
6122                                  jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6123 mark.hamzy      1.43             CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
6124                      
6125                                  handler.deliver(*valueRet);
6126                      
6127                                  for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
6128                                  {
6129                                      JMPIjvm::checkException(env);
6130                      
6131                                      jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
6132                      
6133                                      JMPIjvm::checkException(env);
6134                      
6135                                      jint         jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
6136                                      CIMProperty *p     = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
6137                      
6138                                      JMPIjvm::checkException(env);
6139                      
6140                                      handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6141                                  }
6142                      
6143                                  handler.complete();
6144 mark.hamzy      1.43             break;
6145                              }
6146                      
6147                              case METHOD_METHODPROVIDER2:
6148 mark.hamzy      1.25         {
6149 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6150                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6151                      
6152 mark.hamzy      1.29             jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
6153                                  jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6154 mark.hamzy      1.25 
6155                                  JMPIjvm::checkException(env);
6156                      
6157 mark.hamzy      1.29             jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
6158                      
6159 mark.hamzy      1.25             JMPIjvm::checkException(env);
6160                      
6161 mark.hamzy      1.29             jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
6162                      
6163 mark.hamzy      1.25             JMPIjvm::checkException(env);
6164                      
6165 mark.hamzy      1.29             for (int i=0,m=request->inParameters.size(); i<m; i++)
6166                                  {
6167                                      const CIMParamValue &parm  = request->inParameters[i];
6168                                      const CIMValue       v     = parm.getValue();
6169                                      CIMProperty         *p     = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
6170                                      jint                 jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
6171                                      jobject              jp    = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
6172 mark.hamzy      1.23 
6173 mark.hamzy      1.29                 env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
6174 mark.hamzy      1.25              }
6175 mark.hamzy      1.23 
6176 mark.hamzy      1.25             jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
6177                                  JMPIjvm::checkException(env);
6178 mark.hamzy      1.23 
6179 mark.hamzy      1.29             jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
6180                                                                            id,
6181 mark.hamzy      1.43                                                       joc,
6182 mark.hamzy      1.29                                                       jcop,
6183                                                                            jMethod,
6184                                                                            jVecIn,
6185                                                                            jVecOut);
6186 mark.hamzy      1.23             JMPIjvm::checkException(env);
6187                      
6188                                  STAT_PMS_PROVIDEREND;
6189                      
6190 mark.hamzy      1.43             if (joc)
6191                                  {
6192                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6193                      
6194                                     JMPIjvm::checkException(env);
6195                                  }
6196                      
6197 mark.hamzy      1.23             handler.processing();
6198 schuur          1.1  
6199 mark.hamzy      1.29             jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
6200                                  CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
6201 mark.hamzy      1.23 
6202 mark.hamzy      1.29             handler.deliver(*valueRet);
6203 mark.hamzy      1.23 
6204 mark.hamzy      1.29             for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
6205                                  {
6206 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6207 schuur          1.13 
6208 mark.hamzy      1.29                 jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
6209                      
6210 mark.hamzy      1.25                 JMPIjvm::checkException(env);
6211 schuur          1.13 
6212 mark.hamzy      1.29                 jint         jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
6213                                      CIMProperty *p     = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
6214 schuur          1.13 
6215 mark.hamzy      1.23                 JMPIjvm::checkException(env);
6216 schuur          1.13 
6217 mark.hamzy      1.25                 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
6218                                  }
6219                      
6220                                  handler.complete();
6221                                  break;
6222                              }
6223 mark.hamzy      1.23 
6224 mark.hamzy      1.25         case METHOD_UNKNOWN:
6225                              {
6226                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: should not be here!"<<PEGASUS_STD(endl));
6227                                  break;
6228                              }
6229 mark.hamzy      1.23         }
6230 schuur          1.1      }
6231                          HandlerCatch(handler);
6232 schuur          1.11 
6233                          if (env) JMPIjvm::detachThread();
6234                      
6235 schuur          1.1      PEG_METHOD_EXIT();
6236                      
6237 w.white         1.31     STAT_COPYDISPATCHER
6238                      
6239 schuur          1.11     return(response);
6240 schuur          1.1  }
6241 mark.hamzy      1.23 
6242 schuur          1.1  int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
6243                                                        String& providerName, String& location)
6244                      {
6245                          Uint32 pos = pInstance.findProperty(CIMName ("Name"));
6246                          pInstance.getProperty(pos).getValue().get(providerName);
6247                      
6248                          pos = pmInstance.findProperty(CIMName ("Location"));
6249                          pmInstance.getProperty(pos).getValue().get(location);
6250                          return 0;
6251                      }
6252                      
6253 mark.hamzy      1.44 CMPI_SelectExp *
6254                      newSelectExp (CIMOMHandleQueryContext *qContext,
6255                                    OperationContext        *ctx,
6256                                    String&                  query,
6257                                    String&                  queryLanguage,
6258                                    CIMNamespaceName&        nameSpace,
6259                                    Array<CIMName>&          classNames,
6260                                    CIMPropertyList&         propertyList)
6261                      {
6262                         CMPI_SelectExp *eSelx = NULL;
6263                      
6264                         eSelx = new CMPI_SelectExp (*ctx,
6265                                                     qContext,
6266                                                     query,
6267                                                     queryLanguage);
6268                      
6269                         if (!eSelx)
6270                         {
6271                            return eSelx;
6272                         }
6273                      
6274 mark.hamzy      1.44    for (Uint32 i = 0, n = classNames.size (); i < n; i++)
6275                         {
6276                             CIMObjectPath className (System::getHostName(),
6277                                                      nameSpace,
6278                                                      classNames[i]);
6279                      
6280                             eSelx->classNames.append (className);
6281                         }
6282                      
6283                         if (!propertyList.isNull ())
6284                         {
6285                            Array<CIMName> p      = propertyList.getPropertyNameArray ();
6286                            int            pCount = p.size ();
6287                      
6288                            eSelx->props = (const char**)malloc ((1 + pCount) * sizeof (char*));
6289                      
6290                            for (int i = 0; i < pCount; i++)
6291                            {
6292                               eSelx->props[i] = strdup (p[i].getString ().getCString ());
6293                            }
6294                      
6295 mark.hamzy      1.44       eSelx->props[pCount] = NULL;
6296                         }
6297                      
6298                         return eSelx;
6299                      }
6300                      
6301 schuur          1.1  Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
6302                      {
6303 konrad.r        1.15     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
6304 schuur          1.1  
6305 mark.hamzy      1.23     HandlerIntroInd(CreateSubscription,message,request,response,handler);
6306                      
6307 mark.hamzy      1.25     typedef enum {
6308                             METHOD_UNKNOWN = 0,
6309 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
6310                             METHOD_EVENTPROVIDER2,
6311 mark.hamzy      1.25     } METHOD_VERSION;
6312 mark.hamzy      1.44     METHOD_VERSION  eMethodFound = METHOD_UNKNOWN;
6313                          JNIEnv         *env          = NULL;
6314 mark.hamzy      1.25 
6315 schuur          1.1      try {
6316 mark.hamzy      1.44         String               fileName,
6317                                                   providerName,
6318 mark.hamzy      1.25                              providerLocation;
6319                              CIMInstance          req_provider,
6320                                                   req_providerModule;
6321 mark.hamzy      1.44         ProviderIdContainer  pidc               = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
6322 mark.hamzy      1.25 
6323 mark.hamzy      1.44         req_provider       = pidc.getProvider ();
6324                              req_providerModule = pidc.getModule ();
6325 mark.hamzy      1.25 
6326 mark.hamzy      1.44         LocateIndicationProviderNames (req_provider,
6327                                                             req_providerModule,
6328                                                             providerName,
6329                                                             providerLocation);
6330                      
6331                              fileName = resolveFileName (providerLocation);
6332                      
6333                              Logger::put (Logger::STANDARD_LOG,
6334                                           System::CIMSERVER,
6335                                           Logger::TRACE,
6336                                           "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
6337                                           System::getHostName(),
6338                                           request->nameSpace.getString(),
6339                                           providerName);
6340                      
6341                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "
6342                                                   <<System::getHostName()
6343                                                   <<", namespace = "
6344                                                   <<request->nameSpace.getString()
6345                                                   <<", providername = "
6346                                                   <<providerName
6347 mark.hamzy      1.44                              <<", fileName = "
6348                                                   <<fileName
6349                                                   <<PEGASUS_STD(endl));
6350 schuur          1.1  
6351                              // get cached or load new provider module
6352 mark.hamzy      1.44         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6353                                                                                               providerName,
6354 mark.hamzy      1.43                                                                          String::EMPTY);
6355 schuur          1.1  
6356 carolann.graves 1.21         //
6357                              //  Save the provider instance from the request
6358                              //
6359                              ph.GetProvider ().setProviderInstance (req_provider);
6360                      
6361 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
6362 mark.hamzy      1.25 
6363 mark.hamzy      1.44         //
6364                              //  Increment count of current subscriptions for this provider
6365                              //
6366                              pr.testIfZeroAndIncrementSubscriptions ();
6367 schuur          1.1  
6368 mark.hamzy      1.44         SubscriptionFilterConditionContainer  sub_cntr = request->operationContext.get (SubscriptionFilterConditionContainer::NAME);
6369                              indProvRecord                        *prec     = NULL;
6370                              bool                                  fNewPrec = false;
6371 schuur          1.1  
6372 mark.hamzy      1.25         {
6373 mark.hamzy      1.44            AutoMutex lock (mutexProvTab);
6374                      
6375                                 provTab.lookup (providerName, prec);
6376 schuur          1.12 
6377 mark.hamzy      1.44            if (!prec)
6378                                 {
6379                                     fNewPrec = true;
6380 schuur          1.1  
6381 mark.hamzy      1.44                prec = new indProvRecord ();
6382 schuur          1.1  
6383 mark.hamzy      1.44                // convert arguments
6384                                     prec->ctx = new OperationContext ();
6385 schuur          1.12 
6386 mark.hamzy      1.44                prec->ctx->insert (request->operationContext.get (IdentityContainer::NAME));
6387                                     prec->ctx->insert (request->operationContext.get (AcceptLanguageListContainer::NAME));
6388                                     prec->ctx->insert (request->operationContext.get (ContentLanguageListContainer::NAME));
6389                                     prec->ctx->insert (request->operationContext.get (SubscriptionInstanceContainer::NAME));
6390                                     prec->ctx->insert (request->operationContext.get (SubscriptionFilterConditionContainer::NAME));
6391 konrad.r        1.22 
6392 mark.hamzy      1.44                prec->enabled = true;
6393 konrad.r        1.22 
6394 mark.hamzy      1.44                prec->handler = new EnableIndicationsResponseHandler (0,
6395                                                                                           0,
6396                                                                                           req_provider,
6397                                                                                           _indicationCallback,
6398                                                                                           _responseChunkCallback);
6399 konrad.r        1.22 
6400 mark.hamzy      1.44                DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to provTab "<<providerName<<PEGASUS_STD(endl));
6401 schuur          1.1  
6402 mark.hamzy      1.44                provTab.insert (providerName, prec);
6403                                 }
6404                              }
6405 schuur          1.1  
6406 mark.hamzy      1.44         {
6407                                 AutoMutex lock (prec->mutex);
6408 schuur          1.1  
6409 mark.hamzy      1.44            prec->count++;
6410 schuur          1.1          }
6411                      
6412 mark.hamzy      1.44         // Add a selection record for JNI CIMOMHandle deliverEvent calls
6413                              indSelectRecord *srec = new indSelectRecord ();
6414 mark.hamzy      1.29 
6415                              {
6416 mark.hamzy      1.44            srec->query         = request->query;
6417                                 srec->queryLanguage = sub_cntr.getQueryLanguage ();
6418                                 srec->propertyList  = request->propertyList;
6419                      
6420                                 CIMOMHandleQueryContext *qContext = new CIMOMHandleQueryContext (CIMNamespaceName (request->nameSpace.getString ()),
6421                                                                                                  *pr._cimom_handle);
6422                                 CMPI_SelectExp          *eSelx    = newSelectExp (qContext,
6423                                                                                   prec->ctx,
6424                                                                                   srec->query,
6425                                                                                   srec->queryLanguage,
6426                                                                                   request->nameSpace,
6427                                                                                   request->classNames,
6428                                                                                   srec->propertyList);
6429                      
6430                                 srec->eSelx    = eSelx;
6431                                 srec->qContext = qContext;
6432                      
6433                                 CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6434                      
6435                                 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
6436 mark.hamzy      1.29 
6437 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
6438 mark.hamzy      1.29 
6439 mark.hamzy      1.44            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Adding to selxTab "<<sPath.toString ()<<PEGASUS_STD(endl));
6440                      
6441                                 selxTab.insert (sPath.toString (), srec);
6442                      
6443                                 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));
6444 schuur          1.1          }
6445                      
6446 mark.hamzy      1.44         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createSubscriptionRequest: " + pr.getName());
6447                      
6448                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
6449                      
6450 mark.hamzy      1.25         JvmVector *jv = 0;
6451                      
6452                              env = JMPIjvm::attachThread(&jv);
6453                      
6454 mark.hamzy      1.37         if (!env)
6455                              {
6456                                  PEG_METHOD_EXIT();
6457                      
6458                                  STAT_COPYDISPATCHER
6459                      
6460                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6461                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6462                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6463                              }
6464                      
6465 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
6466                      
6467                              STAT_GETSTARTTIME;
6468                      
6469 mark.hamzy      1.43         jmethodID id               = NULL;
6470                              String    interfaceType;
6471                              String    interfaceVersion;
6472                      
6473 mark.hamzy      1.44         getInterfaceType (pidc,
6474 mark.hamzy      1.43                           interfaceType,
6475                                                interfaceVersion);
6476                      
6477                              if (interfaceType == "JMPI")
6478                              {
6479                                 // public void activateFilter (org.pegasus.jmpi.SelectExp     filter,
6480                                 //                             java.lang.String               eventType,
6481                                 //                             org.pegasus.jmpi.CIMObjectPath classPath,
6482                                 //                             boolean                        firstActivation)
6483                                 //        throws org.pegasus.jmpi.CIMException
6484 mark.hamzy      1.44            id = env->GetMethodID ((jclass)pr.jProviderClass,
6485                                                        "activateFilter",
6486                                                        "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6487 mark.hamzy      1.43 
6488                                 if (id != NULL)
6489                                 {
6490                                     eMethodFound = METHOD_EVENTPROVIDER;
6491                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6492                                 }
6493                              }
6494                              else if (interfaceType == "JMPIExperimental")
6495                              {
6496                                 // public void activateFilter (org.pegasus.jmpi.OperationContext oc,
6497                                 //                             org.pegasus.jmpi.SelectExp        filter,
6498                                 //                             java.lang.String                  eventType,
6499                                 //                             org.pegasus.jmpi.CIMObjectPath    classPath,
6500                                 //                             boolean                           firstActivation)
6501                                 //        throws org.pegasus.jmpi.CIMException
6502 mark.hamzy      1.44            id = env->GetMethodID ((jclass)pr.jProviderClass,
6503                                                        "activateFilter",
6504                                                        "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6505 mark.hamzy      1.25 
6506 mark.hamzy      1.43            if (id != NULL)
6507                                 {
6508                                     eMethodFound = METHOD_EVENTPROVIDER2;
6509                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6510                                 }
6511                              }
6512 schuur          1.12 
6513 mark.hamzy      1.43         if (id == NULL)
6514 mark.hamzy      1.25         {
6515 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6516                      
6517                                 PEG_METHOD_EXIT();
6518                      
6519                                 STAT_COPYDISPATCHER
6520                      
6521                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6522                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6523                                                                                    "Could not find a method for the provider based on InterfaceType."));
6524 mark.hamzy      1.25         }
6525 mark.hamzy      1.23 
6526                              JMPIjvm::checkException(env);
6527                      
6528 mark.hamzy      1.25         switch (eMethodFound)
6529                              {
6530 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
6531                              {
6532 mark.hamzy      1.44             CMPI_SelectExp *eSelx     = newSelectExp (srec->qContext,
6533                                                                            prec->ctx,
6534                                                                            srec->query,
6535                                                                            srec->queryLanguage,
6536                                                                            request->nameSpace,
6537                                                                            request->classNames,
6538                                                                            srec->propertyList);
6539                                  jint            jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6540                                  jobject         jEselx    = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
6541 mark.hamzy      1.43 
6542                                  JMPIjvm::checkException(env);
6543                      
6544 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6545 mark.hamzy      1.43 
6546                                  JMPIjvm::checkException(env);
6547                      
6548 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6549                                                                              request->nameSpace,
6550                                                                              request->classNames[0]);
6551                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6552                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6553 mark.hamzy      1.43 
6554                                  JMPIjvm::checkException(env);
6555                      
6556 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6557                                                       id,
6558                                                       jEselx,
6559                                                       jType,
6560                                                       jcop,
6561                                                       (jboolean)fNewPrec);
6562 mark.hamzy      1.43 
6563                                  JMPIjvm::checkException(env);
6564                      
6565                                  STAT_PMS_PROVIDEREND;
6566                                  break;
6567                              }
6568                      
6569                              case METHOD_EVENTPROVIDER2:
6570 mark.hamzy      1.25         {
6571 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6572                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6573                      
6574 mark.hamzy      1.44             CMPI_SelectExp *eSelx     = newSelectExp (srec->qContext,
6575                                                                            prec->ctx,
6576                                                                            srec->query,
6577                                                                            srec->queryLanguage,
6578                                                                            request->nameSpace,
6579                                                                            request->classNames,
6580                                                                            srec->propertyList);
6581                                  jint            jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6582                                  jobject         jEselx    = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
6583 mark.hamzy      1.25 
6584                                  JMPIjvm::checkException(env);
6585                      
6586 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6587 schuur          1.12 
6588 mark.hamzy      1.25             JMPIjvm::checkException(env);
6589 schuur          1.1  
6590 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6591                                                                              request->nameSpace,
6592                                                                              request->classNames[0]);
6593                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6594                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6595 schuur          1.1  
6596 mark.hamzy      1.25             JMPIjvm::checkException(env);
6597 schuur          1.1  
6598 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6599                                                       id,
6600                                                       joc,
6601                                                       jEselx,
6602                                                       jType,
6603                                                       jcop,
6604                                                       (jboolean)fNewPrec);
6605 schuur          1.12 
6606 mark.hamzy      1.25             JMPIjvm::checkException(env);
6607 schuur          1.1  
6608 mark.hamzy      1.43             if (joc)
6609                                  {
6610                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6611                      
6612                                     JMPIjvm::checkException(env);
6613                                  }
6614                      
6615 mark.hamzy      1.25             STAT_PMS_PROVIDEREND;
6616                                  break;
6617 carolann.graves 1.21         }
6618                      
6619 mark.hamzy      1.25         case METHOD_UNKNOWN:
6620                              {
6621                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6622                                  break;
6623                              }
6624                              }
6625 schuur          1.1      }
6626                          HandlerCatch(handler);
6627 schuur          1.12 
6628 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
6629                      
6630 schuur          1.1      PEG_METHOD_EXIT();
6631                      
6632                          return(response);
6633                      }
6634                      
6635                      Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
6636                      {
6637                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
6638                      
6639 mark.hamzy      1.23     HandlerIntroInd(DeleteSubscription,message,request,response,handler);
6640                      
6641 mark.hamzy      1.25     typedef enum {
6642                             METHOD_UNKNOWN = 0,
6643 mark.hamzy      1.43        METHOD_EVENTPROVIDER,
6644                             METHOD_EVENTPROVIDER2,
6645 mark.hamzy      1.25     } METHOD_VERSION;
6646 mark.hamzy      1.44     METHOD_VERSION           eMethodFound = METHOD_UNKNOWN;
6647                          JNIEnv                  *env          = NULL;
6648                          bool                     fFreePrec    = false;
6649                          indProvRecord           *prec         = NULL;
6650                          indSelectRecord         *srec         = NULL;
6651 mark.hamzy      1.25 
6652 schuur          1.1      try {
6653 mark.hamzy      1.44         String              fileName,
6654                                                  providerName,
6655 mark.hamzy      1.25                             providerLocation;
6656                              CIMInstance         req_provider,
6657                                                  req_providerModule;
6658                              ProviderIdContainer pidc               = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
6659                      
6660 mark.hamzy      1.44         req_provider       = pidc.getProvider ();
6661                              req_providerModule = pidc.getModule ();
6662                      
6663                              LocateIndicationProviderNames (req_provider,
6664                                                             req_providerModule,
6665                                                             providerName,
6666                                                             providerLocation);
6667                      
6668                              fileName = resolveFileName (providerLocation);
6669                      
6670                              Logger::put (Logger::STANDARD_LOG,
6671                                           System::CIMSERVER,
6672                                           Logger::TRACE,
6673                                           "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
6674                                           System::getHostName(),
6675                                           request->nameSpace.getString(),
6676                                           providerName);
6677                      
6678                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "
6679                                                   <<System::getHostName()
6680                                                   <<", namespace = "
6681 mark.hamzy      1.44                              <<request->nameSpace.getString()
6682                                                   <<", providername = "
6683                                                   <<providerName
6684                                                   <<", fileName = "
6685                                                   <<fileName
6686                                                   <<PEGASUS_STD(endl));
6687 se.gupta        1.9  
6688 mark.hamzy      1.44         // get cached or load new provider module
6689                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider (fileName,
6690                                                                                               providerName,
6691                                                                                               String::EMPTY);
6692 schuur          1.1  
6693 mark.hamzy      1.44         JMPIProvider &pr = ph.GetProvider ();
6694                      
6695                              {
6696                                 AutoMutex lock (mutexProvTab);
6697                      
6698                                 provTab.lookup (providerName, prec);
6699                              }
6700 schuur          1.1  
6701 mark.hamzy      1.44         {
6702                                 AutoMutex lock (prec->mutex);
6703 mark.hamzy      1.23 
6704 mark.hamzy      1.44            if (--prec->count <= 0)
6705                                 {
6706                                     DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing provTab "<<providerName<<PEGASUS_STD(endl));
6707 schuur          1.1  
6708 mark.hamzy      1.44                provTab.remove (providerName);
6709 schuur          1.1  
6710 mark.hamzy      1.44                fFreePrec = true;
6711                                 }
6712                              }
6713 mark.hamzy      1.25 
6714                              {
6715 mark.hamzy      1.44            CIMObjectPath sPath (request->subscriptionInstance.getPath ().getClassName ().getString ());
6716                      
6717                                 sPath.setNameSpace (request->subscriptionInstance.getPath ().getNameSpace ());
6718 schuur          1.1  
6719 mark.hamzy      1.44            String sPathString = sPath.toString ();
6720 mark.hamzy      1.25 
6721 mark.hamzy      1.44            AutoMutex lock (mutexSelxTab);
6722 schuur          1.1  
6723 mark.hamzy      1.44            DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Removing selxTab "<<sPathString<<PEGASUS_STD(endl));
6724 konrad.r        1.22 
6725 mark.hamzy      1.44            selxTab.lookup (sPathString, srec);
6726 schuur          1.1  
6727 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));
6728 schuur          1.1  
6729 mark.hamzy      1.44            selxTab.remove (sPathString);
6730                              }
6731 schuur          1.1  
6732 mark.hamzy      1.25         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteSubscriptionRequest: " + pr.getName());
6733 schuur          1.1  
6734 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
6735 schuur          1.1  
6736 mark.hamzy      1.25         JvmVector *jv = 0;
6737                      
6738                              env = JMPIjvm::attachThread(&jv);
6739                      
6740 mark.hamzy      1.37         if (!env)
6741                              {
6742                                  PEG_METHOD_EXIT();
6743                      
6744                                  STAT_COPYDISPATCHER
6745                      
6746                                  throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6747                                                                 MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
6748                                                                                    "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
6749                              }
6750                      
6751 mark.hamzy      1.25         JMPIProvider::pm_service_op_lock op_lock(&pr);
6752                      
6753                              STAT_GETSTARTTIME;
6754                      
6755 mark.hamzy      1.43         jmethodID id               = NULL;
6756                              String    interfaceType;
6757                              String    interfaceVersion;
6758                      
6759                              getInterfaceType (request->operationContext.get (ProviderIdContainer::NAME),
6760                                                interfaceType,
6761                                                interfaceVersion);
6762                      
6763                              if (interfaceType == "JMPI")
6764                              {
6765                                 // public void deActivateFilter (org.pegasus.jmpi.SelectExp    filter,
6766                                 //                              java.lang.String               eventType,
6767                                 //                              org.pegasus.jmpi.CIMObjectPath classPath,
6768                                 //                              boolean                        lastActivation)
6769                                 //        throws org.pegasus.jmpi.CIMException
6770                                 id = env->GetMethodID((jclass)pr.jProviderClass,
6771                                                       "deActivateFilter",
6772                                                       "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6773                      
6774                                 if (id != NULL)
6775                                 {
6776 mark.hamzy      1.43                eMethodFound = METHOD_EVENTPROVIDER;
6777                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER."<<PEGASUS_STD(endl));
6778                                 }
6779                              }
6780                              else if (interfaceType == "JMPIExperimental")
6781                              {
6782                                 // public void deActivateFilter (org.pegasus.jmpi.OperationContext oc,
6783                                 //                               org.pegasus.jmpi.SelectExp        filter,
6784                                 //                               java.lang.String                  eventType,
6785                                 //                               org.pegasus.jmpi.CIMObjectPath    classPath,
6786                                 //                               boolean                           lastActivation)
6787                                 //        throws org.pegasus.jmpi.CIMException
6788                                 id = env->GetMethodID((jclass)pr.jProviderClass,
6789                                                       "deActivateFilter",
6790 mark.hamzy      1.44                                  "(Lorg/pegasus/jmpi/OperationContext;Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
6791 mark.hamzy      1.25 
6792 mark.hamzy      1.43            if (id != NULL)
6793                                 {
6794                                     eMethodFound = METHOD_EVENTPROVIDER2;
6795                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_EVENTPROVIDER2."<<PEGASUS_STD(endl));
6796                                 }
6797                              }
6798 schuur          1.12 
6799 mark.hamzy      1.43         if (id == NULL)
6800 mark.hamzy      1.25         {
6801 mark.hamzy      1.43            DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: No method found!"<<PEGASUS_STD(endl));
6802                      
6803                                 PEG_METHOD_EXIT();
6804                      
6805                                 STAT_COPYDISPATCHER
6806                      
6807                                 throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
6808                                                                MessageLoaderParms ("ProviderManager.JMPI.METHOD_NOT_FOUND",
6809                                                                                    "Could not find a method for the provider based on InterfaceType."));
6810 mark.hamzy      1.25         }
6811 mark.hamzy      1.23 
6812                              JMPIjvm::checkException(env);
6813                      
6814 mark.hamzy      1.25         switch (eMethodFound)
6815                              {
6816 mark.hamzy      1.43         case METHOD_EVENTPROVIDER:
6817                              {
6818 mark.hamzy      1.44             CMPI_SelectExp *eSelx     = newSelectExp (srec->qContext,
6819                                                                            prec->ctx,
6820                                                                            srec->query,
6821                                                                            srec->queryLanguage,
6822                                                                            request->nameSpace,
6823                                                                            request->classNames,
6824                                                                            srec->propertyList);
6825                                  jint            jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6826                                  jobject         jEselx    = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
6827 mark.hamzy      1.43 
6828                                  JMPIjvm::checkException(env);
6829                      
6830 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6831 mark.hamzy      1.43 
6832                                  JMPIjvm::checkException(env);
6833                      
6834 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6835                                                                              request->nameSpace,
6836                                                                              request->classNames[0]);
6837                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6838                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6839 mark.hamzy      1.43 
6840                                  JMPIjvm::checkException(env);
6841                      
6842 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6843                                                       id,
6844                                                       jEselx,
6845                                                       jType,
6846                                                       jcop,
6847                                                       (jboolean)fFreePrec);
6848 mark.hamzy      1.43 
6849                                  JMPIjvm::checkException(env);
6850                      
6851                                  STAT_PMS_PROVIDEREND;
6852                                  break;
6853                              }
6854                      
6855                              case METHOD_EVENTPROVIDER2:
6856 mark.hamzy      1.25         {
6857 mark.hamzy      1.43             jint    jocRef = DEBUG_ConvertCToJava (OperationContext*, jint, &request->operationContext);
6858                                  jobject joc    = env->NewObject(jv->OperationContextClassRef,jv->OperationContextNewI,jocRef);
6859                      
6860 mark.hamzy      1.44             CMPI_SelectExp *eSelx     = newSelectExp (srec->qContext,
6861                                                                            prec->ctx,
6862                                                                            srec->query,
6863                                                                            srec->queryLanguage,
6864                                                                            request->nameSpace,
6865                                                                            request->classNames,
6866                                                                            srec->propertyList);
6867                                  jint            jEselxRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
6868                                  jobject         jEselx    = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jEselxRef);
6869 mark.hamzy      1.25 
6870                                  JMPIjvm::checkException(env);
6871                      
6872 mark.hamzy      1.44             jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
6873 schuur          1.12 
6874 mark.hamzy      1.25             JMPIjvm::checkException(env);
6875 schuur          1.12 
6876 mark.hamzy      1.44             CIMObjectPath *cop     = new CIMObjectPath (System::getHostName(),
6877                                                                              request->nameSpace,
6878                                                                              request->classNames[0]);
6879                                  jint           jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, cop);
6880                                  jobject        jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
6881 schuur          1.1  
6882 mark.hamzy      1.25             JMPIjvm::checkException(env);
6883 schuur          1.1  
6884 mark.hamzy      1.44             env->CallVoidMethod ((jobject)pr.jProvider,
6885                                                       id,
6886                                                       joc,
6887                                                       jEselx,
6888                                                       jType,
6889                                                       jcop,
6890                                                       (jboolean)fFreePrec);
6891 schuur          1.1  
6892 mark.hamzy      1.25             JMPIjvm::checkException(env);
6893 schuur          1.1  
6894 mark.hamzy      1.43             if (joc)
6895                                  {
6896                                     env->CallVoidMethod (joc, JMPIjvm::jv.OperationContextUnassociate);
6897                      
6898                                     JMPIjvm::checkException(env);
6899                                  }
6900                      
6901 mark.hamzy      1.25             STAT_PMS_PROVIDEREND;
6902                                  break;
6903                              }
6904 schuur          1.12 
6905 mark.hamzy      1.25         case METHOD_UNKNOWN:
6906                              {
6907                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
6908                                  break;
6909                              }
6910                              }
6911 mark.hamzy      1.44 
6912                              //
6913                              //  Decrement count of current subscriptions for this provider
6914                              //
6915                              pr.decrementSubscriptionsAndTestIfZero ();
6916 schuur          1.1      }
6917                          HandlerCatch(handler);
6918 schuur          1.12 
6919 mark.hamzy      1.44     if (srec)
6920                          {
6921                             if (  srec->eSelx
6922                                && srec->eSelx->props
6923                                )
6924                             {
6925                                const char **props = srec->eSelx->props;
6926                      
6927                                while (*props)
6928                                {
6929                                   const char *prop = *props;
6930                      
6931                                   props++;
6932                      
6933                                   if (prop)
6934                                   {
6935                                      free ((void *)prop);
6936                                   }
6937                                }
6938                      
6939                                free ((void *)srec->eSelx->props);
6940 mark.hamzy      1.44        }
6941                             delete srec->eSelx;
6942                             delete srec->qContext;
6943                          }
6944                          delete srec;
6945                      
6946                          if (fFreePrec)
6947                          {
6948                             delete prec->ctx;
6949                             delete prec->handler;
6950                             delete prec;
6951                          }
6952                      
6953 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
6954                      
6955 schuur          1.1      PEG_METHOD_EXIT();
6956                      
6957 w.white         1.31     STAT_COPYDISPATCHER
6958                      
6959 schuur          1.1      return(response);
6960                      }
6961                      
6962                      Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
6963                      {
6964                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
6965                      
6966                          CIMDisableModuleRequestMessage * request =
6967                              dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
6968                      
6969                          PEGASUS_ASSERT(request != 0);
6970                      
6971                          // get provider module name
6972                          String moduleName;
6973                          CIMInstance mInstance = request->providerModule;
6974                          Uint32 pos = mInstance.findProperty(CIMName ("Name"));
6975                      
6976                          if(pos != PEG_NOT_FOUND)
6977                          {
6978                              mInstance.getProperty(pos).getValue().get(moduleName);
6979                          }
6980 schuur          1.1  
6981                          Boolean disableProviderOnly = request->disableProviderOnly;
6982                      
6983                          Array<Uint16> operationalStatus;
6984 kumpf           1.2      // Assume success.
6985 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
6986 schuur          1.1  
6987 kumpf           1.2      //
6988 schuur          1.1      // Unload providers
6989 kumpf           1.2      //
6990 schuur          1.1      Array<CIMInstance> _pInstances = request->providers;
6991                      
6992                          CIMDisableModuleResponseMessage * response =
6993                              new CIMDisableModuleResponseMessage(
6994                              request->messageId,
6995                              CIMException(),
6996                              request->queueIds.copyAndPop(),
6997                              operationalStatus);
6998                      
6999                          PEGASUS_ASSERT(response != 0);
7000                      
7001                          // preserve message key
7002                          response->setKey(request->getKey());
7003                      
7004                          //
7005                          //  Set HTTP method in response from request
7006                          //
7007                          response->setHttpMethod (request->getHttpMethod ());
7008                      
7009                          PEG_METHOD_EXIT();
7010                      
7011 schuur          1.1      return(response);
7012                      }
7013                      
7014                      Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
7015                      {
7016                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
7017                      
7018                          CIMEnableModuleRequestMessage * request =
7019                              dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
7020                      
7021                          PEGASUS_ASSERT(request != 0);
7022                      
7023                          Array<Uint16> operationalStatus;
7024 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
7025 schuur          1.1  
7026                          CIMEnableModuleResponseMessage * response =
7027                              new CIMEnableModuleResponseMessage(
7028                              request->messageId,
7029                              CIMException(),
7030                              request->queueIds.copyAndPop(),
7031                              operationalStatus);
7032                      
7033                          PEGASUS_ASSERT(response != 0);
7034                      
7035                          // preserve message key
7036                          response->setKey(request->getKey());
7037                      
7038                          //  Set HTTP method in response from request
7039                          response->setHttpMethod (request->getHttpMethod ());
7040                      
7041                          PEG_METHOD_EXIT();
7042                      
7043                          return(response);
7044                      }
7045                      
7046 schuur          1.1  Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
7047                      {
7048                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
7049                      
7050                          CIMStopAllProvidersRequestMessage * request =
7051                              dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
7052                      
7053                          PEGASUS_ASSERT(request != 0);
7054                      
7055                          CIMStopAllProvidersResponseMessage * response =
7056                              new CIMStopAllProvidersResponseMessage(
7057                              request->messageId,
7058                              CIMException(),
7059                              request->queueIds.copyAndPop());
7060                      
7061                          PEGASUS_ASSERT(response != 0);
7062                      
7063                          // preserve message key
7064                          response->setKey(request->getKey());
7065                      
7066                          //  Set HTTP method in response from request
7067 schuur          1.1      response->setHttpMethod (request->getHttpMethod ());
7068                      
7069                          // tell the provider manager to shutdown all the providers
7070                          providerManager.shutdownAllProviders();
7071                      
7072                          PEG_METHOD_EXIT();
7073                      
7074                          return(response);
7075                      }
7076                      
7077 kumpf           1.4  Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
7078                      {
7079                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
7080                      
7081                          HandlerIntroInit(InitializeProvider,message,request,response,handler);
7082                      
7083                          try
7084                          {
7085                              // resolve provider name
7086 mark.hamzy      1.23         ProviderName name = _resolveProviderName(
7087                                 request->operationContext.get(ProviderIdContainer::NAME));
7088 kumpf           1.4  
7089                              // get cached or load new provider module
7090 mark.hamzy      1.43         JMPIProvider::OpProviderHolder ph = providerManager.getProvider (name.getPhysicalName(),
7091                                                                                               name.getLogicalName(),
7092                                                                                               String::EMPTY);
7093 kumpf           1.4  
7094                          }
7095                          HandlerCatch(handler);
7096                      
7097                          PEG_METHOD_EXIT();
7098                      
7099                          return(response);
7100                      }
7101                      
7102 mark.hamzy      1.25 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest (const Message * message)
7103 carolann.graves 1.21 {
7104                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
7105                           "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
7106                      
7107                          CIMSubscriptionInitCompleteRequestMessage * request =
7108                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
7109                                  (const_cast <Message *> (message));
7110                      
7111                          PEGASUS_ASSERT (request != 0);
7112                      
7113                          CIMSubscriptionInitCompleteResponseMessage * response =
7114                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
7115                                  (request->buildResponse ());
7116                      
7117                          PEGASUS_ASSERT (response != 0);
7118                      
7119                          //
7120                          //  Set indicator
7121                          //
7122                          _subscriptionInitComplete = true;
7123                      
7124 carolann.graves 1.21     //
7125                          //  For each provider that has at least one subscription, call
7126                          //  provider's enableIndications method
7127                          //
7128                          Array <JMPIProvider *> enableProviders;
7129 mark.hamzy      1.44 
7130 carolann.graves 1.21     enableProviders = providerManager.getIndicationProvidersToEnable ();
7131                      
7132                          Uint32 numProviders = enableProviders.size ();
7133 mark.hamzy      1.44 
7134                          DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: numProviders = "<<numProviders<<PEGASUS_STD(endl));
7135                      
7136                      #if 0
7137 carolann.graves 1.21     for (Uint32 i = 0; i < numProviders; i++)
7138                          {
7139                              try
7140                              {
7141                                  CIMInstance provider;
7142 mark.hamzy      1.44 
7143                                  provider = enableProviders[i]->getProviderInstance ();
7144                      
7145                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSubscriptionInitCompleteRequest: name = "<<enableProviders[i]->getName ()<<PEGASUS_STD(endl));
7146 carolann.graves 1.21 
7147                                  //
7148                                  //  Get cached or load new provider module
7149                                  //
7150 mark.hamzy      1.44             JMPIProvider::OpProviderHolder  ph   = providerManager.getProvider (enableProviders[i]->getModule ()->getFileName (),
7151                                                                                                      enableProviders[i]->getName ());
7152                                  indProvRecord                  *prec = NULL;
7153                      
7154                                  {
7155                                     AutoMutex lock (mutexProvTab);
7156                      
7157                                     provTab.lookup (enableProviders[i]->getName (), prec);
7158 carolann.graves 1.21             }
7159                              }
7160                              catch (CIMException & e)
7161                              {
7162                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7163                                      "CIMException: " + e.getMessage ());
7164                              }
7165                              catch (Exception & e)
7166                              {
7167                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7168                                      "Exception: " + e.getMessage ());
7169                              }
7170                              catch(...)
7171                              {
7172                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
7173                                      "Unknown error in handleSubscriptionInitCompleteRequest");
7174                              }
7175                          }
7176 mark.hamzy      1.44 #endif
7177 carolann.graves 1.21 
7178                          PEG_METHOD_EXIT ();
7179                          return (response);
7180                      }
7181                      
7182 schuur          1.1  Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
7183                      {
7184 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
7185                      
7186 konrad.r        1.16     CIMRequestMessage* request =
7187                              dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
7188                          PEGASUS_ASSERT(request != 0 );
7189                      
7190                          CIMResponseMessage* response = request->buildResponse();
7191                          response->cimException =
7192                              PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
7193 schuur          1.1  
7194                          PEG_METHOD_EXIT();
7195 konrad.r        1.16     return response;
7196 schuur          1.1  }
7197                      
7198 kumpf           1.2  ProviderName JMPIProviderManager::_resolveProviderName(
7199                          const ProviderIdContainer & providerId)
7200 schuur          1.1  {
7201 kumpf           1.2      String providerName;
7202                          String fileName;
7203                          String interfaceName;
7204                          CIMValue genericValue;
7205                      
7206                          genericValue = providerId.getProvider().getProperty(
7207                              providerId.getProvider().findProperty("Name")).getValue();
7208                          genericValue.get(providerName);
7209                      
7210                          genericValue = providerId.getModule().getProperty(
7211                              providerId.getModule().findProperty("Location")).getValue();
7212                          genericValue.get(fileName);
7213                          fileName = resolveFileName(fileName);
7214                      
7215                          // ATTN: This attribute is probably not required
7216                          genericValue = providerId.getModule().getProperty(
7217                              providerId.getModule().findProperty("InterfaceType")).getValue();
7218                          genericValue.get(interfaceName);
7219                      
7220                          return ProviderName(providerName, fileName, interfaceName, 0);
7221 schuur          1.1  }
7222                      
7223                      String JMPIProviderManager::resolveFileName(String fileName)
7224                      {
7225                          String name;
7226                          #if defined(PEGASUS_OS_TYPE_WINDOWS)
7227                          name = fileName; // + String(".dll");
7228                          #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
7229                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7230                          name.append(String("/") + fileName); // + String(".sl"));
7231                          #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
7232                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7233                          name.append(String("/") + fileName); // + String(".so"));
7234                          #elif defined(PEGASUS_OS_OS400)
7235                          name = filrName;
7236                          #else
7237                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
7238                          name.append(String("/") + fileName); // + String(".so"));
7239                          #endif
7240                          return name;
7241                      }
7242 schuur          1.1  
7243                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2