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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2