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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2