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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2