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

   1 karl  1.39 //%2006////////////////////////////////////////////////////////////////////////
   2 schuur 1.1  //
   3 karl   1.17 // Copyright (c) 2000, 2001, 2002 BMC Software; Hewlett-Packard Development
   4             // Company, L.P.; IBM Corp.; The Open Group; Tivoli Systems.
   5             // Copyright (c) 2003 BMC Software; Hewlett-Packard Development Company, L.P.;
   6 schuur 1.1  // IBM Corp.; EMC Corporation, The Open Group.
   7 karl   1.17 // Copyright (c) 2004 BMC Software; Hewlett-Packard Development Company, L.P.;
   8             // IBM Corp.; EMC Corporation; VERITAS Software Corporation; The Open Group.
   9 karl   1.18 // Copyright (c) 2005 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  10             // EMC Corporation; VERITAS Software Corporation; The Open Group.
  11 karl   1.39 // Copyright (c) 2006 Hewlett-Packard Development Company, L.P.; IBM Corp.;
  12             // EMC Corporation; Symantec Corporation; The Open Group.
  13 schuur 1.1  //
  14             // Permission is hereby granted, free of charge, to any person obtaining a copy
  15             // of this software and associated documentation files (the "Software"), to
  16             // deal in the Software without restriction, including without limitation the
  17             // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  18             // sell copies of the Software, and to permit persons to whom the Software is
  19             // furnished to do so, subject to the following conditions:
  20 mark.hamzy 1.40 //
  21 schuur     1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  22                 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  23                 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  24                 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  25                 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  26                 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  27                 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  28                 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  29                 //
  30                 //==============================================================================
  31                 //
  32 mark.hamzy 1.23 // Author:      Adrian Schuur, schuur@de.ibm.com
  33 schuur     1.1  //
  34 se.gupta   1.9  // Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135
  35 joyce.j    1.19 //              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for PEP#101
  36 schuur     1.1  //
  37                 //%/////////////////////////////////////////////////////////////////////////////
  38                 
  39                 #include "JMPIProviderManager.h"
  40                 
  41                 #include "JMPIImpl.h"
  42                 
  43                 #include <Pegasus/Common/CIMMessage.h>
  44                 #include <Pegasus/Common/OperationContext.h>
  45                 #include <Pegasus/Common/Tracer.h>
  46                 #include <Pegasus/Common/StatisticalData.h>
  47                 #include <Pegasus/Common/Logger.h>
  48                 #include <Pegasus/Common/MessageLoader.h> //l10n
  49 kumpf      1.10 #include <Pegasus/Common/Constants.h>
  50 schuur     1.1  
  51                 #include <Pegasus/Config/ConfigManager.h>
  52                 
  53                 #include <Pegasus/ProviderManager2/ProviderName.h>
  54                 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
  55 konrad.r   1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
  56 schuur     1.1  #include <Pegasus/ProviderManager2/ProviderManagerService.h>
  57                 
  58 schuur     1.12 #include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h>
  59                 
  60 schuur     1.1  
  61                 PEGASUS_USING_STD;
  62                 PEGASUS_NAMESPACE_BEGIN
  63                 
  64 mark.hamzy 1.23 int JMPIProviderManager::trace=0;
  65 mark.hamzy 1.24 
  66                 #ifdef PEGASUS_DEBUG
  67 mark.hamzy 1.23 #define DDD(x) if (JMPIProviderManager::trace) x;
  68 mark.hamzy 1.24 #else
  69                 #define DDD(x)
  70                 #endif
  71 mark.hamzy 1.36 
  72                 // request->localOnly is replaced with JMPI_LOCALONLY for getInstance () and enumerateInstances ()
  73 mark.hamzy 1.30 #define JMPI_LOCALONLY false
  74 mark.hamzy 1.36 
  75 mark.hamzy 1.32 /* Fix for 4092 */
  76 mark.hamzy 1.36 // request->includeQualifiers is replaced with JMPI_INCLUDE_QUALIFIERS for getInstance (),
  77                 //    setInstance (), enumerateInstances (), associators (), and references ()
  78 mark.hamzy 1.32 #define JMPI_INCLUDE_QUALIFIERS false
  79 mark.hamzy 1.23 
  80                 #include "Convert.h"
  81 schuur     1.1  
  82 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
  83                 {
  84                    // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes
  85                    // javap -s -p JMPI_TestPropertyTypes
  86 mark.hamzy 1.35    static const char *methodNames[][3] = {
  87 mark.hamzy 1.24       // CIMProvider
  88                       //   cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java
  89                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java
  90 mark.hamzy 1.36       {"snia 2.0","initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
  91                       {"snia 2.0","cleanup","()V"},
  92 mark.hamzy 1.24       // InstanceProvider
  93                       //   cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java
  94                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java
  95 mark.hamzy 1.36       {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"},
  96                       {"pegasus 2.4","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
  97 mark.hamzy 1.35       /* Begin Fix for 4189 */
  98 mark.hamzy 1.38       {"pegasus 2.5","enumerateInstances","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
  99 mark.hamzy 1.35       /* End Fix for 4189 */
 100 mark.hamzy 1.36       {"snia 2.0","enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
 101                       {"pegasus 2.4","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;"},
 102                       {"pegasus 2.5","enumerateInstanceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
 103                       {"snia 2.0","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"},
 104                       {"pegasus 2.4","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;"},
 105 mark.hamzy 1.35       /* Begin Fix for 4238 */
 106 mark.hamzy 1.38       {"pegasus 2.5","getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;"},
 107 mark.hamzy 1.35       /* End Fix for 4238 */
 108 mark.hamzy 1.36       {"snia 2.0","createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"},
 109                       {"snia 2.0","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
 110                       {"pegasus 2.4","setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V"},
 111                       {"snia 2.0","deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
 112                       {"snia 2.0","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
 113                       {"pegasus 2.4","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;"},
 114                       {"pegasus 2.5","execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 115 mark.hamzy 1.24       // MethodProvider
 116                       //   cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java
 117                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java
 118 mark.hamzy 1.36       {"snia 2.0","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
 119                       {"pegasus 2.4","invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;"},
 120 mark.hamzy 1.24       // PropertyProvider
 121                       //   cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java
 122 mark.hamzy 1.36       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/PropertyProvider.java
 123                       {"snia 2.0","getPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;"},
 124                       {"snia 2.0","setPropertyValue","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V"},
 125 mark.hamzy 1.24       // AssociatorProvider
 126                       //   cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java
 127 mark.hamzy 1.36       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/AssociatorProvider.java
 128                       {"snia 2.0","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 129                       {"pegasus 2.4","associators","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 130                       {"snia 2.0","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 131                       {"pegasus 2.4","associatorNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"},
 132                       {"snia 2.0","references","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 133                       {"pegasus 2.4","references","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"},
 134                       {"snia 2.0","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
 135                       {"pegasus 2.4","referenceNames","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;"},
 136 mark.hamzy 1.24       // CIMProviderRouter
 137                       //   cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java
 138                       // EventProvider
 139                       //   cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java
 140                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java
 141 mark.hamzy 1.36       {"snia 2.0","activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 142                       {"snia 2.0","deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 143 mark.hamzy 1.24       // IndicationHandler
 144                       //   cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java
 145                       // ProviderAdapter
 146                       //   cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java
 147                       // JMPI_TestPropertyTypes
 148 mark.hamzy 1.36       {"JMPI_TestPropertyTypes","findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
 149                       {"JMPI_TestPropertyTypes","testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"}
 150 mark.hamzy 1.23    };
 151                 
 152                    if (!env)
 153                    {
 154                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl));
 155                       return;
 156                    }
 157                    if (!jc)
 158                    {
 159                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl));
 160                       return;
 161                    }
 162                 
 163                    for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
 164                    {
 165 mark.hamzy 1.35       jmethodID id = env->GetMethodID(jc,methodNames[i][1], methodNames[i][2]);
 166                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", "<<methodNames[i][1]<<", id = "<<PEGASUS_STD(hex)<<(int)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
 167 mark.hamzy 1.23       env->ExceptionClear();
 168                    }
 169 mark.hamzy 1.29 
 170                    env->ExceptionClear();
 171                 }
 172                 
 173                 void
 174                 debugIntrospectJavaObject (JNIEnv *env, jobject jInst)
 175                 {
 176                    jclass       jInstClass             = env->GetObjectClass(jInst);
 177                    jclass       jInstSuperClass        = env->GetSuperclass(jInstClass);
 178                    jmethodID    jmidGetDeclaredMethods = env->GetMethodID(jInstClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
 179                 
 180                    if (!jmidGetDeclaredMethods)
 181                    {
 182                       env->ExceptionClear();
 183                       jmidGetDeclaredMethods = env->GetMethodID(jInstSuperClass, "getDeclaredMethods", "()[Ljava/lang/reflect/Method;");
 184                    }
 185                 
 186                    if (jmidGetDeclaredMethods)
 187                    {
 188                       jobjectArray jarrayDeclaredMethods  = (jobjectArray)env->CallObjectMethod(jInstClass,
 189                                                                                                 jmidGetDeclaredMethods);
 190 mark.hamzy 1.29 
 191                       if (jarrayDeclaredMethods)
 192                       {
 193                          for (int i = 0, iLen = env->GetArrayLength (jarrayDeclaredMethods); i < iLen; i++)
 194                          {
 195                             JMPIjvm::checkException(env);
 196                 
 197                             jobject jDeclaredMethod      = env->GetObjectArrayElement (jarrayDeclaredMethods, i);
 198                             jclass  jDeclaredMethodClass = env->GetObjectClass (jDeclaredMethod);
 199                 
 200                             JMPIjvm::checkException(env);
 201                 
 202                             jmethodID   jmidToString  = env->GetMethodID (jDeclaredMethodClass, "toString", "()Ljava/lang/String;");
 203                             jstring     jstringResult = (jstring)env->CallObjectMethod (jDeclaredMethod, jmidToString);
 204                             const char *pszResult     = env->GetStringUTFChars(jstringResult, 0);
 205                 
 206                             PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: "<<pszResult<<PEGASUS_STD(endl);
 207                 
 208                             env->ReleaseStringUTFChars (jstringResult, pszResult);
 209                          }
 210                       }
 211 mark.hamzy 1.29    }
 212                 
 213                 
 214                    env->ExceptionClear();
 215                 }
 216                 
 217                 void
 218                 debugDumpJavaObject (JNIEnv *env, jobject jInst)
 219                 {
 220                    jclass      jInstClass      = env->GetObjectClass(jInst);
 221                    jclass      jInstSuperClass = env->GetSuperclass(jInstClass);
 222                    jmethodID   jmidToString1   = env->GetMethodID(jInstClass,      "toString", "()Ljava/lang/String;");
 223                    jmethodID   jmidToString2   = env->GetMethodID(jInstSuperClass, "toString", "()Ljava/lang/String;");
 224                    if (!jmidToString1 || !jmidToString2)
 225                    {
 226                       env->ExceptionClear();
 227                       return;
 228                    }
 229                    jstring     jstringResult1  = (jstring)env->CallObjectMethod(jInstClass,      jmidToString1);
 230                    jstring     jstringResult2  = (jstring)env->CallObjectMethod(jInstSuperClass, jmidToString2);
 231                    jstring     jstringResult3  = (jstring)env->CallObjectMethod(jInst,           jmidToString1);
 232 mark.hamzy 1.29    const char *pszResult1      = env->GetStringUTFChars(jstringResult1, 0);
 233                    const char *pszResult2      = env->GetStringUTFChars(jstringResult2, 0);
 234                    const char *pszResult3      = env->GetStringUTFChars(jstringResult3, 0);
 235                 
 236                    jmethodID jmidCInst = env->GetMethodID(env->GetObjectClass(jInst),JMPIjvm::jv.instanceMethodNames[22].methodName, JMPIjvm::jv.instanceMethodNames[22].signature);
 237                 
 238                    PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugIntrospectJavaObject: jInstClass = "<<jInstClass<<", jInstSuperClass = "<<jInstSuperClass<<", jClassShouldBe = "<<JMPIjvm::jv.classRefs[18]<<", jmidCInst = "<<jmidCInst<<PEGASUS_STD(endl);
 239                    PEGASUS_STD(cout)<<"pszResult1 = "<<pszResult1<<PEGASUS_STD(endl);
 240                    PEGASUS_STD(cout)<<"pszResult2 = "<<pszResult2<<PEGASUS_STD(endl);
 241                    PEGASUS_STD(cout)<<"pszResult3 = "<<pszResult3<<PEGASUS_STD(endl);
 242                 
 243                    env->ReleaseStringUTFChars (jstringResult1, pszResult1);
 244                    env->ReleaseStringUTFChars (jstringResult2, pszResult2);
 245                    env->ReleaseStringUTFChars (jstringResult3, pszResult3);
 246                 
 247                    env->ExceptionClear();
 248 mark.hamzy 1.23 }
 249 schuur     1.1  
 250                 JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;
 251                 JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;
 252                 JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
 253                 
 254                 JMPIProviderManager::JMPIProviderManager(Mode m)
 255                 {
 256                    mode=m;
 257 carolann.graves 1.21    _subscriptionInitComplete = false;
 258 mark.hamzy      1.23 
 259                      #ifdef PEGASUS_DEBUG
 260                         if (getenv("PEGASUS_JMPI_TRACE"))
 261                            JMPIProviderManager::trace = 1;
 262                         else
 263                            JMPIProviderManager::trace = 0;
 264                      #else
 265                         JMPIProviderManager::trace = 0;
 266                      #endif
 267 schuur          1.1  }
 268                      
 269                      JMPIProviderManager::~JMPIProviderManager(void)
 270                      {
 271                      }
 272                      
 273 schuur          1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
 274 schuur          1.1              const String &ns, const String &cn)
 275                      {
 276                          String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
 277 mark.hamzy      1.23 
 278                          DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));
 279                      
 280 schuur          1.1      return provReg.insert(key,name);
 281                      }
 282 mark.hamzy      1.23 
 283 schuur          1.1  Message * JMPIProviderManager::processMessage(Message * request) throw()
 284                      {
 285 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");
 286 schuur          1.1  
 287                          Message * response = 0;
 288 mark.hamzy      1.23 
 289 schuur          1.1      // pass the request message to a handler method based on message type
 290                          switch(request->getType())
 291                          {
 292                          case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 293                              response = handleGetInstanceRequest(request);
 294 mark.hamzy      1.25         break;
 295 schuur          1.1  
 296                          case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 297                              response = handleEnumerateInstancesRequest(request);
 298 mark.hamzy      1.25         break;
 299 schuur          1.1  
 300                          case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 301                              response = handleEnumerateInstanceNamesRequest(request);
 302 mark.hamzy      1.25         break;
 303 schuur          1.1  
 304                          case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 305                              response = handleCreateInstanceRequest(request);
 306 mark.hamzy      1.25         break;
 307 schuur          1.1  
 308                          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 309                              response = handleModifyInstanceRequest(request);
 310 mark.hamzy      1.25         break;
 311 schuur          1.1  
 312                          case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 313                              response = handleDeleteInstanceRequest(request);
 314 mark.hamzy      1.25         break;
 315 schuur          1.1  
 316 mark.hamzy      1.25     case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 317                              response = handleExecQueryRequest(request);
 318 schuur          1.1          break;
 319                      
 320                          case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 321                              response = handleAssociatorsRequest(request);
 322 mark.hamzy      1.25         break;
 323 schuur          1.1  
 324                          case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 325                              response = handleAssociatorNamesRequest(request);
 326 mark.hamzy      1.25         break;
 327 schuur          1.1  
 328                          case CIM_REFERENCES_REQUEST_MESSAGE:
 329                              response = handleReferencesRequest(request);
 330 mark.hamzy      1.25         break;
 331 schuur          1.1  
 332                          case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 333                              response = handleReferenceNamesRequest(request);
 334 mark.hamzy      1.25         break;
 335 schuur          1.1  
 336 mark.hamzy      1.26     case CIM_GET_PROPERTY_REQUEST_MESSAGE:
 337                              response = handleGetPropertyRequest(request);
 338                              break;
 339                      
 340                          case CIM_SET_PROPERTY_REQUEST_MESSAGE:
 341                              response = handleSetPropertyRequest(request);
 342                              break;
 343                      
 344 schuur          1.11     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 345 schuur          1.1          response = handleInvokeMethodRequest(request);
 346 mark.hamzy      1.25         break;
 347 schuur          1.1  
 348 schuur          1.12     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 349 schuur          1.1          response = handleCreateSubscriptionRequest(request);
 350 mark.hamzy      1.25         break;
 351 schuur          1.1  
 352 mark.hamzy      1.25 /*  case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 353 schuur          1.1          response = handleModifySubscriptionRequest(request);
 354                              break;
 355 schuur          1.12 */
 356 schuur          1.1      case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 357                              response = handleDeleteSubscriptionRequest(request);
 358 mark.hamzy      1.25         break;
 359 schuur          1.1  
 360 mark.hamzy      1.26 /*  case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 361 kumpf           1.7          response = handleExportIndicationRequest(request);
 362 schuur          1.1          break;
 363 schuur          1.12 */
 364 schuur          1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 365                              response = handleDisableModuleRequest(request);
 366 mark.hamzy      1.25         break;
 367 schuur          1.1  
 368                          case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 369                              response = handleEnableModuleRequest(request);
 370 mark.hamzy      1.25         break;
 371 schuur          1.1  
 372                          case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 373                              response = handleStopAllProvidersRequest(request);
 374 mark.hamzy      1.25         break;
 375 schuur          1.1  
 376 kumpf           1.4      case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
 377 mark.hamzy      1.23         response = handleInitializeProviderRequest(request);
 378 mark.hamzy      1.25         break;
 379 kumpf           1.4  
 380 carolann.graves 1.21     case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 381                              response = handleSubscriptionInitCompleteRequest (request);
 382 mark.hamzy      1.25         break;
 383 carolann.graves 1.21 
 384 schuur          1.1      default:
 385 mark.hamzy      1.23         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 386                                               "*** Unsupported Request "+request->getType());
 387                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));
 388 mark.hamzy      1.25 
 389 schuur          1.1          response = handleUnsupportedRequest(request);
 390                              break;
 391                          }
 392                      
 393                          PEG_METHOD_EXIT();
 394                      
 395                          return(response);
 396                      }
 397                      
 398 kumpf           1.6  Boolean JMPIProviderManager::hasActiveProviders()
 399                      {
 400                           return providerManager.hasActiveProviders();
 401                      }
 402                      
 403                      void JMPIProviderManager::unloadIdleProviders()
 404 schuur          1.1  {
 405 kumpf           1.6       providerManager.unloadIdleProviders();
 406 schuur          1.1  }
 407                      
 408                      #define STRDUPA(s,o) \
 409                         if (s) { \
 410                            o=(const char*)alloca(strlen(s)); \
 411                            strcpy((char*)(o),(s)); \
 412                         } \
 413                         else o=NULL;
 414                      
 415                      #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 416                      
 417                      
 418                      #define HandlerIntroBase(type,type1,message,request,response,handler,respType) \
 419                          CIM##type##RequestMessage * request = \
 420                              dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
 421                          PEGASUS_ASSERT(request != 0); \
 422                          CIM##type##ResponseMessage * response = \
 423                              new CIM##type##ResponseMessage( \
 424                              request->messageId, \
 425                              CIMException(), \
 426                              request->queueIds.copyAndPop() \
 427 schuur          1.1          respType \
 428                          PEGASUS_ASSERT(response != 0); \
 429                          response->setKey(request->getKey()); \
 430                          response->setHttpMethod(request->getHttpMethod()); \
 431 kumpf           1.41.2.1     type1##ResponseHandler handler(request, response, _responseChunkCallback);
 432 schuur          1.1      
 433                          #define VOIDINTRO );
 434                          #define NOVOIDINTRO(type) ,type);
 435                          #define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName );
 436                          
 437                          
 438                          #define HandlerIntroVoid(type,message,request,response,handler) \
 439                               HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO)
 440                          
 441                          #define HandlerIntroMethod(type,message,request,response,handler) \
 442                               HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO)
 443                          
 444                          #define HandlerIntroInd(type,message,request,response,handler) \
 445                               HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 446                          
 447 kumpf           1.4      #define HandlerIntroInit(type,message,request,response,handler) \
 448                               HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 449                          
 450 schuur          1.1      #define HandlerIntro(type,message,request,response,handler,respType) \
 451                               HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType))
 452                          
 453                          #define HandlerCatch(handler) \
 454                              catch(CIMException & e)  \
 455                              { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 456                                          "Exception: " + e.getMessage()); \
 457                                  handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
 458                              } \
 459                              catch(Exception & e) \
 460                              { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 461                                          "Exception: " + e.getMessage()); \
 462                                  handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
 463                              } \
 464                              catch(...) \
 465                              { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 466                                          "Exception: Unknown"); \
 467                                  handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 468                              }
 469                          
 470 schuur          1.13     static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
 471                          {
 472                              Uint32 s=list.size();
 473                              jobjectArray pl=NULL;
 474                              if (s) {
 475                                 jstring initial=env->NewString(NULL,0);
 476 mark.hamzy      1.23            pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
 477 schuur          1.13            for (Uint32 i=0; i<s; i++) {
 478                                     env->SetObjectArrayElement
 479                                        (pl,i,env->NewStringUTF(list[i].getString().getCString()));
 480                                 }
 481                              }
 482                              return pl;
 483                          }
 484 schuur          1.1      
 485                          Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
 486                          {
 487 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");
 488 schuur          1.1      
 489                              HandlerIntro(GetInstance,message,request,response,handler,CIMInstance());
 490                          
 491 mark.hamzy      1.25         typedef enum {
 492                                 METHOD_UNKNOWN = 0,
 493                                 METHOD_PEGASUS_24,
 494 mark.hamzy      1.35            METHOD_PEGASUS_25,
 495                                 METHOD_SNIA_PROVIDER20,
 496 mark.hamzy      1.25         } METHOD_VERSION;
 497                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
 498                              JNIEnv          *env           = NULL;
 499 schuur          1.13     
 500 schuur          1.1          try {
 501 mark.hamzy      1.23             Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 502 schuur          1.1                  "JMPIProviderManager::handleGetInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 503                                      System::getHostName(),
 504                                      request->nameSpace.getString(),
 505                                      request->instanceName.getClassName().getString());
 506                          
 507 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));
 508                          
 509 schuur          1.1              // make target object path
 510 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
 511                                                                                 request->nameSpace,
 512                                                                                 request->instanceName.getClassName(),
 513                                                                                 request->instanceName.getKeyBindings());
 514 schuur          1.1      
 515                                  // resolve provider name
 516 kumpf           1.2              ProviderName name = _resolveProviderName(
 517                                      request->operationContext.get(ProviderIdContainer::NAME));
 518 schuur          1.1      
 519                                  // get cached or load new provider module
 520                                  JMPIProvider::OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
 521 mark.hamzy      1.23                                        name.getLogicalName());
 522 schuur          1.1              OperationContext context;
 523                          
 524 mark.hamzy      1.23             // forward request
 525 mark.hamzy      1.25             JMPIProvider &pr=ph.GetProvider();
 526 schuur          1.1      
 527 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.getInstance: " + pr.getName());
 528 schuur          1.1      
 529 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Calling provider getInstance: "<<pr.getName()<<PEGASUS_STD(endl));
 530 schuur          1.1      
 531 mark.hamzy      1.25             JvmVector *jv = 0;
 532                          
 533                                  env = JMPIjvm::attachThread(&jv);
 534                          
 535 mark.hamzy      1.37             if (!env)
 536                                  {
 537                                      PEG_METHOD_EXIT();
 538                          
 539                                      STAT_COPYDISPATCHER
 540                          
 541                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
 542                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
 543                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
 544                                  }
 545                          
 546                          ////////DDD(debugPrintMethodPointers (env, (jclass)pr.jProviderClass));
 547                          
 548 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
 549                          
 550                                  STAT_GETSTARTTIME;
 551                          
 552                                  jmethodID id = NULL;
 553                          
 554 mark.hamzy      1.34             /* Fix for 4238 */
 555 mark.hamzy      1.25             // public abstract org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath cop,
 556                                  //                                                           org.pegasus.jmpi.CIMClass      cimClass,
 557 mark.hamzy      1.34             //                                                           boolean                        includeQualifiers,
 558                                  //                                                           boolean                        includeClassOrigin,
 559                                  //                                                           String                         propertyList[])
 560 mark.hamzy      1.25             //        throws org.pegasus.jmpi.CIMException
 561                                  id = env->GetMethodID((jclass)pr.jProviderClass,
 562                                                        "getInstance",
 563 mark.hamzy      1.38                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Lorg/pegasus/jmpi/CIMInstance;");
 564 mark.hamzy      1.25     
 565                                  if (id != NULL)
 566                                  {
 567 mark.hamzy      1.35                 eMethodFound = METHOD_PEGASUS_25;
 568                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_PEGASUS_25."<<PEGASUS_STD(endl));
 569 mark.hamzy      1.34             }
 570                                  /* Fix for 4238 */
 571                          
 572                                  if (id == NULL)
 573                                  {
 574                                      env->ExceptionClear();
 575                          
 576                                      // public abstract org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath cop,
 577                                      //                                                           org.pegasus.jmpi.CIMClass      cimClass,
 578                                      //                                                           boolean                        localOnly)
 579                                      //        throws org.pegasus.jmpi.CIMException
 580                                      id = env->GetMethodID((jclass)pr.jProviderClass,
 581                                                            "getInstance",
 582                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
 583                          
 584                                      if (id != NULL)
 585                                      {
 586 mark.hamzy      1.35                     eMethodFound = METHOD_SNIA_PROVIDER20;
 587                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
 588 mark.hamzy      1.34                 }
 589 mark.hamzy      1.25             }
 590                          
 591                                  if (id == NULL)
 592                                  {
 593                                      env->ExceptionClear();
 594                          
 595                                      // public org.pegasus.jmpi.CIMInstance getInstance (org.pegasus.jmpi.CIMObjectPath op,
 596                                      //                                                  boolean                        localOnly,
 597                                      //                                                  boolean                        includeQualifiers,
 598                                      //                                                  boolean                        includeClassOrigin,
 599                                      //                                                  java.lang.String[]             propertyList,
 600                                      //                                                  org.pegasus.jmpi.CIMClass      cc)
 601                                      //        throws org.pegasus.jmpi.CIMException
 602                                      id = env->GetMethodID((jclass)pr.jProviderClass,
 603                                                            "getInstance",
 604                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)Lorg/pegasus/jmpi/CIMInstance;");
 605                          
 606                                      if (id != NULL)
 607                                      {
 608                                          eMethodFound = METHOD_PEGASUS_24;
 609                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
 610 mark.hamzy      1.25                 }
 611                                  }
 612                          
 613 schuur          1.1              JMPIjvm::checkException(env);
 614 mark.hamzy      1.23     
 615 mark.hamzy      1.25             switch (eMethodFound)
 616                                  {
 617                                  case METHOD_PEGASUS_24:
 618                                  {
 619 mark.hamzy      1.29                 jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 620                                      jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 621 mark.hamzy      1.25     
 622                                      JMPIjvm::checkException(env);
 623                          
 624 mark.hamzy      1.40                 CIMClass cls;
 625                          
 626                                      try
 627                                      {
 628                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 629                                         AutoMutex lock (pr._cimomMutex);
 630                          
 631                                         cls = pr._cimom_handle->getClass(context,
 632                                                                          request->nameSpace,
 633                                                                          request->instanceName.getClassName(),
 634                                                                          false,
 635                                                                          true,
 636                                                                          true,
 637                                                                          CIMPropertyList());
 638                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 639                                      }
 640                                      catch (CIMException e)
 641                                      {
 642                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 643                                         throw;
 644                                      }
 645 mark.hamzy      1.40     
 646 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
 647                          
 648                                      JMPIjvm::checkException(env);
 649 mark.hamzy      1.25     
 650 mark.hamzy      1.29                 jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 651                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 652 mark.hamzy      1.25     
 653                                      JMPIjvm::checkException(env);
 654 mark.hamzy      1.23     
 655 mark.hamzy      1.25                 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
 656 schuur          1.1      
 657 mark.hamzy      1.29                 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
 658                                                                             id,
 659                                                                             jop,
 660 mark.hamzy      1.36                                                        JMPI_LOCALONLY,
 661                                                                             JMPI_INCLUDE_QUALIFIERS,
 662 mark.hamzy      1.29                                                        request->includeClassOrigin,
 663                                                                             jPropertyList,
 664                                                                             jcimClass);
 665 mark.hamzy      1.23     
 666 mark.hamzy      1.25                 JMPIjvm::checkException(env);
 667 mark.hamzy      1.23     
 668 mark.hamzy      1.25                 STAT_PMS_PROVIDEREND;
 669 schuur          1.1      
 670 mark.hamzy      1.25                 handler.processing();
 671 schuur          1.1      
 672 mark.hamzy      1.29                 if (jciRet) {
 673                                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 674                                         CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 675 schuur          1.13     
 676 mark.hamzy      1.29                    handler.deliver(*ciRet);
 677 mark.hamzy      1.25                 }
 678                                      handler.complete();
 679                                      break;
 680 mark.hamzy      1.23             }
 681 schuur          1.13     
 682 mark.hamzy      1.34             /* Fix for 4238 */
 683 mark.hamzy      1.35             case METHOD_PEGASUS_25:
 684 mark.hamzy      1.34             {
 685                                      jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 686                                      jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 687                          
 688                                      JMPIjvm::checkException(env);
 689                          
 690 mark.hamzy      1.40                 CIMClass cls;
 691                          
 692                                      try
 693                                      {
 694                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 695                                         AutoMutex lock (pr._cimomMutex);
 696                          
 697                                         cls = pr._cimom_handle->getClass(context,
 698                                                                          request->nameSpace,
 699                                                                          request->instanceName.getClassName(),
 700                                                                          false,
 701                                                                          true,
 702                                                                          true,
 703                                                                          CIMPropertyList());
 704                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 705                                      }
 706                                      catch (CIMException e)
 707                                      {
 708                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 709                                         throw;
 710                                      }
 711 mark.hamzy      1.40     
 712 mark.hamzy      1.34                 CIMClass *pcls = new CIMClass (cls);
 713                          
 714                                      JMPIjvm::checkException(env);
 715                          
 716                                      jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 717                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 718                          
 719                                      JMPIjvm::checkException(env);
 720                          
 721                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
 722                                      jobject      jciRet        = env->CallObjectMethod((jobject)pr.jProvider,
 723                                                                                         id,
 724                                                                                         jop,
 725                                                                                         jcimClass,
 726                                                                                         JMPI_INCLUDE_QUALIFIERS,
 727                                                                                         request->includeClassOrigin,
 728                                                                                         jPropertyList);
 729                          
 730                                      JMPIjvm::checkException(env);
 731                          
 732                                      STAT_PMS_PROVIDEREND;
 733 mark.hamzy      1.34     
 734                                      handler.processing();
 735                          
 736                                      if (jciRet) {
 737                                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 738                                         CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 739                          
 740                                         handler.deliver(*ciRet);
 741                                      }
 742                                      handler.complete();
 743                                      break;
 744                                  }
 745                                  /* Fix for 4238 */
 746                          
 747 mark.hamzy      1.35             case METHOD_SNIA_PROVIDER20:
 748 mark.hamzy      1.25             {
 749 mark.hamzy      1.29                 jint    jopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 750                                      jobject jop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jopRef);
 751 mark.hamzy      1.25     
 752                                      JMPIjvm::checkException(env);
 753                          
 754 mark.hamzy      1.40                 CIMClass cls;
 755                          
 756                                      try
 757                                      {
 758                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 759                                         AutoMutex lock (pr._cimomMutex);
 760                          
 761                                         cls = pr._cimom_handle->getClass(context,
 762                                                                          request->nameSpace,
 763                                                                          request->instanceName.getClassName(),
 764                                                                          false,
 765                                                                          true,
 766                                                                          true,
 767                                                                          CIMPropertyList());
 768                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->instanceName.getClassName()<<PEGASUS_STD(endl));
 769                                      }
 770                                      catch (CIMException e)
 771                                      {
 772                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 773                                         throw;
 774                                      }
 775 mark.hamzy      1.40     
 776 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
 777 mark.hamzy      1.25     
 778 mark.hamzy      1.27                 JMPIjvm::checkException(env);
 779                          
 780 mark.hamzy      1.29                 jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 781                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
 782 mark.hamzy      1.25     
 783                                      JMPIjvm::checkException(env);
 784                          
 785 mark.hamzy      1.30                 // Modified for Bugzilla# 3679
 786 mark.hamzy      1.29                 jobject jciRet = env->CallObjectMethod((jobject)pr.jProvider,
 787                                                                             id,
 788                                                                             jop,
 789                                                                             jcimClass,
 790 mark.hamzy      1.30                                                        JMPI_LOCALONLY);
 791 mark.hamzy      1.25     
 792                                      JMPIjvm::checkException(env);
 793                          
 794                                      STAT_PMS_PROVIDEREND;
 795 schuur          1.1      
 796 mark.hamzy      1.25                 handler.processing();
 797 schuur          1.13     
 798 mark.hamzy      1.29                 if (jciRet) {
 799                                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
 800                                         CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
 801 schuur          1.13     
 802 mark.hamzy      1.29                    handler.deliver(*ciRet);
 803 mark.hamzy      1.25                 }
 804                                      handler.complete();
 805                                      break;
 806                                  }
 807 mark.hamzy      1.23     
 808 mark.hamzy      1.25             case METHOD_UNKNOWN:
 809                                  {
 810                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
 811                                      break;
 812                                  }
 813 schuur          1.1              }
 814 schuur          1.13         }
 815 schuur          1.1          HandlerCatch(handler);
 816 schuur          1.13     
 817 schuur          1.1          if (env) JMPIjvm::detachThread();
 818 schuur          1.13     
 819 schuur          1.1          PEG_METHOD_EXIT();
 820                          
 821 w.white         1.31         STAT_COPYDISPATCHER
 822                          
 823 schuur          1.1          return(response);
 824                          }
 825                          
 826                          Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
 827                          {
 828 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleEnumerateInstanceRequest");
 829                          
 830                              HandlerIntro(EnumerateInstances,message,request,response,handler,Array<CIMInstance>());
 831 schuur          1.1      
 832 mark.hamzy      1.25         typedef enum {
 833                                 METHOD_UNKNOWN = 0,
 834                                 METHOD_PEGASUS_24,
 835 mark.hamzy      1.35            METHOD_PEGASUS_25,
 836                                 METHOD_SNIA_PROVIDER20,
 837 mark.hamzy      1.25         } METHOD_VERSION;
 838                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
 839                              JNIEnv          *env           = NULL;
 840 schuur          1.13     
 841                              try {
 842 schuur          1.1            Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 843                                      "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0  Name space: $1  Class name: $2",
 844                                      System::getHostName(),
 845                                      request->nameSpace.getString(),
 846                                      request->className.getString());
 847                          
 848 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
 849                          
 850 schuur          1.1              // make target object path
 851 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
 852                                                                                 request->nameSpace,
 853                                                                                 request->className);
 854 schuur          1.1      
 855                                  // resolve provider name
 856 kumpf           1.2              ProviderName name = _resolveProviderName(
 857                                      request->operationContext.get(ProviderIdContainer::NAME));
 858 schuur          1.1      
 859                                  // get cached or load new provider module
 860                                  JMPIProvider::OpProviderHolder ph =
 861                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
 862                                         String::EMPTY);
 863                          
 864 schuur          1.12             // convert arguments
 865 schuur          1.1              OperationContext context;
 866                          
 867 schuur          1.12             context.insert(request->operationContext.get(IdentityContainer::NAME));
 868                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 869                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 870 schuur          1.1      
 871                                  // forward request
 872 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
 873 schuur          1.1      
 874 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstances: " + pr.getName());
 875 schuur          1.1      
 876 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Calling provider enumerateInstances: "<<pr.getName()<<PEGASUS_STD(endl));
 877 schuur          1.12     
 878 mark.hamzy      1.25             JvmVector *jv = 0;
 879                          
 880                                  env = JMPIjvm::attachThread(&jv);
 881                          
 882 mark.hamzy      1.37             if (!env)
 883                                  {
 884                                      PEG_METHOD_EXIT();
 885                          
 886                                      STAT_COPYDISPATCHER
 887                          
 888                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
 889                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
 890                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
 891                                  }
 892                          
 893 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
 894                          
 895                                  STAT_GETSTARTTIME;
 896                          
 897                                  jmethodID id = NULL;
 898                          
 899 mark.hamzy      1.33             /* Fix for 4189 */
 900 mark.hamzy      1.36             // public java.util.Vector enumerateInstances (org.pegasus.jmpi.CIMObjectPath cop,
 901                                  //                                             org.pegasus.jmpi.CIMClass      cimClass,
 902                                  //                                             boolean                        includeQualifiers,
 903                                  //                                             boolean                        includeClassOrigin,
 904                                  //                                             java.lang.String[]             propertyList)
 905                                  //         throws org.pegasus.jmpi.CIMException
 906 mark.hamzy      1.25             id = env->GetMethodID((jclass)pr.jProviderClass,
 907 mark.hamzy      1.36                                   "enumerateInstances",
 908 mark.hamzy      1.38                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
 909 mark.hamzy      1.25     
 910                                  if (id != NULL)
 911                                  {
 912 mark.hamzy      1.35                 eMethodFound = METHOD_PEGASUS_25;
 913                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_PEGASUS_25."<<PEGASUS_STD(endl));
 914 mark.hamzy      1.33             }
 915                                  /* Fix for 4189 */
 916                          
 917                                  if (id == NULL)
 918                                  {
 919                                      env->ExceptionClear();
 920                          
 921                                      // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
 922                                      //                                                 boolean                        deep,
 923                                      //                                                 org.pegasus.jmpi.CIMClass      cimClass,
 924                                      //                                                 boolean                        localOnly)
 925                                      //        throws org.pegasus.jmpi.CIMException
 926                                      id = env->GetMethodID((jclass)pr.jProviderClass,
 927                                                            "enumInstances",
 928                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
 929                          
 930                                      if (id != NULL)
 931                                      {
 932 mark.hamzy      1.35                     eMethodFound = METHOD_SNIA_PROVIDER20;
 933                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
 934 mark.hamzy      1.33                 }
 935 mark.hamzy      1.25             }
 936                          
 937                                  if (id == NULL)
 938                                  {
 939                                      env->ExceptionClear();
 940 schuur          1.1      
 941 mark.hamzy      1.36                 // public org.pegasus.jmpi.CIMInstance[] enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
 942                                      //                                                      boolean                        localOnly,
 943                                      //                                                      boolean                        includeQualifiers,
 944                                      //                                                      boolean                        includeClassOrigin,
 945                                      //                                                      java.lang.String[]             propertyList,
 946                                      //                                                      org.pegasus.jmpi.CIMClass      cimClass)
 947 mark.hamzy      1.25                 //         throws org.pegasus.jmpi.CIMException
 948                                      id = env->GetMethodID((jclass)pr.jProviderClass,
 949 mark.hamzy      1.36                                       "enumInstances",
 950 mark.hamzy      1.25                                       "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
 951 mark.hamzy      1.23     
 952 mark.hamzy      1.25                 if (id != NULL)
 953                                      {
 954                                          eMethodFound = METHOD_PEGASUS_24;
 955                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
 956                                      }
 957                                  }
 958 schuur          1.12     
 959                                  JMPIjvm::checkException(env);
 960 mark.hamzy      1.23     
 961 mark.hamzy      1.25             switch (eMethodFound)
 962                                  {
 963                                  case METHOD_PEGASUS_24:
 964                                  {
 965 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
 966                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
 967 mark.hamzy      1.23     
 968 mark.hamzy      1.25                 JMPIjvm::checkException(env);
 969 schuur          1.1      
 970 mark.hamzy      1.40                 CIMClass cls;
 971                          
 972                                      try
 973                                      {
 974                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
 975                                         AutoMutex lock (pr._cimomMutex);
 976                          
 977                                         cls = pr._cimom_handle->getClass(context,
 978                                                                          request->nameSpace,
 979                                                                          request->className,
 980                                                                          false,
 981                                                                          true,
 982                                                                          true,
 983                                                                          CIMPropertyList());
 984                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
 985                                      }
 986                                      catch (CIMException e)
 987                                      {
 988                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
 989                                         throw;
 990                                      }
 991 mark.hamzy      1.40     
 992 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
 993                          
 994 mark.hamzy      1.25                 JMPIjvm::checkException(env);
 995 schuur          1.1      
 996 mark.hamzy      1.29                 jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
 997                                      jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
 998 schuur          1.13     
 999 mark.hamzy      1.23                 JMPIjvm::checkException(env);
1000 schuur          1.1      
1001 mark.hamzy      1.25                 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1002 mark.hamzy      1.36                 jobjectArray jAr           = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1003                                                                                                       id,
1004                                                                                                       jcop,
1005                                                                                                       JMPI_LOCALONLY,
1006                                                                                                       JMPI_INCLUDE_QUALIFIERS,
1007                                                                                                       request->includeClassOrigin,
1008                                                                                                       jPropertyList,
1009                                                                                                       jcc);
1010 mark.hamzy      1.25     
1011 mark.hamzy      1.23                 JMPIjvm::checkException(env);
1012                          
1013                                      STAT_PMS_PROVIDEREND;
1014                          
1015                                      handler.processing();
1016 mark.hamzy      1.25                 if (jAr) {
1017                                          for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1018 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1019                          
1020 mark.hamzy      1.29                         jobject jciRet = env->GetObjectArrayElement(jAr,i);
1021                          
1022 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1023 schuur          1.13     
1024 mark.hamzy      1.29                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1025                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1026 schuur          1.13     
1027 mark.hamzy      1.36                         /* Fix for 4237 */
1028 mark.hamzy      1.40                         CIMClass cls;
1029                          
1030                                              try
1031                                              {
1032                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1033                                                 AutoMutex lock (pr._cimomMutex);
1034                          
1035                                                 cls = pr._cimom_handle->getClass(context,
1036                                                                                  request->nameSpace,
1037                                                                                  ciRet->getClassName(),
1038                                                                                  false,
1039                                                                                  true,
1040                                                                                  true,
1041                                                                                  CIMPropertyList());
1042                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1043                                              }
1044                                              catch (CIMException e)
1045                                              {
1046                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1047                                                 throw;
1048                                              }
1049 mark.hamzy      1.40     
1050 mark.hamzy      1.36                         const CIMObjectPath& op  = ciRet->getPath();
1051                                              CIMObjectPath        iop = ciRet->buildPath(cls);
1052                          
1053 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1054 schuur          1.13     
1055 mark.hamzy      1.29                         handler.deliver(*ciRet);
1056 mark.hamzy      1.23                     }
1057                                      }
1058                                      handler.complete();
1059 mark.hamzy      1.25                 break;
1060 schuur          1.13             }
1061 mark.hamzy      1.25     
1062 mark.hamzy      1.33             /* Fix for 4189 */
1063 mark.hamzy      1.35             case METHOD_PEGASUS_25:
1064 mark.hamzy      1.33             {
1065                                      jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1066                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1067                          
1068                                      JMPIjvm::checkException(env);
1069                          
1070 mark.hamzy      1.40                 CIMClass cls;
1071                          
1072                                      try
1073                                      {
1074                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1075                                         AutoMutex lock (pr._cimomMutex);
1076                          
1077                                         cls = pr._cimom_handle->getClass (context,
1078                                                                           request->nameSpace,
1079                                                                           request->className,
1080                                                                           false,
1081                                                                           true,
1082                                                                           true,
1083                                                                           CIMPropertyList());
1084                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1085                                      }
1086                                      catch (CIMException e)
1087                                      {
1088                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1089                                         throw;
1090                                      }
1091 mark.hamzy      1.40     
1092 mark.hamzy      1.33                 CIMClass *pcls = new CIMClass (cls);
1093                          
1094                                      JMPIjvm::checkException(env);
1095                          
1096                                      jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1097                                      jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1098                          
1099                                      JMPIjvm::checkException(env);
1100                          
1101                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1102                                      jobject      jVec          = env->CallObjectMethod((jobject)pr.jProvider,
1103                                                                                         id,
1104                                                                                         jcop,
1105 mark.hamzy      1.35                                                                    jcc,
1106 mark.hamzy      1.33                                                                    JMPI_INCLUDE_QUALIFIERS,
1107                                                                                         request->includeClassOrigin,
1108                                                                                         jPropertyList);
1109                          
1110                                      JMPIjvm::checkException(env);
1111                          
1112                                      STAT_PMS_PROVIDEREND;
1113                          
1114                                      handler.processing();
1115                                      if (jVec) {
1116                                          for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1117                                              JMPIjvm::checkException(env);
1118                          
1119                                              jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1120                          
1121                                              JMPIjvm::checkException(env);
1122                          
1123                                              jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1124                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1125                          
1126                                              /* Fix for 4237 */
1127 mark.hamzy      1.40                         CIMClass             cls;
1128                          
1129                                              try
1130                                              {
1131                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1132                                                 AutoMutex lock (pr._cimomMutex);
1133                          
1134                                                 cls = pr._cimom_handle->getClass(context,
1135                                                                                  request->nameSpace,
1136                                                                                  ciRet->getClassName(),
1137                                                                                  false,
1138                                                                                  true,
1139                                                                                  true,
1140                                                                                  CIMPropertyList());
1141                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1142                                              }
1143                                              catch (CIMException e)
1144                                              {
1145                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1146                                                 throw;
1147                                              }
1148 mark.hamzy      1.40     
1149 mark.hamzy      1.33                         const CIMObjectPath& op  = ciRet->getPath();
1150                                              CIMObjectPath        iop = ciRet->buildPath(cls);
1151                          
1152                                              JMPIjvm::checkException(env);
1153                          
1154                                              iop.setNameSpace(op.getNameSpace());
1155                          
1156                                              ciRet->setPath(iop);
1157                                              /* Fix for 4237*/
1158                          
1159                                              handler.deliver(*ciRet);
1160                                          }
1161                                      }
1162                                      handler.complete();
1163                                      break;
1164                                  }
1165                                  /* Fix for 4189 */
1166                          
1167 mark.hamzy      1.35             case METHOD_SNIA_PROVIDER20:
1168 mark.hamzy      1.25             {
1169 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1170                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1171 mark.hamzy      1.25     
1172                                      JMPIjvm::checkException(env);
1173                          
1174 mark.hamzy      1.40                 CIMClass cls;
1175                          
1176                                      try
1177                                      {
1178                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1179                                         AutoMutex lock (pr._cimomMutex);
1180                          
1181                                         cls = pr._cimom_handle->getClass(context,
1182                                                                          request->nameSpace,
1183                                                                          request->className,
1184                                                                          false,
1185                                                                          true,
1186                                                                          true,
1187                                                                          CIMPropertyList());
1188                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1189                                      }
1190                                      catch (CIMException e)
1191                                      {
1192                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1193                                         throw;
1194                                      }
1195 mark.hamzy      1.40     
1196 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
1197                          
1198 mark.hamzy      1.25                 JMPIjvm::checkException(env);
1199                          
1200 mark.hamzy      1.29                 jint    jccRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1201                                      jobject jcc    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jccRef);
1202 mark.hamzy      1.25     
1203                                      JMPIjvm::checkException(env);
1204                          
1205 mark.hamzy      1.30                 // Modified for Bugzilla# 3679
1206 mark.hamzy      1.25                 jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1207                                                                           id,
1208 mark.hamzy      1.29                                                      jcop,
1209 mark.hamzy      1.33                                                      request->deepInheritance,
1210 mark.hamzy      1.29                                                      jcc,
1211 mark.hamzy      1.30                                                      JMPI_LOCALONLY);
1212 mark.hamzy      1.25     
1213 mark.hamzy      1.23                 JMPIjvm::checkException(env);
1214 schuur          1.12     
1215 mark.hamzy      1.23                 STAT_PMS_PROVIDEREND;
1216                          
1217                                      handler.processing();
1218 mark.hamzy      1.25                 if (jVec) {
1219                                          for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1220 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1221                          
1222 mark.hamzy      1.29                         jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1223                          
1224 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1225 schuur          1.12     
1226 mark.hamzy      1.29                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
1227                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
1228 schuur          1.12     
1229 mark.hamzy      1.33                         /* Fix for 4237 */
1230 mark.hamzy      1.40                         CIMClass cls;
1231                          
1232                                              try
1233                                              {
1234                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1235                                                 AutoMutex lock (pr._cimomMutex);
1236                          
1237                                                 cls = pr._cimom_handle->getClass(context,
1238                                                                                  request->nameSpace,
1239                                                                                  ciRet->getClassName(),
1240                                                                                  false,
1241                                                                                  true,
1242                                                                                  true,
1243                                                                                  CIMPropertyList());
1244                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
1245                                              }
1246                                              catch (CIMException e)
1247                                              {
1248                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1249                                                 throw;
1250                                              }
1251 mark.hamzy      1.40     
1252 mark.hamzy      1.33                         const CIMObjectPath& op  = ciRet->getPath();
1253                                              CIMObjectPath        iop = ciRet->buildPath(cls);
1254                          
1255                                              JMPIjvm::checkException(env);
1256                          
1257                                              iop.setNameSpace(op.getNameSpace());
1258                          
1259                                              ciRet->setPath(iop);
1260                                              /* Fix for 4237*/
1261                          
1262 mark.hamzy      1.29                         handler.deliver(*ciRet);
1263 mark.hamzy      1.23                     }
1264                                      }
1265                                      handler.complete();
1266 mark.hamzy      1.25                 break;
1267                                  }
1268                          
1269                                  case METHOD_UNKNOWN:
1270                                  {
1271                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: should not be here!"<<PEGASUS_STD(endl));
1272                                      break;
1273                                  }
1274 schuur          1.1              }
1275                              }
1276                              HandlerCatch(handler);
1277 schuur          1.12     
1278 schuur          1.11         if (env) JMPIjvm::detachThread();
1279 schuur          1.12     
1280 schuur          1.1          PEG_METHOD_EXIT();
1281                          
1282 w.white         1.31         STAT_COPYDISPATCHER
1283                          
1284 schuur          1.1          return(response);
1285                          }
1286                          
1287                          Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
1288                          {
1289                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
1290                          
1291 mark.hamzy      1.23         HandlerIntro(EnumerateInstanceNames,message,request,response, handler,Array<CIMObjectPath>());
1292                          
1293 mark.hamzy      1.25         typedef enum {
1294                                 METHOD_UNKNOWN = 0,
1295                                 METHOD_PEGASUS_24,
1296 mark.hamzy      1.36            METHOD_PEGASUS_25,
1297 mark.hamzy      1.25            METHOD_SNIA_PROVIDER20,
1298                              } METHOD_VERSION;
1299                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1300                              JNIEnv          *env           = NULL;
1301 schuur          1.13     
1302 schuur          1.1          try {
1303                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1304                                      "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1305                                      System::getHostName(),
1306                                      request->nameSpace.getString(),
1307                                      request->className.getString());
1308 mark.hamzy      1.23     
1309                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
1310                          
1311 mark.hamzy      1.25             // make target object path
1312 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1313                                                                                 request->nameSpace,
1314                                                                                 request->className);
1315 schuur          1.1      
1316                                  // resolve provider name
1317 kumpf           1.2              ProviderName name = _resolveProviderName(
1318                                      request->operationContext.get(ProviderIdContainer::NAME));
1319 schuur          1.1      
1320                                  // get cached or load new provider module
1321                                  JMPIProvider::OpProviderHolder ph =
1322                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
1323                          
1324                                  // convert arguments
1325                                  OperationContext context;
1326                          
1327 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
1328                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1329                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1330 schuur          1.1      
1331 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
1332 schuur          1.1      
1333 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.enumerateInstanceNames: " + pr.getName());
1334 schuur          1.1      
1335 mark.hamzy      1.37             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Calling provider : enumerateInstanceNames: "<<pr.getName()<<PEGASUS_STD(endl));
1336 schuur          1.1      
1337 mark.hamzy      1.25             JvmVector *jv = 0;
1338 schuur          1.12     
1339 mark.hamzy      1.25             env = JMPIjvm::attachThread(&jv);
1340 schuur          1.1      
1341 mark.hamzy      1.37             if (!env)
1342                                  {
1343                                      PEG_METHOD_EXIT();
1344                          
1345                                      STAT_COPYDISPATCHER
1346                          
1347                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1348                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1349                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1350                                  }
1351                          
1352 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
1353 schuur          1.12     
1354 mark.hamzy      1.25             STAT_GETSTARTTIME;
1355 mark.hamzy      1.23     
1356 mark.hamzy      1.25             jmethodID id = NULL;
1357 mark.hamzy      1.23     
1358 mark.hamzy      1.25             // public abstract java.util.Vector enumInstances (org.pegasus.jmpi.CIMObjectPath cop,
1359                                  //                                                 boolean                        deep,
1360                                  //                                                 org.pegasus.jmpi.CIMClass      cimClass)
1361                                  //        throws org.pegasus.jmpi.CIMException
1362                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1363                                                        "enumInstances",
1364                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1365 schuur          1.1      
1366 mark.hamzy      1.25             if (id != NULL)
1367                                  {
1368                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1369                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1370                                  }
1371 schuur          1.1      
1372 mark.hamzy      1.25             if (id == NULL)
1373                                  {
1374                                      env->ExceptionClear();
1375 schuur          1.1      
1376 mark.hamzy      1.36                 // public org.pegasus.jmpi.CIMObjectPath[] enumerateInstanceNames (org.pegasus.jmpi.CIMObjectPath cop,
1377                                      //                                                                 org.pegasus.jmpi.CIMClass      cimClass)
1378 mark.hamzy      1.25                 //         throws org.pegasus.jmpi.CIMException
1379                                      id = env->GetMethodID((jclass)pr.jProviderClass,
1380                                                            "enumerateInstanceNames",
1381                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1382 schuur          1.13     
1383 mark.hamzy      1.25                 if (id != NULL)
1384                                      {
1385                                          eMethodFound = METHOD_PEGASUS_24;
1386                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
1387                                      }
1388 mark.hamzy      1.23             }
1389 mark.hamzy      1.25     
1390 mark.hamzy      1.36             if (id == NULL)
1391                                  {
1392                                      env->ExceptionClear();
1393                          
1394                                      // public java.util.Vector enumerateInstanceNames (org.pegasus.jmpi.CIMObjectPath cop,
1395                                      //                                                 org.pegasus.jmpi.CIMClass      cimClass)
1396                                      //         throws org.pegasus.jmpi.CIMException
1397                                      id = env->GetMethodID((jclass)pr.jProviderClass,
1398                                                            "enumerateInstanceNames",
1399                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
1400                          
1401                                      if (id != NULL)
1402                                      {
1403                                          eMethodFound = METHOD_PEGASUS_25;
1404                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: found METHOD_PEGASUS_25."<<PEGASUS_STD(endl));
1405                                      }
1406                                  }
1407                          
1408                                  if (id == NULL)
1409                                  {
1410                                     DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: No method found!"<<PEGASUS_STD(endl));
1411 mark.hamzy      1.36             }
1412                          
1413 schuur          1.1              JMPIjvm::checkException(env);
1414                          
1415 mark.hamzy      1.25             switch (eMethodFound)
1416                                  {
1417                                  case METHOD_PEGASUS_24:
1418                                  {
1419 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1420                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1421 mark.hamzy      1.25     
1422                                      JMPIjvm::checkException(env);
1423                          
1424 mark.hamzy      1.40                 CIMClass cls;
1425                          
1426                                      try
1427                                      {
1428                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1429                                         AutoMutex lock (pr._cimomMutex);
1430                          
1431                                         cls = pr._cimom_handle->getClass(context,
1432                                                                          request->nameSpace,
1433                                                                          request->className,
1434                                                                          false,
1435                                                                          true,
1436                                                                          true,
1437                                                                          CIMPropertyList());
1438                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1439                                      }
1440                                      catch (CIMException e)
1441                                      {
1442                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1443                                         throw;
1444                                      }
1445 mark.hamzy      1.40     
1446 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
1447 mark.hamzy      1.25     
1448                                      JMPIjvm::checkException(env);
1449                          
1450 mark.hamzy      1.29                 jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1451                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1452 mark.hamzy      1.25     
1453                                      JMPIjvm::checkException(env);
1454                          
1455                                      jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1456                                                                                             id,
1457 mark.hamzy      1.29                                                                        jcop,
1458                                                                                             jcimClass);
1459 mark.hamzy      1.25     
1460 mark.hamzy      1.23                 JMPIjvm::checkException(env);
1461                          
1462                                      STAT_PMS_PROVIDEREND;
1463                          
1464                                      handler.processing();
1465 mark.hamzy      1.25                 if (jAr) {
1466                                          for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1467 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1468                          
1469 mark.hamzy      1.29                         jobject jcopRet = env->GetObjectArrayElement(jAr,i);
1470                          
1471 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1472                          
1473 mark.hamzy      1.29                         jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1474                                              CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1475 schuur          1.13     
1476 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1477 schuur          1.13     
1478 mark.hamzy      1.29                         handler.deliver(*copRet);
1479 mark.hamzy      1.23                     }
1480                                      }
1481                                      handler.complete();
1482 mark.hamzy      1.25                 break;
1483 schuur          1.13             }
1484 mark.hamzy      1.25     
1485 mark.hamzy      1.36             case METHOD_PEGASUS_25:
1486                                  {
1487                                      jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1488                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1489                          
1490                                      JMPIjvm::checkException(env);
1491                          
1492 mark.hamzy      1.40                 CIMClass cls;
1493                          
1494                                      try
1495                                      {
1496                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1497                                         AutoMutex lock (pr._cimomMutex);
1498                          
1499                                         cls = pr._cimom_handle->getClass(context,
1500                                                                          request->nameSpace,
1501                                                                          request->className,
1502                                                                          false,
1503                                                                          true,
1504                                                                          true,
1505                                                                          CIMPropertyList());
1506                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1507                                      }
1508                                      catch (CIMException e)
1509                                      {
1510                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1511                                         throw;
1512                                      }
1513 mark.hamzy      1.40     
1514 mark.hamzy      1.36                 CIMClass *pcls = new CIMClass (cls);
1515                          
1516                                      JMPIjvm::checkException(env);
1517                          
1518                                      jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1519                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1520                          
1521                                      JMPIjvm::checkException(env);
1522                          
1523                                      jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1524                                                                           id,
1525                                                                           jcop,
1526                                                                           jcimClass);
1527                          
1528                                      JMPIjvm::checkException(env);
1529                          
1530                                      STAT_PMS_PROVIDEREND;
1531                          
1532                                      handler.processing();
1533                                      if (jVec) {
1534                                          for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1535 mark.hamzy      1.36                         JMPIjvm::checkException(env);
1536                          
1537                                              jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1538                          
1539                                              JMPIjvm::checkException(env);
1540                          
1541                                              jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1542                                              CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1543                          
1544                                              JMPIjvm::checkException(env);
1545                          
1546                                              handler.deliver(*copRet);
1547                                          }
1548                                      }
1549                                      handler.complete();
1550                                      break;
1551                                  }
1552                          
1553 mark.hamzy      1.25             case METHOD_SNIA_PROVIDER20:
1554                                  {
1555 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1556                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1557 mark.hamzy      1.25     
1558                                      JMPIjvm::checkException(env);
1559                          
1560 mark.hamzy      1.40                 CIMClass cls;
1561                          
1562                                      try
1563                                      {
1564                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1565                                         AutoMutex lock (pr._cimomMutex);
1566                          
1567                                         cls = pr._cimom_handle->getClass(context,
1568                                                                          request->nameSpace,
1569                                                                          request->className,
1570                                                                          false,
1571                                                                          true,
1572                                                                          true,
1573                                                                          CIMPropertyList());
1574                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
1575                                      }
1576                                      catch (CIMException e)
1577                                      {
1578                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
1579                                         throw;
1580                                      }
1581 mark.hamzy      1.40     
1582 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
1583 mark.hamzy      1.25     
1584                                      JMPIjvm::checkException(env);
1585                          
1586 mark.hamzy      1.29                 jint    jcimClassRef = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
1587                                      jobject jcimClass    = env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcimClassRef);
1588 mark.hamzy      1.25     
1589                                      JMPIjvm::checkException(env);
1590                          
1591                                      jobject jVec = env->CallObjectMethod((jobject)pr.jProvider,
1592                                                                           id,
1593 mark.hamzy      1.29                                                      jcop,
1594 mark.hamzy      1.25                                                      true,
1595 mark.hamzy      1.29                                                      jcimClass);
1596 mark.hamzy      1.25     
1597 mark.hamzy      1.23                 JMPIjvm::checkException(env);
1598                          
1599                                      STAT_PMS_PROVIDEREND;
1600                          
1601                                      handler.processing();
1602 mark.hamzy      1.25                 if (jVec) {
1603                                          for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1604 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1605                          
1606 mark.hamzy      1.29                         jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1607                          
1608 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1609                          
1610 mark.hamzy      1.29                         jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1611                                              CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
1612 schuur          1.13     
1613 mark.hamzy      1.23                         JMPIjvm::checkException(env);
1614 schuur          1.13     
1615 mark.hamzy      1.29                         handler.deliver(*copRet);
1616 mark.hamzy      1.23                     }
1617                                      }
1618                                      handler.complete();
1619 mark.hamzy      1.25                 break;
1620                                  }
1621                          
1622                                  case METHOD_UNKNOWN:
1623                                  {
1624                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
1625                                      break;
1626                                  }
1627 schuur          1.1              }
1628                              }
1629                              HandlerCatch(handler);
1630 mark.hamzy      1.23     
1631                              if (env) JMPIjvm::detachThread();
1632 schuur          1.1      
1633                              PEG_METHOD_EXIT();
1634                          
1635 w.white         1.31         STAT_COPYDISPATCHER
1636                          
1637 schuur          1.1          return(response);
1638                          }
1639                          
1640                          Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
1641                          {
1642 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleCreateInstanceRequest");
1643                          
1644                              HandlerIntro(CreateInstance,message,request,response,handler,CIMObjectPath());
1645 schuur          1.1      
1646 mark.hamzy      1.25         typedef enum {
1647                                 METHOD_UNKNOWN = 0,
1648                                 METHOD_SNIA_PROVIDER20,
1649                              } METHOD_VERSION;
1650                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1651                              JNIEnv          *env           = NULL;
1652                          
1653 schuur          1.1          try {
1654                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1655                                      "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
1656                                      System::getHostName(),
1657                                      request->nameSpace.getString(),
1658                                      request->newInstance.getPath().getClassName().getString());
1659                          
1660 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));
1661                          
1662 schuur          1.1              // make target object path
1663 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1664                                                                                 request->nameSpace,
1665                                                                                 request->newInstance.getPath().getClassName(),
1666                                                                                 request->newInstance.getPath().getKeyBindings());
1667 schuur          1.1      
1668                                  // resolve provider name
1669 kumpf           1.2              ProviderName name = _resolveProviderName(
1670                                      request->operationContext.get(ProviderIdContainer::NAME));
1671 schuur          1.1      
1672                                  // get cached or load new provider module
1673                                  JMPIProvider::OpProviderHolder ph =
1674                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
1675 mark.hamzy      1.23                   String::EMPTY);
1676 schuur          1.1      
1677                                  // convert arguments
1678                                  OperationContext context;
1679                          
1680 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
1681                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1682                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1683 schuur          1.1      
1684                                  // forward request
1685 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
1686 schuur          1.1      
1687 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createInstance: " + ph.GetProvider().getName());
1688 schuur          1.1      
1689 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: Calling provider createInstance: "<<pr.getName()<<PEGASUS_STD(endl));
1690 schuur          1.12     
1691 mark.hamzy      1.25             JvmVector *jv = 0;
1692                          
1693                                  env = JMPIjvm::attachThread(&jv);
1694                          
1695 mark.hamzy      1.37             if (!env)
1696                                  {
1697                                      PEG_METHOD_EXIT();
1698                          
1699                                      STAT_COPYDISPATCHER
1700                          
1701                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1702                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1703                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1704                                  }
1705                          
1706 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
1707                          
1708                                  STAT_GETSTARTTIME;
1709                          
1710                                  jmethodID id = NULL;
1711                          
1712                                  // public abstract org.pegasus.jmpi.CIMObjectPath createInstance (org.pegasus.jmpi.CIMObjectPath cop,
1713                                  //                                                                org.pegasus.jmpi.CIMInstance   cimInstance)
1714                                  //        throws org.pegasus.jmpi.CIMException
1715                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1716                                                        "createInstance",
1717                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
1718 schuur          1.1      
1719 mark.hamzy      1.25             if (id != NULL)
1720                                  {
1721                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1722                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1723                                  }
1724 mark.hamzy      1.23     
1725                                  JMPIjvm::checkException(env);
1726                          
1727 mark.hamzy      1.25             switch (eMethodFound)
1728                                  {
1729                                  case METHOD_SNIA_PROVIDER20:
1730                                  {
1731 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1732                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1733 mark.hamzy      1.25     
1734                                      JMPIjvm::checkException(env);
1735                          
1736 mark.hamzy      1.29                 CIMInstance *ci     = new CIMInstance (request->newInstance);
1737                                      jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
1738                                      jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
1739 mark.hamzy      1.25     
1740                                      JMPIjvm::checkException(env);
1741 schuur          1.1      
1742 mark.hamzy      1.29                 DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jcop = "<<jcop<<", jci = "<<jci<<PEGASUS_STD(endl));
1743 schuur          1.1      
1744 mark.hamzy      1.29                 jobject jcopRet = env->CallObjectMethod((jobject)pr.jProvider,
1745                                                                              id,
1746                                                                              jcop,
1747                                                                              jci);
1748 schuur          1.1      
1749 mark.hamzy      1.25                 JMPIjvm::checkException(env);
1750 schuur          1.1      
1751 mark.hamzy      1.25                 STAT_PMS_PROVIDEREND;
1752 mark.hamzy      1.23     
1753 mark.hamzy      1.25                 handler.processing();
1754 mark.hamzy      1.23     
1755 mark.hamzy      1.29                 if (jcopRet) {
1756                                          jint           jCopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
1757                                          CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCopRetRef);
1758 mark.hamzy      1.23     
1759 mark.hamzy      1.29                     handler.deliver(*copRet);
1760 mark.hamzy      1.25                 }
1761                                      handler.complete();
1762                                      break;
1763                                  }
1764 mark.hamzy      1.23     
1765 mark.hamzy      1.25             case METHOD_UNKNOWN:
1766                                  {
1767                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
1768                                      break;
1769                                  }
1770 schuur          1.1              }
1771                              }
1772                              HandlerCatch(handler);
1773 mark.hamzy      1.23     
1774 schuur          1.1          if (env) JMPIjvm::detachThread();
1775 mark.hamzy      1.23     
1776 schuur          1.1          PEG_METHOD_EXIT();
1777                          
1778 w.white         1.31         STAT_COPYDISPATCHER
1779                          
1780 schuur          1.1          return(response);
1781                          }
1782                          
1783                          Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
1784                          {
1785 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleModifyInstanceRequest");
1786 schuur          1.1      
1787                              HandlerIntroVoid(ModifyInstance,message,request,response,handler);
1788 mark.hamzy      1.23     
1789 mark.hamzy      1.25         typedef enum {
1790                                 METHOD_UNKNOWN = 0,
1791                                 METHOD_PEGASUS_24,
1792                                 METHOD_SNIA_PROVIDER20,
1793                              } METHOD_VERSION;
1794                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1795                              JNIEnv          *env           = NULL;
1796 schuur          1.13     
1797 schuur          1.1          try {
1798                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1799 konrad.r        1.15                 "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
1800 schuur          1.1                  System::getHostName(),
1801                                      request->nameSpace.getString(),
1802                                      request->modifiedInstance.getPath().getClassName().getString());
1803                          
1804 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));
1805                          
1806 schuur          1.1              // make target object path
1807 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1808                                                                                 request->nameSpace,
1809                                                                                 request->modifiedInstance.getPath ().getClassName(),
1810                                                                                 request->modifiedInstance.getPath ().getKeyBindings());
1811 schuur          1.1      
1812                                  // resolve provider name
1813 kumpf           1.2              ProviderName name = _resolveProviderName(
1814                                      request->operationContext.get(ProviderIdContainer::NAME));
1815 schuur          1.1      
1816 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: provider name physical = "<<name.getPhysicalName()<<", logical = "<<name.getLogicalName()<<PEGASUS_STD(endl));
1817                          
1818 schuur          1.1              // get cached or load new provider module
1819                                  JMPIProvider::OpProviderHolder ph =
1820                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1821                          
1822                                  // convert arguments
1823                                  OperationContext context;
1824                          
1825 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
1826                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1827                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1828 schuur          1.1      
1829                                  // forward request
1830 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
1831 mark.hamzy      1.23     
1832                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.modifyInstance: " + pr.getName());
1833                          
1834 mark.hamzy      1.25             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: Calling provider "<<PEGASUS_STD(hex)<<(int)&pr<<PEGASUS_STD(dec)<<", name = "<<pr.getName ()<<", module = "<<pr.getModule()<<" modifyInstance: "<<pr.getName()<<PEGASUS_STD(endl));
1835                          
1836                                  JvmVector *jv = 0;
1837                          
1838                                  env = JMPIjvm::attachThread(&jv);
1839                          
1840 mark.hamzy      1.37             if (!env)
1841                                  {
1842                                      PEG_METHOD_EXIT();
1843                          
1844                                      STAT_COPYDISPATCHER
1845                          
1846                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
1847                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
1848                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
1849                                  }
1850                          
1851 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
1852 mark.hamzy      1.23     
1853 mark.hamzy      1.25             STAT_GETSTARTTIME;
1854                          
1855                                  jmethodID id = NULL;
1856                          
1857                                  // public abstract void setInstance (org.pegasus.jmpi.CIMObjectPath cop,
1858                                  //                                   org.pegasus.jmpi.CIMInstance   cimInstance)
1859                                  //        org.pegasus.jmpi.throws CIMException
1860                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1861                                                        "setInstance",
1862                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
1863                          
1864                                  if (id != NULL)
1865                                  {
1866                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1867                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1868                                  }
1869                          
1870                                  if (id == NULL)
1871                                  {
1872                                      env->ExceptionClear();
1873                          
1874 mark.hamzy      1.25                 // public void setInstance (org.pegasus.jmpi.CIMObjectPath op,
1875                                      //                          org.pegasus.jmpi.CIMInstance   ci,
1876                                      //                          boolean                        includeQualifiers,
1877                                      //                          java.lang.String[]             propertyList)
1878                                      //        throws org.pegasus.jmpi.CIMException
1879                                      id = env->GetMethodID((jclass)pr.jProviderClass,
1880                                                            "setInstance",
1881                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
1882 schuur          1.1      
1883 mark.hamzy      1.25                 if (id != NULL)
1884                                      {
1885                                          eMethodFound = METHOD_PEGASUS_24;
1886                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
1887                                      }
1888                                  }
1889 schuur          1.1      
1890 mark.hamzy      1.23             JMPIjvm::checkException(env);
1891 schuur          1.1      
1892 mark.hamzy      1.25             switch (eMethodFound)
1893                                  {
1894                                  case METHOD_PEGASUS_24:
1895                                  {
1896 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1897                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1898 mark.hamzy      1.25     
1899                                      JMPIjvm::checkException(env);
1900                          
1901 mark.hamzy      1.29                 CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
1902                                      jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
1903                                      jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
1904 mark.hamzy      1.25     
1905                                      JMPIjvm::checkException(env);
1906 schuur          1.1      
1907 mark.hamzy      1.25                 jobjectArray jPropertyList = getList(jv,env,request->propertyList);
1908 schuur          1.1      
1909 mark.hamzy      1.25                 env->CallVoidMethod((jobject)pr.jProvider,
1910                                                          id,
1911 mark.hamzy      1.29                                     jcop,
1912                                                          jci,
1913 mark.hamzy      1.36                                     JMPI_INCLUDE_QUALIFIERS,
1914 mark.hamzy      1.25                                     jPropertyList);
1915 schuur          1.1      
1916 mark.hamzy      1.25                 JMPIjvm::checkException(env);
1917 schuur          1.13     
1918 mark.hamzy      1.25                 STAT_PMS_PROVIDEREND;
1919                                      break;
1920 schuur          1.13             }
1921 schuur          1.1      
1922 mark.hamzy      1.25             case METHOD_SNIA_PROVIDER20:
1923                                  {
1924 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
1925                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
1926 mark.hamzy      1.25     
1927                                      JMPIjvm::checkException(env);
1928                          
1929 mark.hamzy      1.29                 CIMInstance *ci     = new CIMInstance (request->modifiedInstance);
1930                                      jint         jciRef = DEBUG_ConvertCToJava (CIMInstance*, jint, ci);
1931                                      jobject      jci    = env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jciRef);
1932 mark.hamzy      1.25     
1933                                      JMPIjvm::checkException(env);
1934                          
1935                                      env->CallVoidMethod((jobject)pr.jProvider,
1936                                                          id,
1937 mark.hamzy      1.29                                     jcop,
1938                                                          jci);
1939 mark.hamzy      1.25     
1940                                      JMPIjvm::checkException(env);
1941 schuur          1.13     
1942 mark.hamzy      1.25                 STAT_PMS_PROVIDEREND;
1943                                      break;
1944                                  }
1945 mark.hamzy      1.23     
1946 mark.hamzy      1.25             case METHOD_UNKNOWN:
1947                                  {
1948                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
1949                                      break;
1950                                  }
1951                                  }
1952 schuur          1.1          }
1953                              HandlerCatch(handler);
1954 mark.hamzy      1.23     
1955 schuur          1.1          if (env) JMPIjvm::detachThread();
1956 mark.hamzy      1.23     
1957 schuur          1.1          PEG_METHOD_EXIT();
1958                          
1959 w.white         1.31         STAT_COPYDISPATCHER
1960                          
1961 schuur          1.1          return(response);
1962                          }
1963                          
1964                          Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
1965                          {
1966 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleDeleteInstanceRequest");
1967                          
1968                              HandlerIntroVoid(DeleteInstance,message,request,response,handler);
1969 schuur          1.1      
1970 mark.hamzy      1.25         typedef enum {
1971                                 METHOD_UNKNOWN = 0,
1972                                 METHOD_SNIA_PROVIDER20,
1973                              } METHOD_VERSION;
1974                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1975                              JNIEnv          *env           = NULL;
1976                          
1977 schuur          1.1          try {
1978                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1979 konrad.r        1.15                 "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
1980 schuur          1.1                  System::getHostName(),
1981                                      request->nameSpace.getString(),
1982                                      request->instanceName.getClassName().getString());
1983                          
1984 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));
1985                          
1986 schuur          1.1              // make target object path
1987 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
1988                                                                                 request->nameSpace,
1989                                                                                 request->instanceName.getClassName(),
1990                                                                                 request->instanceName.getKeyBindings());
1991 schuur          1.1      
1992                                  // resolve provider name
1993 kumpf           1.2              ProviderName name = _resolveProviderName(
1994                                      request->operationContext.get(ProviderIdContainer::NAME));
1995 schuur          1.1      
1996                                  // get cached or load new provider module
1997                                  JMPIProvider::OpProviderHolder ph =
1998                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1999                          
2000                                  // convert arguments
2001                                  OperationContext context;
2002                          
2003 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
2004                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2005                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2006 schuur          1.1      
2007                                  // forward request
2008 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
2009 schuur          1.1      
2010 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteInstance: " + pr.getName());
2011 schuur          1.1      
2012 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: Calling provider deleteInstance: "<<pr.getName()<<PEGASUS_STD(endl));
2013 schuur          1.1      
2014 mark.hamzy      1.25             JvmVector *jv = 0;
2015                          
2016                                  env = JMPIjvm::attachThread(&jv);
2017                          
2018 mark.hamzy      1.37             if (!env)
2019                                  {
2020                                      PEG_METHOD_EXIT();
2021                          
2022                                      STAT_COPYDISPATCHER
2023                          
2024                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2025                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2026                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2027                                  }
2028                          
2029 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
2030                          
2031                                  STAT_GETSTARTTIME;
2032                          
2033                                  jmethodID id = NULL;
2034                          
2035                                  // public abstract void deleteInstance (org.pegasus.jmpi.CIMObjectPath cop)
2036                                  //        throws org.pegasus.jmpi.CIMException
2037                                  id = env->GetMethodID((jclass)pr.jProviderClass,
2038                                                        "deleteInstance",
2039                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
2040 schuur          1.1      
2041 mark.hamzy      1.25             if (id != NULL)
2042                                  {
2043                                      eMethodFound = METHOD_SNIA_PROVIDER20;
2044                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2045                                  }
2046 mark.hamzy      1.23     
2047                                  JMPIjvm::checkException(env);
2048 schuur          1.1      
2049 mark.hamzy      1.25             switch (eMethodFound)
2050                                  {
2051                                  case METHOD_SNIA_PROVIDER20:
2052                                  {
2053 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2054                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
2055 mark.hamzy      1.25     
2056                                      JMPIjvm::checkException(env);
2057                          
2058 mark.hamzy      1.36                 env->CallVoidMethod((jobject)pr.jProvider,
2059                                                          id,
2060                                                          jcop);
2061 mark.hamzy      1.25     
2062                                      JMPIjvm::checkException(env);
2063                          
2064                                      STAT_PMS_PROVIDEREND;
2065                                      break;
2066                                  }
2067                          
2068                                  case METHOD_UNKNOWN:
2069                                  {
2070                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: should not be here!"<<PEGASUS_STD(endl));
2071                                      break;
2072                                  }
2073                                  }
2074                              }
2075                              HandlerCatch(handler);
2076                          
2077                              if (env) JMPIjvm::detachThread();
2078                          
2079                              PEG_METHOD_EXIT();
2080                          
2081 w.white         1.31         STAT_COPYDISPATCHER
2082                          
2083 mark.hamzy      1.25         return(response);
2084                          }
2085                          
2086                          Message * JMPIProviderManager::handleExecQueryRequest(const Message * message) throw()
2087                          {
2088                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleExecQueryRequest");
2089                          
2090                              HandlerIntro(ExecQuery,message,request,response,handler,Array<CIMObject>());
2091                          
2092                              typedef enum {
2093                                 METHOD_UNKNOWN = 0,
2094                                 METHOD_PEGASUS_24,
2095 mark.hamzy      1.36            METHOD_PEGASUS_25,
2096 mark.hamzy      1.25            METHOD_SNIA_PROVIDER20,
2097                              } METHOD_VERSION;
2098                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2099                              JNIEnv          *env           = NULL;
2100                          
2101                              try {
2102                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2103                                      "JMPIProviderManager::handleExecQueryRequest - Host name: $0  Name space: $1  Class name: $2",
2104                                      System::getHostName(),
2105                                      request->nameSpace.getString(),
2106                                      request->className.getString());
2107                          
2108                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
2109                          
2110                                  // make target object path
2111 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2112                                                                                 request->nameSpace,
2113                                                                                 request->className);
2114 mark.hamzy      1.25     
2115                                  // resolve provider name
2116                                  ProviderName name = _resolveProviderName(
2117                                      request->operationContext.get(ProviderIdContainer::NAME));
2118                          
2119                                  // get cached or load new provider module
2120                                  JMPIProvider::OpProviderHolder ph =
2121                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2122                          
2123                                  // convert arguments
2124                                  OperationContext context;
2125                          
2126                                  context.insert(request->operationContext.get(IdentityContainer::NAME));
2127                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2128                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2129                          
2130                                  // forward request
2131                                  JMPIProvider &pr = ph.GetProvider();
2132                          
2133                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.execQuery: " + pr.getName());
2134                          
2135 mark.hamzy      1.25             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Calling provider execQuery: "<<pr.getName()<<", queryLanguage: "<<request->queryLanguage<<", query: "<<request->query<<PEGASUS_STD(endl));
2136                          
2137                                  JvmVector *jv = 0;
2138                          
2139                                  env = JMPIjvm::attachThread(&jv);
2140                          
2141 mark.hamzy      1.37             if (!env)
2142                                  {
2143                                      PEG_METHOD_EXIT();
2144                          
2145                                      STAT_COPYDISPATCHER
2146                          
2147                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2148                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2149                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2150                                  }
2151                          
2152 mark.hamzy      1.23             JMPIProvider::pm_service_op_lock op_lock(&pr);
2153 schuur          1.1      
2154 mark.hamzy      1.23             STAT_GETSTARTTIME;
2155 schuur          1.1      
2156 mark.hamzy      1.25             jmethodID id = NULL;
2157                          
2158                                  // public abstract java.util.Vector execQuery (org.pegasus.jmpi.CIMObjectPath cop,
2159                                  //                                             java.lang.String               queryStatement,
2160                                  //                                             int                            ql,
2161                                  //                                             org.pegasus.jmpi.CIMClass      cimClass)
2162                                  //        throws org.pegasus.jmpi.CIMException
2163                                  //
2164                                  id = env->GetMethodID((jclass)pr.jProviderClass,
2165                                                        "execQuery",
2166                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
2167                          
2168                                  if (id != NULL)
2169                                  {
2170                                      eMethodFound = METHOD_SNIA_PROVIDER20;
2171                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2172                                  }
2173                          
2174                                  if (id == NULL)
2175                                  {
2176                                      env->ExceptionClear();
2177 mark.hamzy      1.25     
2178 mark.hamzy      1.36                 // public abstract org.pegasus.jmpi.CIMInstance[] execQuery(org.pegasus.jmpi.CIMObjectPath cop,
2179 mark.hamzy      1.25                 //                                                          java.lang.String               query,
2180                                      //                                                          java.lang.String               ql,
2181 mark.hamzy      1.36                 //                                                          org.pegasus.jmpi.CIMClass      cimClass)
2182 mark.hamzy      1.25                 //        throws org.pegasus.jmpi.CIMException
2183                                      id = env->GetMethodID((jclass)pr.jProviderClass,
2184                                                            "execQuery",
2185                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)[Lorg/pegasus/jmpi/CIMInstance;");
2186                          
2187                                      if (id != NULL)
2188                                      {
2189                                          eMethodFound = METHOD_PEGASUS_24;
2190                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
2191                                      }
2192                                  }
2193                          
2194                                  if (id == NULL)
2195                                  {
2196 mark.hamzy      1.36                 env->ExceptionClear();
2197                          
2198                                      // public abstract java.util.Vector execQuery(org.pegasus.jmpi.CIMObjectPath cop,
2199                                      //                                            org.pegasus.jmpi.CIMClass      cimClass,
2200                                      //                                            java.lang.String               query,
2201                                      //                                            java.lang.String               ql)
2202                                      //        throws org.pegasus.jmpi.CIMException
2203                                      id = env->GetMethodID((jclass)pr.jProviderClass,
2204                                                            "execQuery",
2205                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
2206                          
2207                                      if (id != NULL)
2208                                      {
2209                                          eMethodFound = METHOD_PEGASUS_25;
2210                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found METHOD_PEGASUS_25."<<PEGASUS_STD(endl));
2211                                      }
2212                                  }
2213                          
2214                                  if (id == NULL)
2215                                  {
2216 mark.hamzy      1.25                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: found no method!"<<PEGASUS_STD(endl));
2217                                  }
2218                          
2219 schuur          1.1              JMPIjvm::checkException(env);
2220                          
2221 mark.hamzy      1.25             switch (eMethodFound)
2222                                  {
2223                                  case METHOD_PEGASUS_24:
2224                                  {
2225 mark.hamzy      1.27                 jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2226 mark.hamzy      1.25                 jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2227                          
2228                                      JMPIjvm::checkException(env);
2229                          
2230                                      jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2231                                      jstring jquery         = env->NewStringUTF(request->query.getCString());
2232                          
2233 mark.hamzy      1.40                 CIMClass cls;
2234                          
2235                                      try
2236                                      {
2237                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2238                                         AutoMutex lock (pr._cimomMutex);
2239                          
2240                                         cls = pr._cimom_handle->getClass(context,
2241                                                                          request->nameSpace,
2242                                                                          request->className,
2243                                                                          false,
2244                                                                          true,
2245                                                                          true,
2246                                                                          CIMPropertyList());
2247                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2248                                      }
2249                                      catch (CIMException e)
2250                                      {
2251                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2252                                         throw;
2253                                      }
2254 mark.hamzy      1.40     
2255 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
2256                          
2257 mark.hamzy      1.25                 JMPIjvm::checkException(env);
2258                          
2259 mark.hamzy      1.27                 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2260 mark.hamzy      1.25     
2261                                      jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2262                          
2263                                      JMPIjvm::checkException(env);
2264                          
2265                                      jobjectArray jAr = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2266                                                                                             id,
2267                                                                                             jcop,
2268                                                                                             jquery,
2269                                                                                             jqueryLanguage,
2270                                                                                             jCc);
2271 mark.hamzy      1.23     
2272 mark.hamzy      1.25                 JMPIjvm::checkException(env);
2273                          
2274                                      STAT_PMS_PROVIDEREND;
2275                          
2276                                      handler.processing();
2277                                      if (jAr) {
2278                                          for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
2279                                              JMPIjvm::checkException(env);
2280                          
2281 mark.hamzy      1.29                         jobject jciRet = env->GetObjectArrayElement(jAr,i);
2282                          
2283 mark.hamzy      1.25                         JMPIjvm::checkException(env);
2284 mark.hamzy      1.23     
2285 mark.hamzy      1.29                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2286                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2287 mark.hamzy      1.25     
2288                                              JMPIjvm::checkException(env);
2289                          
2290 mark.hamzy      1.29                         handler.deliver(*ciRet);
2291 mark.hamzy      1.25                     }
2292                                      }
2293                                      handler.complete();
2294                                      break;
2295                                  }
2296                          
2297 mark.hamzy      1.36             case METHOD_PEGASUS_25:
2298                                  {
2299                                      jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2300                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2301                          
2302                                      JMPIjvm::checkException(env);
2303                          
2304                                      jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2305                                      jstring jquery         = env->NewStringUTF(request->query.getCString());
2306                          
2307 mark.hamzy      1.40                 CIMClass cls;
2308                          
2309                                      try
2310                                      {
2311                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2312                                         AutoMutex lock (pr._cimomMutex);
2313                          
2314                                         cls = pr._cimom_handle->getClass(context,
2315                                                                          request->nameSpace,
2316                                                                          request->className,
2317                                                                          false,
2318                                                                          true,
2319                                                                          true,
2320                                                                          CIMPropertyList());
2321                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2322                                      }
2323                                      catch (CIMException e)
2324                                      {
2325                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2326                                         throw;
2327                                      }
2328 mark.hamzy      1.40     
2329 mark.hamzy      1.36                 CIMClass *pcls = new CIMClass (cls);
2330                          
2331                                      JMPIjvm::checkException(env);
2332                          
2333                                      jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2334                          
2335                                      jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2336                          
2337                                      JMPIjvm::checkException(env);
2338                          
2339                                      jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2340                                                                                             id,
2341                                                                                             jcop,
2342                                                                                             jCc,
2343                                                                                             jquery,
2344                                                                                             jqueryLanguage);
2345                          
2346                                      JMPIjvm::checkException(env);
2347                          
2348                                      STAT_PMS_PROVIDEREND;
2349                          
2350 mark.hamzy      1.36                 handler.processing();
2351                                      if (jVec) {
2352                                          for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
2353                                              JMPIjvm::checkException(env);
2354                          
2355                                              jobject jciRet = env->GetObjectArrayElement(jVec,i);
2356                          
2357                                              JMPIjvm::checkException(env);
2358                          
2359                                              jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2360                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2361                          
2362                                              JMPIjvm::checkException(env);
2363                          
2364                                              handler.deliver(*ciRet);
2365                                          }
2366                                      }
2367                                      handler.complete();
2368                                      break;
2369                                  }
2370                          
2371 mark.hamzy      1.25             case METHOD_SNIA_PROVIDER20:
2372                                  {
2373 mark.hamzy      1.27                 jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2374 mark.hamzy      1.25                 jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
2375                          
2376                                      JMPIjvm::checkException(env);
2377                          
2378                                      jstring jqueryLanguage = env->NewStringUTF(request->queryLanguage.getCString());
2379                                      jstring jquery         = env->NewStringUTF(request->query.getCString());
2380                          
2381 mark.hamzy      1.40                 CIMClass cls;
2382                          
2383                                      try
2384                                      {
2385                                         DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2386                                         AutoMutex lock (pr._cimomMutex);
2387                          
2388                                         cls = pr._cimom_handle->getClass(context,
2389                                                                          request->nameSpace,
2390                                                                          request->className,
2391                                                                          false,
2392                                                                          true,
2393                                                                          true,
2394                                                                          CIMPropertyList());
2395                                         DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<request->className<<PEGASUS_STD(endl));
2396                                      }
2397                                      catch (CIMException e)
2398                                      {
2399                                         DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2400                                         throw;
2401                                      }
2402 mark.hamzy      1.40     
2403 mark.hamzy      1.27                 CIMClass *pcls = new CIMClass (cls);
2404                          
2405 mark.hamzy      1.25                 JMPIjvm::checkException(env);
2406                          
2407 mark.hamzy      1.27                 jint jcls = DEBUG_ConvertCToJava (CIMClass*, jint, pcls);
2408 mark.hamzy      1.25     
2409                                      jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jcls);
2410                          
2411                                      JMPIjvm::checkException(env);
2412                          
2413                                      jint jql = 0; // @BUG - how to convert?
2414                          
2415                                      jobjectArray jVec = (jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2416                                                                                              id,
2417                                                                                              jcop,
2418                                                                                              jquery,
2419                                                                                              jql,
2420                                                                                              jCc);
2421                          
2422                                      JMPIjvm::checkException(env);
2423                          
2424                                      STAT_PMS_PROVIDEREND;
2425                          
2426                                      handler.processing();
2427                                      if (jVec) {
2428                                          for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
2429 mark.hamzy      1.25                         JMPIjvm::checkException(env);
2430                          
2431 mark.hamzy      1.29                         jobject jciRet = env->GetObjectArrayElement(jVec,i);
2432                          
2433 mark.hamzy      1.25                         JMPIjvm::checkException(env);
2434                          
2435 mark.hamzy      1.29                         jint         jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2436                                              CIMInstance *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2437 mark.hamzy      1.25     
2438                                              JMPIjvm::checkException(env);
2439                          
2440 mark.hamzy      1.29                         handler.deliver(*ciRet);
2441 mark.hamzy      1.25                     }
2442                                      }
2443                                      handler.complete();
2444                                      break;
2445                                  }
2446                          
2447                                  case METHOD_UNKNOWN:
2448                                  {
2449                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleExecQueryRequest: should not be here!"<<PEGASUS_STD(endl));
2450                                      break;
2451                                  }
2452                                  }
2453 schuur          1.1          }
2454                              HandlerCatch(handler);
2455 mark.hamzy      1.23     
2456 schuur          1.1          if (env) JMPIjvm::detachThread();
2457 mark.hamzy      1.23     
2458 schuur          1.1          PEG_METHOD_EXIT();
2459                          
2460 w.white         1.31         STAT_COPYDISPATCHER
2461                          
2462 schuur          1.1          return(response);
2463                          }
2464                          
2465                          Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
2466                          {
2467 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
2468                          
2469                              HandlerIntro(Associators,message,request,response,handler,Array<CIMObject>());
2470 schuur          1.1      
2471 mark.hamzy      1.24         typedef enum {
2472                                 METHOD_UNKNOWN = 0,
2473 mark.hamzy      1.25            METHOD_PEGASUS_24,
2474 mark.hamzy      1.24            METHOD_SNIA_PROVIDER20,
2475                              } METHOD_VERSION;
2476                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2477                              JNIEnv          *env           = NULL;
2478 schuur          1.13     
2479 schuur          1.1          try {
2480                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2481                                      "JMPIProviderManager::handleAssociatorsRequest - Host name: $0  Name space: $1  Class name: $2",
2482                                      System::getHostName(),
2483                                      request->nameSpace.getString(),
2484                                      request->objectName.getClassName().getString());
2485                          
2486 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));
2487 mark.hamzy      1.23     
2488 schuur          1.1              // make target object path
2489 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2490                                                                                 request->nameSpace,
2491                                                                                 request->objectName.getClassName(),
2492                                                                                 request->objectName.getKeyBindings());
2493                                  CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
2494                                                                                 request->nameSpace,
2495                                                                                 request->assocClass.getString());
2496 schuur          1.1      
2497                                  // resolve provider name
2498 kumpf           1.2              ProviderName name = _resolveProviderName(
2499                                      request->operationContext.get(ProviderIdContainer::NAME));
2500 schuur          1.1      
2501                                  // get cached or load new provider module
2502                                  JMPIProvider::OpProviderHolder ph =
2503                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2504                          
2505 mark.hamzy      1.24             // convert arguments
2506 schuur          1.1              OperationContext context;
2507                          
2508 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
2509                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2510                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2511 schuur          1.1      
2512                                  // forward request
2513 mark.hamzy      1.24             JMPIProvider &pr = ph.GetProvider();
2514                          
2515                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
2516 schuur          1.1      
2517 mark.hamzy      1.24             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
2518 schuur          1.1      
2519 mark.hamzy      1.24             JvmVector *jv = 0;
2520 schuur          1.1      
2521 mark.hamzy      1.24             env = JMPIjvm::attachThread(&jv);
2522 schuur          1.1      
2523 mark.hamzy      1.37             if (!env)
2524                                  {
2525                                      PEG_METHOD_EXIT();
2526                          
2527                                      STAT_COPYDISPATCHER
2528                          
2529                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2530                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2531                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2532                                  }
2533                          
2534 schuur          1.1              JMPIProvider::pm_service_op_lock op_lock(&pr);
2535                          
2536                                  STAT_GETSTARTTIME;
2537                          
2538 mark.hamzy      1.24             jmethodID id = NULL;
2539                          
2540                                  // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
2541 mark.hamzy      1.25             //                                               org.pegasus.jmpi.CIMObjectPath pathName,
2542 mark.hamzy      1.24             //                                               java.lang.String               resultClass,
2543                                  //                                               java.lang.String               role,
2544                                  //                                               java.lang.String               resultRole,
2545                                  //                                               boolean                        includeQualifiers,
2546                                  //                                               boolean                        includeClassOrigin,
2547                                  //                                               java.lang.String[]             propertyList)
2548 mark.hamzy      1.25             //        throws org.pegasus.jmpi.CIMException
2549 mark.hamzy      1.24             //
2550                                  id = env->GetMethodID((jclass)pr.jProviderClass,
2551                                                        "associators",
2552 mark.hamzy      1.25                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
2553                          //@BUG was:                   "(Lorg/pegasus/jmpi/CIMObjectPath;                                Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"
2554 mark.hamzy      1.24     
2555                                  if (id != NULL)
2556                                  {
2557 mark.hamzy      1.25                 eMethodFound = METHOD_SNIA_PROVIDER20;
2558                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2559 mark.hamzy      1.24             }
2560 schuur          1.12     
2561 mark.hamzy      1.24             if (id == NULL)
2562                                  {
2563                                      env->ExceptionClear();
2564                          
2565                                      // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
2566                                      //                                               java.lang.String               resultClass,
2567                                      //                                               java.lang.String               role,
2568                                      //                                               java.lang.String               resultRole,
2569                                      //                                               boolean                        includeQualifiers,
2570                                      //                                               boolean                        includeClassOrigin,
2571                                      //                                               java.lang.String[]             propertyList)
2572 mark.hamzy      1.25                 //        throws org.pegasus.jmpi.CIMException
2573 mark.hamzy      1.24                 //
2574                                      id = env->GetMethodID((jclass)pr.jProviderClass,
2575                                                            "associators",
2576 mark.hamzy      1.25                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
2577                          //@BUG was:                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"
2578 mark.hamzy      1.24     
2579                                      if (id != NULL)
2580                                      {
2581 mark.hamzy      1.25                     eMethodFound = METHOD_PEGASUS_24;
2582                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
2583 mark.hamzy      1.24                 }
2584                                  }
2585                          
2586                                  if (id == NULL)
2587                                  {
2588                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
2589 mark.hamzy      1.23             }
2590 mark.hamzy      1.24     
2591 schuur          1.1              JMPIjvm::checkException(env);
2592                          
2593 mark.hamzy      1.24             switch (eMethodFound)
2594                                  {
2595 mark.hamzy      1.25             case METHOD_PEGASUS_24:
2596 mark.hamzy      1.24             {
2597 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
2598 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2599                          
2600                                      JMPIjvm::checkException(env);
2601                          
2602                                      jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2603                                      jstring jRole        = env->NewStringUTF(request->role.getCString());
2604                                      jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
2605                          
2606                                      JMPIjvm::checkException(env);
2607                          
2608                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2609                          
2610 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
2611                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
2612                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
2613                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
2614                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
2615                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
2616                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
2617                          #endif
2618                          
2619 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2620                                                                                            id,
2621                                                                                            jAssociationName,
2622                                                                                            jResultClass,
2623                                                                                            jRole,
2624                                                                                            jResultRole,
2625 mark.hamzy      1.36                                                                       JMPI_INCLUDE_QUALIFIERS,
2626                                                                                            request->includeClassOrigin,
2627 mark.hamzy      1.24                                                                       jPropertyList);
2628 mark.hamzy      1.25     
2629 mark.hamzy      1.23                 JMPIjvm::checkException(env);
2630 schuur          1.13     
2631 mark.hamzy      1.23                 STAT_PMS_PROVIDEREND;
2632 schuur          1.1      
2633 mark.hamzy      1.23                 handler.processing();
2634                                      if (jVec) {
2635 mark.hamzy      1.24                     for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
2636 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2637 schuur          1.1      
2638 mark.hamzy      1.29                         jobject jciRet = env->GetObjectArrayElement(jVec,i);
2639 mark.hamzy      1.24     
2640 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2641 schuur          1.13     
2642 mark.hamzy      1.29                         jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2643 schuur          1.13     
2644 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2645 schuur          1.13     
2646 mark.hamzy      1.29                         CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2647 mark.hamzy      1.40                         CIMClass             cls;
2648                          
2649                                              try
2650                                              {
2651                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
2652                                                 AutoMutex lock (pr._cimomMutex);
2653                          
2654                                                 cls = pr._cimom_handle->getClass(context,
2655                                                                                  request->nameSpace,
2656                                                                                  ciRet->getClassName(),
2657                                                                                  false,
2658                                                                                  true,
2659                                                                                  true,
2660                                                                                  CIMPropertyList());
2661                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
2662                                              }
2663                                              catch (CIMException e)
2664                                              {
2665                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2666                                                 throw;
2667                                              }
2668 mark.hamzy      1.40     
2669 mark.hamzy      1.29                         const CIMObjectPath& op    = ciRet->getPath();
2670                                              CIMObjectPath        iop   = ciRet->buildPath(cls);
2671 mark.hamzy      1.24     
2672 mark.hamzy      1.27                         JMPIjvm::checkException(env);
2673                          
2674 mark.hamzy      1.23                         iop.setNameSpace(op.getNameSpace());
2675 mark.hamzy      1.29                         ciRet->setPath(iop);
2676 schuur          1.13     
2677 mark.hamzy      1.29                         handler.deliver(*ciRet);
2678 mark.hamzy      1.23                     }
2679                                      }
2680 mark.hamzy      1.24                 handler.complete();
2681                                      break;
2682 mark.hamzy      1.23             }
2683 mark.hamzy      1.24     
2684                                  case METHOD_SNIA_PROVIDER20:
2685                                  {
2686 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
2687 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2688                          
2689                                      JMPIjvm::checkException(env);
2690                          
2691 mark.hamzy      1.29                 jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2692 mark.hamzy      1.24                 jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
2693                          
2694                                      JMPIjvm::checkException(env);
2695                          
2696 mark.hamzy      1.25                 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2697                                      jstring jRole        = env->NewStringUTF(request->role.getCString());
2698                                      jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
2699                          
2700                                      JMPIjvm::checkException(env);
2701                          
2702                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
2703                          
2704 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
2705                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: assocName          = "<<assocPath->toString ()<<PEGASUS_STD(endl));
2706                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
2707                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultClass        = "<<request->resultClass<<PEGASUS_STD(endl));
2708                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: role               = "<<request->role<<PEGASUS_STD(endl));
2709                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: resultRole         = "<<request->resultRole<<PEGASUS_STD(endl));
2710                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
2711                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorsRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
2712                          #endif
2713                          
2714 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2715                                                                                           id,
2716                                                                                           jAssociationName,
2717                                                                                           jPathName,
2718                                                                                           jResultClass,
2719                                                                                           jRole,
2720                                                                                           jResultRole,
2721 mark.hamzy      1.32                                                                      JMPI_INCLUDE_QUALIFIERS,
2722                                                                                           request->includeClassOrigin,
2723 mark.hamzy      1.24                                                                      jPropertyList);
2724 mark.hamzy      1.25     
2725 mark.hamzy      1.23                 JMPIjvm::checkException(env);
2726                          
2727                                      STAT_PMS_PROVIDEREND;
2728                          
2729                                      handler.processing();
2730 mark.hamzy      1.24                 if (jVec) {
2731 mark.hamzy      1.29                     for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
2732 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2733                          
2734 mark.hamzy      1.29                         jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
2735 mark.hamzy      1.24     
2736 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2737                          
2738 mark.hamzy      1.29                         jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
2739                                              CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
2740 mark.hamzy      1.40                         CIMClass             cls;
2741                          
2742                                              try
2743                                              {
2744                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
2745                                                 AutoMutex lock (pr._cimomMutex);
2746                          
2747                                                 cls = pr._cimom_handle->getClass(context,
2748                                                                                  request->nameSpace,
2749                                                                                  ciRet->getClassName(),
2750                                                                                  false,
2751                                                                                  true,
2752                                                                                  true,
2753                                                                                  CIMPropertyList());
2754                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
2755                                              }
2756                                              catch (CIMException e)
2757                                              {
2758                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
2759                                                 throw;
2760                                              }
2761 mark.hamzy      1.40     
2762 mark.hamzy      1.29                         const CIMObjectPath& op        = ciRet->getPath();
2763                                              CIMObjectPath        iop       = ciRet->buildPath(cls);
2764 mark.hamzy      1.24     
2765 mark.hamzy      1.27                         JMPIjvm::checkException(env);
2766                          
2767 mark.hamzy      1.23                         iop.setNameSpace(op.getNameSpace());
2768 mark.hamzy      1.29                         ciRet->setPath(iop);
2769 schuur          1.13     
2770 mark.hamzy      1.29                         handler.deliver(*ciRet);
2771 mark.hamzy      1.23                     }
2772                                      }
2773 mark.hamzy      1.24                 handler.complete();
2774                                      break;
2775                                  }
2776                          
2777                                  case METHOD_UNKNOWN:
2778                                  {
2779                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
2780                                      break;
2781                                  }
2782 mark.hamzy      1.23             }
2783 schuur          1.1          }
2784                              HandlerCatch(handler);
2785 schuur          1.13     
2786                              if (env) JMPIjvm::detachThread();
2787                          
2788 schuur          1.1          PEG_METHOD_EXIT();
2789                          
2790 w.white         1.31         STAT_COPYDISPATCHER
2791                          
2792 schuur          1.1          return(response);
2793                          }
2794 schuur          1.13     
2795 schuur          1.1      Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
2796                          {
2797 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
2798                          
2799                              HandlerIntro(AssociatorNames,message,request,response,handler,Array<CIMObjectPath>());
2800 schuur          1.1      
2801 mark.hamzy      1.24         typedef enum {
2802                                 METHOD_UNKNOWN = 0,
2803 mark.hamzy      1.25            METHOD_PEGASUS_24,
2804 mark.hamzy      1.24            METHOD_SNIA_PROVIDER20
2805                              } METHOD_VERSION;
2806                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
2807                              JNIEnv          *env           = NULL;
2808 schuur          1.13     
2809 schuur          1.1          try {
2810                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2811                                      "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0  Name space: $1  Class name: $2",
2812                                      System::getHostName(),
2813                                      request->nameSpace.getString(),
2814                                      request->objectName.getClassName().getString());
2815                          
2816 mark.hamzy      1.29             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));
2817 mark.hamzy      1.23     
2818 schuur          1.1              // make target object path
2819 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
2820                                                                                 request->nameSpace,
2821                                                                                 request->objectName.getClassName(),
2822                                                                                 request->objectName.getKeyBindings());
2823                                  CIMObjectPath *assocPath  = new CIMObjectPath (System::getHostName(),
2824                                                                                 request->nameSpace,
2825                                                                                 request->assocClass.getString());
2826 mark.hamzy      1.23     
2827 schuur          1.1              // resolve provider name
2828 kumpf           1.2              ProviderName name = _resolveProviderName(
2829                                      request->operationContext.get(ProviderIdContainer::NAME));
2830 schuur          1.1      
2831                                  // get cached or load new provider module
2832                                  JMPIProvider::OpProviderHolder ph =
2833                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
2834                          
2835                                  // convert arguments
2836                                  OperationContext context;
2837                          
2838 mark.hamzy      1.23             context.insert(request->operationContext.get(IdentityContainer::NAME));
2839                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2840                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2841 schuur          1.1      
2842                                  // forward request
2843 mark.hamzy      1.24             JMPIProvider &pr = ph.GetProvider();
2844 schuur          1.1      
2845 mark.hamzy      1.24             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
2846 schuur          1.1      
2847 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
2848 schuur          1.1      
2849 mark.hamzy      1.24             JvmVector *jv = 0;
2850                          
2851                                  env = JMPIjvm::attachThread(&jv);
2852 schuur          1.1      
2853 mark.hamzy      1.37             if (!env)
2854                                  {
2855                                      PEG_METHOD_EXIT();
2856                          
2857                                      STAT_COPYDISPATCHER
2858                          
2859                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
2860                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
2861                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
2862                                  }
2863                          
2864 schuur          1.1              JMPIProvider::pm_service_op_lock op_lock(&pr);
2865                          
2866                                  STAT_GETSTARTTIME;
2867                          
2868 mark.hamzy      1.24             jmethodID id = NULL;
2869                          
2870                                  // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
2871 mark.hamzy      1.25             //                                                   org.pegasus.jmpi.CIMObjectPath pathName,
2872 mark.hamzy      1.24             //                                                   java.lang.String               resultClass,
2873                                  //                                                   java.lang.String               role,
2874                                  //                                                   java.lang.String               resultRole)
2875                                  //        throws org.pegasus.jmpi.CIMException
2876                                  id = env->GetMethodID((jclass)pr.jProviderClass,
2877                                                        "associatorNames",
2878 mark.hamzy      1.25                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
2879                          //@BUG was:                   "(Lorg/pegasus/jmpi/CIMObjectPath;                                Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;"
2880 mark.hamzy      1.24     
2881                                  if (id != NULL)
2882                                  {
2883 mark.hamzy      1.25                 eMethodFound = METHOD_SNIA_PROVIDER20;
2884                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
2885 mark.hamzy      1.24             }
2886                          
2887                                  if (id == NULL)
2888                                  {
2889                                      env->ExceptionClear();
2890                          
2891                                      // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
2892                                      //                                                   java.lang.String               resultClass,
2893                                      //                                                   java.lang.String               role,
2894                                      //                                                   java.lang.String               resultRole)
2895                                      //        throws org.pegasus.jmpi.CIMException
2896                                      id = env->GetMethodID((jclass)pr.jProviderClass,
2897                                                            "associatorNames",
2898 mark.hamzy      1.25                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
2899                          //@BUG was:                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"
2900 mark.hamzy      1.24     
2901                                      if (id != NULL)
2902                                      {
2903 mark.hamzy      1.25                     eMethodFound = METHOD_PEGASUS_24;
2904                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
2905 mark.hamzy      1.24                 }
2906                                  }
2907 schuur          1.13     
2908 mark.hamzy      1.24             if (id == NULL)
2909                                  {
2910                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
2911 mark.hamzy      1.23             }
2912 mark.hamzy      1.24     
2913 schuur          1.1              JMPIjvm::checkException(env);
2914                          
2915 mark.hamzy      1.24             switch (eMethodFound)
2916                                  {
2917 mark.hamzy      1.25             case METHOD_PEGASUS_24:
2918 mark.hamzy      1.24             {
2919 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
2920 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2921                          
2922                                      JMPIjvm::checkException(env);
2923                          
2924                                      jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2925                                      jstring jRole        = env->NewStringUTF(request->role.getCString());
2926                                      jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
2927                          
2928                                      JMPIjvm::checkException(env);
2929                          
2930 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
2931                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
2932                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
2933                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
2934                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
2935                          #endif
2936                          
2937 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2938                                                                                            id,
2939                                                                                            jAssociationName,
2940                                                                                            jResultClass,
2941                                                                                            jRole,
2942                                                                                            jResultRole);
2943 mark.hamzy      1.25     
2944 mark.hamzy      1.23                 JMPIjvm::checkException(env);
2945                          
2946                                      STAT_PMS_PROVIDEREND;
2947                          
2948                                      handler.processing();
2949                                      if (jVec) {
2950 mark.hamzy      1.24                     for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
2951 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2952                          
2953 mark.hamzy      1.29                         jobject jcopRet = env->GetObjectArrayElement(jVec,i);
2954 mark.hamzy      1.24     
2955 mark.hamzy      1.23                         JMPIjvm::checkException(env);
2956                          
2957 mark.hamzy      1.29                         jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
2958                                              CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRet);
2959 mark.hamzy      1.23     
2960                                              JMPIjvm::checkException(env);
2961                          
2962 mark.hamzy      1.29                         handler.deliver(*copRet);
2963 mark.hamzy      1.23                     }
2964                                      }
2965                                      handler.complete();
2966 mark.hamzy      1.24                 break;
2967 mark.hamzy      1.23             }
2968 mark.hamzy      1.24     
2969                                  case METHOD_SNIA_PROVIDER20:
2970                                  {
2971 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, assocPath);
2972 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
2973                          
2974                                      JMPIjvm::checkException(env);
2975                          
2976 mark.hamzy      1.29                 jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
2977 mark.hamzy      1.24                 jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
2978                          
2979                                      JMPIjvm::checkException(env);
2980                          
2981 mark.hamzy      1.25                 jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
2982                                      jstring jRole        = env->NewStringUTF(request->role.getCString());
2983                                      jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
2984                          
2985                                      JMPIjvm::checkException(env);
2986                          
2987 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
2988                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: assocName   = "<<assocPath->toString ()<<PEGASUS_STD(endl));
2989                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: pathName    = "<<objectPath->toString ()<<PEGASUS_STD(endl));
2990                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultClass = "<<request->resultClass<<PEGASUS_STD(endl));
2991                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: role        = "<<request->role<<PEGASUS_STD(endl));
2992                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: resultRole  = "<<request->resultRole<<PEGASUS_STD(endl));
2993                          #endif
2994                          
2995 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
2996                                                                                            id,
2997                                                                                            jAssociationName,
2998 mark.hamzy      1.29                                                                       jPathName,
2999 mark.hamzy      1.24                                                                       jResultClass,
3000                                                                                            jRole,
3001                                                                                            jResultRole);
3002 mark.hamzy      1.25     
3003 mark.hamzy      1.23                 JMPIjvm::checkException(env);
3004                          
3005                                      STAT_PMS_PROVIDEREND;
3006 schuur          1.13     
3007 mark.hamzy      1.23                 handler.processing();
3008 mark.hamzy      1.24                 if (jVec) {
3009 mark.hamzy      1.29                     for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3010 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3011 schuur          1.13     
3012 mark.hamzy      1.29                         jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3013 mark.hamzy      1.24     
3014 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3015 schuur          1.13     
3016 mark.hamzy      1.29                         jint           jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
3017                                              CIMObjectPath *copRet     = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
3018 schuur          1.1      
3019 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3020 schuur          1.1      
3021 mark.hamzy      1.29                         handler.deliver(*copRet);
3022 mark.hamzy      1.23                     }
3023                                      }
3024                                      handler.complete();
3025 mark.hamzy      1.24                 break;
3026                                  }
3027                          
3028                                  case METHOD_UNKNOWN:
3029                                  {
3030                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
3031                                      break;
3032                                  }
3033 mark.hamzy      1.23             }
3034 schuur          1.1          }
3035                              HandlerCatch(handler);
3036 schuur          1.12     
3037 mark.hamzy      1.23         if (env) JMPIjvm::detachThread();
3038 schuur          1.12     
3039 schuur          1.1          PEG_METHOD_EXIT();
3040                          
3041 w.white         1.31         STAT_COPYDISPATCHER
3042                          
3043 schuur          1.1          return(response);
3044                          }
3045                          
3046                          Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
3047                          {
3048 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
3049                          
3050                              HandlerIntro(References,message,request,response,handler,Array<CIMObject>());
3051 schuur          1.1      
3052 mark.hamzy      1.24         typedef enum {
3053                                 METHOD_UNKNOWN = 0,
3054 mark.hamzy      1.25            METHOD_PEGASUS_24,
3055 mark.hamzy      1.24            METHOD_SNIA_PROVIDER20,
3056                              } METHOD_VERSION;
3057                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3058                              JNIEnv          *env           = NULL;
3059 schuur          1.13     
3060 schuur          1.1          try {
3061                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3062 konrad.r        1.15                 "JMPIProviderManager::handleReferencesRequest - Host name: $0  Name space: $1  Class name: $2",
3063 schuur          1.1                  System::getHostName(),
3064                                      request->nameSpace.getString(),
3065                                      request->objectName.getClassName().getString());
3066                          
3067 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));
3068 mark.hamzy      1.23     
3069 schuur          1.1              // make target object path
3070 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3071                                                                                 request->nameSpace,
3072                                                                                 request->objectName.getClassName(),
3073                                                                                 request->objectName.getKeyBindings());
3074                                  CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
3075                                                                                 request->nameSpace,
3076                                                                                 request->resultClass.getString());
3077 schuur          1.1      
3078                                  // resolve provider name
3079 kumpf           1.2              ProviderName name = _resolveProviderName(
3080                                      request->operationContext.get(ProviderIdContainer::NAME));
3081 schuur          1.1      
3082                                  // get cached or load new provider module
3083                                  JMPIProvider::OpProviderHolder ph =
3084                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
3085                          
3086                                  // convert arguments
3087                                  OperationContext context;
3088                          
3089 schuur          1.12             context.insert(request->operationContext.get(IdentityContainer::NAME));
3090                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3091                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3092 schuur          1.1      
3093                                  // forward request
3094 mark.hamzy      1.24             JMPIProvider &pr = ph.GetProvider();
3095                          
3096                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
3097 schuur          1.1      
3098 mark.hamzy      1.24             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
3099 schuur          1.1      
3100 mark.hamzy      1.24             JvmVector *jv = 0;
3101 schuur          1.1      
3102 mark.hamzy      1.24             env = JMPIjvm::attachThread(&jv);
3103 schuur          1.1      
3104 mark.hamzy      1.37             if (!env)
3105                                  {
3106                                      PEG_METHOD_EXIT();
3107                          
3108                                      STAT_COPYDISPATCHER
3109                          
3110                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3111                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3112                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3113                                  }
3114                          
3115 schuur          1.1              JMPIProvider::pm_service_op_lock op_lock(&pr);
3116                          
3117                                  STAT_GETSTARTTIME;
3118                          
3119 mark.hamzy      1.24             jmethodID id = NULL;
3120                          
3121                                  // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
3122 mark.hamzy      1.25             //                                              org.pegasus.jmpi.CIMObjectPath pathName,
3123 mark.hamzy      1.24             //                                              java.lang.String               role,
3124                                  //                                              boolean                        includeQualifiers,
3125                                  //                                              boolean                        includeClassOrigin,
3126                                  //                                              java.lang.String[]             propertyList)
3127                                  //        throws org.pegasus.jmpi.CIMException
3128                                  id = env->GetMethodID((jclass)pr.jProviderClass,
3129                                                        "references",
3130 mark.hamzy      1.25                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
3131                          //@BUG was:                   "(Lorg/pegasus/jmpi/CIMObjectPath;                                Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;"
3132 mark.hamzy      1.24     
3133                                  if (id != NULL)
3134                                  {
3135 mark.hamzy      1.25                 eMethodFound = METHOD_SNIA_PROVIDER20;
3136                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3137 mark.hamzy      1.24             }
3138                          
3139                                  if (id == NULL)
3140                                  {
3141                                      env->ExceptionClear();
3142                          
3143                                      // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
3144                                      //                                              java.lang.String               role,
3145                                      //                                              boolean                        includeQualifiers,
3146                                      //                                              boolean                        includeClassOrigin,
3147                                      //                                              java.lang.String[]             propertyList)
3148                                      //        throws org.pegasus.jmpi.CIMException
3149                                      id = env->GetMethodID((jclass)pr.jProviderClass,
3150                                                            "references",
3151 mark.hamzy      1.25                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
3152                          //@BUG was:                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;"
3153 mark.hamzy      1.24     
3154                                      if (id != NULL)
3155                                      {
3156 mark.hamzy      1.25                     eMethodFound = METHOD_PEGASUS_24;
3157                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
3158 mark.hamzy      1.24                 }
3159                                  }
3160 schuur          1.12     
3161 mark.hamzy      1.24             if (id == NULL)
3162                                  {
3163 mark.hamzy      1.25                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: found no method!"<<PEGASUS_STD(endl));
3164 mark.hamzy      1.23             }
3165 mark.hamzy      1.24     
3166 schuur          1.1              JMPIjvm::checkException(env);
3167                          
3168 mark.hamzy      1.24             switch (eMethodFound)
3169                                  {
3170 mark.hamzy      1.25             case METHOD_PEGASUS_24:
3171 mark.hamzy      1.24             {
3172 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
3173 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3174                          
3175                                      JMPIjvm::checkException(env);
3176                          
3177                                      jstring jRole = env->NewStringUTF(request->role.getCString());
3178                          
3179                                      JMPIjvm::checkException(env);
3180                          
3181                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3182                          
3183 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
3184                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
3185                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3186                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3187                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3188                          #endif
3189                          
3190 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3191                                                                                            id,
3192                                                                                            jAssociationName,
3193                                                                                            jRole,
3194 mark.hamzy      1.36                                                                       JMPI_INCLUDE_QUALIFIERS,
3195                                                                                            request->includeClassOrigin,
3196 mark.hamzy      1.24                                                                       jPropertyList);
3197 mark.hamzy      1.25     
3198 mark.hamzy      1.23                 JMPIjvm::checkException(env);
3199                          
3200                                      STAT_PMS_PROVIDEREND;
3201                          
3202                                      handler.processing();
3203                                      if (jVec) {
3204 mark.hamzy      1.24                     for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3205 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3206                          
3207 mark.hamzy      1.29                         jobject jciRet = env->GetObjectArrayElement(jVec,i);
3208 mark.hamzy      1.24     
3209 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3210                          
3211 mark.hamzy      1.29                         jint jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3212 mark.hamzy      1.23     
3213                                              JMPIjvm::checkException(env);
3214                          
3215 mark.hamzy      1.29                         CIMInstance         *ciRet = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3216 mark.hamzy      1.40                         CIMClass             cls;
3217                          
3218                                              try
3219                                              {
3220                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3221                                                 AutoMutex lock (pr._cimomMutex);
3222                          
3223                                                 cls = pr._cimom_handle->getClass(context,
3224                                                                                  request->nameSpace,
3225                                                                                  ciRet->getClassName(),
3226                                                                                  false,
3227                                                                                  true,
3228                                                                                  true,
3229                                                                                  CIMPropertyList());
3230                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3231                                              }
3232                                              catch (CIMException e)
3233                                              {
3234                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3235                                                 throw;
3236                                              }
3237 mark.hamzy      1.40     
3238 mark.hamzy      1.29                         const CIMObjectPath& op    = ciRet->getPath();
3239                                              CIMObjectPath        iop   = ciRet->buildPath(cls);
3240 mark.hamzy      1.24     
3241 mark.hamzy      1.27                         JMPIjvm::checkException(env);
3242                          
3243 mark.hamzy      1.23                         iop.setNameSpace(op.getNameSpace());
3244 mark.hamzy      1.29                         ciRet->setPath(iop);
3245 schuur          1.13     
3246 mark.hamzy      1.29                         handler.deliver(*ciRet);
3247 mark.hamzy      1.23                     }
3248                                      }
3249                                      handler.complete();
3250 mark.hamzy      1.24                 break;
3251 mark.hamzy      1.23             }
3252 schuur          1.1      
3253 mark.hamzy      1.24             case METHOD_SNIA_PROVIDER20:
3254                                  {
3255 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
3256 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3257                          
3258                                      JMPIjvm::checkException(env);
3259                          
3260 mark.hamzy      1.29                 jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3261 mark.hamzy      1.24                 jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3262                          
3263                                      JMPIjvm::checkException(env);
3264                          
3265 mark.hamzy      1.25                 jstring jRole = env->NewStringUTF(request->role.getCString());
3266                          
3267                                      JMPIjvm::checkException(env);
3268                          
3269                                      jobjectArray jPropertyList = getList(jv,env,request->propertyList);
3270                          
3271 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
3272                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: assocName          = "<<resultPath->toString ()<<PEGASUS_STD(endl));
3273                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: pathName           = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3274                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3275                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeQualifiers  = "<<false<<PEGASUS_STD(endl));
3276                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferencesRequest: includeClassOrigin = "<<false<<PEGASUS_STD(endl));
3277                          #endif
3278                          
3279 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3280                                                                                            id,
3281                                                                                            jAssociationName,
3282                                                                                            jPathName,
3283                                                                                            jRole,
3284 mark.hamzy      1.32                                                                       JMPI_INCLUDE_QUALIFIERS,
3285                                                                                            request->includeClassOrigin,
3286 mark.hamzy      1.24                                                                       jPropertyList);
3287 mark.hamzy      1.25     
3288 mark.hamzy      1.24                 JMPIjvm::checkException(env);
3289                          
3290                                      STAT_PMS_PROVIDEREND;
3291                          
3292                                      handler.processing();
3293                                      if (jVec) {
3294 mark.hamzy      1.29                     for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3295 mark.hamzy      1.24                         JMPIjvm::checkException(env);
3296                          
3297 mark.hamzy      1.29                         jobject jciRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3298 mark.hamzy      1.24     
3299                                              JMPIjvm::checkException(env);
3300                          
3301 mark.hamzy      1.29                         jint                 jciRetRef = env->CallIntMethod(jciRet,JMPIjvm::jv.CIMInstanceCInst);
3302                                              CIMInstance         *ciRet     = DEBUG_ConvertJavaToC (jint, CIMInstance*, jciRetRef);
3303 mark.hamzy      1.40                         CIMClass             cls;
3304                          
3305                                              try
3306                                              {
3307                                                 DDD (PEGASUS_STD(cout)<<"enter: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3308                                                 AutoMutex lock (pr._cimomMutex);
3309                          
3310                                                 cls = pr._cimom_handle->getClass(context,
3311                                                                                  request->nameSpace,
3312                                                                                  ciRet->getClassName(),
3313                                                                                  false,
3314                                                                                  true,
3315                                                                                  true,
3316                                                                                  CIMPropertyList());
3317                                                 DDD (PEGASUS_STD(cout)<<"exit: cimom_handle->getClass("<<__LINE__<<") "<<ciRet->getClassName()<<PEGASUS_STD(endl));
3318                                              }
3319                                              catch (CIMException e)
3320                                              {
3321                                                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Error: Caught CIMExcetion during cimom_handle->getClass("<<__LINE__<<") "<<PEGASUS_STD(endl));
3322                                                 throw;
3323                                              }
3324 mark.hamzy      1.40     
3325 mark.hamzy      1.29                         const CIMObjectPath& op        = ciRet->getPath();
3326                                              CIMObjectPath        iop       = ciRet->buildPath(cls);
3327 schuur          1.1      
3328 mark.hamzy      1.27                         JMPIjvm::checkException(env);
3329                          
3330 mark.hamzy      1.24                         iop.setNameSpace(op.getNameSpace());
3331 mark.hamzy      1.29                         ciRet->setPath(iop);
3332 schuur          1.12     
3333 mark.hamzy      1.29                         handler.deliver(*ciRet);
3334 mark.hamzy      1.24                     }
3335                                      }
3336                                      handler.complete();
3337                                      break;
3338                                  }
3339 mark.hamzy      1.23     
3340 mark.hamzy      1.24             case METHOD_UNKNOWN:
3341                                  {
3342 mark.hamzy      1.25                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: should not be here!"<<PEGASUS_STD(endl));
3343 mark.hamzy      1.24                 break;
3344                                  }
3345 mark.hamzy      1.23             }
3346 schuur          1.1          }
3347                              HandlerCatch(handler);
3348 schuur          1.12     
3349                              if (env) JMPIjvm::detachThread();
3350                          
3351 schuur          1.1          PEG_METHOD_EXIT();
3352                          
3353 w.white         1.31         STAT_COPYDISPATCHER
3354                          
3355 schuur          1.1          return(response);
3356                          }
3357                          
3358                          Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
3359                          {
3360 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
3361                          
3362                              HandlerIntro(ReferenceNames,message,request,response,handler,Array<CIMObjectPath>());
3363 schuur          1.1      
3364 mark.hamzy      1.24         typedef enum {
3365                                 METHOD_UNKNOWN = 0,
3366 mark.hamzy      1.25            METHOD_PEGASUS_24,
3367 mark.hamzy      1.24            METHOD_SNIA_PROVIDER20,
3368                              } METHOD_VERSION;
3369                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3370                              JNIEnv          *env           = NULL;
3371 schuur          1.13     
3372 schuur          1.1          try {
3373                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3374                                      "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
3375                                      System::getHostName(),
3376                                      request->nameSpace.getString(),
3377                                      request->objectName.getClassName().getString());
3378                          
3379 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));
3380                          
3381 schuur          1.1              // make target object path
3382 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3383                                                                                 request->nameSpace,
3384                                                                                 request->objectName.getClassName(),
3385                                                                                 request->objectName.getKeyBindings());
3386                                  CIMObjectPath *resultPath = new CIMObjectPath (System::getHostName(),
3387                                                                                 request->nameSpace,
3388                                                                                 request->resultClass.getString());
3389 schuur          1.1      
3390                                  // resolve provider name
3391 kumpf           1.2              ProviderName name = _resolveProviderName(
3392                                      request->operationContext.get(ProviderIdContainer::NAME));
3393 schuur          1.1      
3394                                  // get cached or load new provider module
3395                                  JMPIProvider::OpProviderHolder ph =
3396                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
3397                          
3398                                  // convert arguments
3399                                  OperationContext context;
3400                          
3401 schuur          1.11             context.insert(request->operationContext.get(IdentityContainer::NAME));
3402                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3403                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3404 schuur          1.1      
3405 mark.hamzy      1.24             JMPIProvider &pr = ph.GetProvider();
3406 schuur          1.1      
3407 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.referenceNames: " + pr.getName());
3408 schuur          1.1      
3409 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
3410 schuur          1.12     
3411 mark.hamzy      1.24             JvmVector *jv = 0;
3412                          
3413                                  env = JMPIjvm::attachThread(&jv);
3414 schuur          1.1      
3415 mark.hamzy      1.37             if (!env)
3416                                  {
3417                                      PEG_METHOD_EXIT();
3418                          
3419                                      STAT_COPYDISPATCHER
3420                          
3421                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3422                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3423                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3424                                  }
3425                          
3426 schuur          1.1              JMPIProvider::pm_service_op_lock op_lock(&pr);
3427                          
3428                                  STAT_GETSTARTTIME;
3429                          
3430 mark.hamzy      1.24             jmethodID id = NULL;
3431                          
3432                                  // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
3433 mark.hamzy      1.25             //                                                  org.pegasus.jmpi.CIMObjectPath pathName,
3434 mark.hamzy      1.24             //                                                  java.lang.String               role)
3435 mark.hamzy      1.25             //        throws org.pegasus.jmpi.CIMException
3436 mark.hamzy      1.24             id = env->GetMethodID((jclass)pr.jProviderClass,
3437                                                        "referenceNames",
3438 mark.hamzy      1.25                                   "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
3439                          //@BUG was:                   "(Lorg/pegasus/jmpi/CIMObjectPath;                                Ljava/lang/String;)Ljava/util/Vector;"
3440 mark.hamzy      1.24     
3441                                  if (id != NULL)
3442                                  {
3443 mark.hamzy      1.25                 eMethodFound = METHOD_SNIA_PROVIDER20;
3444                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3445 mark.hamzy      1.24             }
3446                          
3447                                  if (id == NULL)
3448                                  {
3449                                      env->ExceptionClear();
3450                          
3451                                      // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
3452                                      //                                                  java.lang.String               role)
3453 mark.hamzy      1.25                 //        throws org.pegasus.jmpi.CIMException
3454 mark.hamzy      1.24                 id = env->GetMethodID((jclass)pr.jProviderClass,
3455                                                            "referenceNames",
3456 mark.hamzy      1.25                                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
3457                          //@BUG was:                       "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;"
3458 mark.hamzy      1.24     
3459                                      if (id != NULL)
3460                                      {
3461 mark.hamzy      1.25                     eMethodFound = METHOD_PEGASUS_24;
3462                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
3463 mark.hamzy      1.24                 }
3464                                  }
3465 schuur          1.11     
3466 mark.hamzy      1.24             if (id == NULL)
3467                                  {
3468 mark.hamzy      1.25                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: found no method!"<<PEGASUS_STD(endl));
3469 mark.hamzy      1.23             }
3470 mark.hamzy      1.24     
3471 schuur          1.1              JMPIjvm::checkException(env);
3472                          
3473 mark.hamzy      1.24             switch (eMethodFound)
3474                                  {
3475 mark.hamzy      1.25             case METHOD_PEGASUS_24:
3476 mark.hamzy      1.24             {
3477 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
3478 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3479                          
3480                                      JMPIjvm::checkException(env);
3481                          
3482                                      jstring jRole = env->NewStringUTF(request->role.getCString());
3483                          
3484                                      JMPIjvm::checkException(env);
3485                          
3486 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
3487                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3488                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3489                          #endif
3490                          
3491 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3492                                                                                            id,
3493                                                                                            jAssociationName,
3494                                                                                            jRole);
3495 mark.hamzy      1.25     
3496 mark.hamzy      1.23                 JMPIjvm::checkException(env);
3497                          
3498                                      STAT_PMS_PROVIDEREND;
3499                          
3500                                      handler.processing();
3501                                      if (jVec) {
3502 mark.hamzy      1.24                     for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
3503 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3504                          
3505 mark.hamzy      1.29                         jobject jcopRet = env->GetObjectArrayElement(jVec,i);
3506 mark.hamzy      1.24     
3507 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3508                          
3509 mark.hamzy      1.29                         jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
3510 mark.hamzy      1.23     
3511                                              JMPIjvm::checkException(env);
3512                          
3513 mark.hamzy      1.29                         CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
3514 mark.hamzy      1.24     
3515 mark.hamzy      1.29                         handler.deliver(*copRet);
3516 mark.hamzy      1.23                     }
3517                                      }
3518                                      handler.complete();
3519 mark.hamzy      1.24                 break;
3520 mark.hamzy      1.23             }
3521 mark.hamzy      1.24     
3522                                  case METHOD_SNIA_PROVIDER20:
3523                                  {
3524 mark.hamzy      1.29                 jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, resultPath);
3525 mark.hamzy      1.25                 jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
3526                          
3527                                      JMPIjvm::checkException(env);
3528                          
3529 mark.hamzy      1.29                 jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3530 mark.hamzy      1.24                 jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
3531                          
3532                                      JMPIjvm::checkException(env);
3533                          
3534 mark.hamzy      1.25                 jstring jRole = env->NewStringUTF(request->role.getCString());
3535                          
3536                                      JMPIjvm::checkException(env);
3537                          
3538 mark.hamzy      1.29     #ifdef PEGASUS_DEBUG
3539                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: assocName          = "<<objectPath->toString ()<<PEGASUS_STD(endl));
3540                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: pathName           = "<<resultPath->toString ()<<PEGASUS_STD(endl));
3541                                      DDD(PEGASUS_STD(cerr)<<"--- JMPIProviderManager::handleReferenceNamesRequest: role               = "<<request->role<<PEGASUS_STD(endl));
3542                          #endif
3543                          
3544 mark.hamzy      1.24                 jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
3545                                                                                            id,
3546                                                                                            jAssociationName,
3547                                                                                            jPathName,
3548                                                                                            jRole);
3549 mark.hamzy      1.25     
3550 mark.hamzy      1.23                 JMPIjvm::checkException(env);
3551                          
3552                                      STAT_PMS_PROVIDEREND;
3553 schuur          1.13     
3554 mark.hamzy      1.23                 handler.processing();
3555 mark.hamzy      1.24                 if (jVec) {
3556 mark.hamzy      1.29                     for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
3557 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3558 schuur          1.13     
3559 mark.hamzy      1.29                         jobject jcopRet = env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
3560 mark.hamzy      1.24     
3561 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3562 schuur          1.13     
3563 mark.hamzy      1.29                         jint jcopRetRef = env->CallIntMethod(jcopRet,JMPIjvm::jv.CIMObjectPathCInst);
3564 schuur          1.1      
3565 mark.hamzy      1.23                         JMPIjvm::checkException(env);
3566 schuur          1.1      
3567 mark.hamzy      1.29                         CIMObjectPath *copRet = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jcopRetRef);
3568 mark.hamzy      1.24     
3569 mark.hamzy      1.29                         handler.deliver(*copRet);
3570 mark.hamzy      1.23                     }
3571                                      }
3572                                      handler.complete();
3573 mark.hamzy      1.24                 break;
3574                                  }
3575                          
3576                                  case METHOD_UNKNOWN:
3577                                  {
3578 mark.hamzy      1.25                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: should not be here!"<<PEGASUS_STD(endl));
3579 mark.hamzy      1.24                 break;
3580                                  }
3581 mark.hamzy      1.23             }
3582 schuur          1.1          }
3583                              HandlerCatch(handler);
3584 schuur          1.11     
3585                              if (env) JMPIjvm::detachThread();
3586                          
3587 schuur          1.1          PEG_METHOD_EXIT();
3588                          
3589 w.white         1.31         STAT_COPYDISPATCHER
3590                          
3591 schuur          1.1          return(response);
3592                          }
3593                          
3594 mark.hamzy      1.26     Message * JMPIProviderManager::handleGetPropertyRequest(const Message * message) throw()
3595                          {
3596                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetPropertyRequest");
3597                          
3598                              HandlerIntro(GetProperty,message,request,response,handler,CIMValue());
3599                          
3600                              typedef enum {
3601                                 METHOD_UNKNOWN = 0,
3602                                 METHOD_SNIA_PROVIDER20,
3603                              } METHOD_VERSION;
3604                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3605                              JNIEnv          *env           = NULL;
3606                          
3607                              try {
3608                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3609                                      "JMPIProviderManager::handleGetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
3610                                      System::getHostName(),
3611                                      request->nameSpace.getString(),
3612                                      request->instanceName.getClassName().getString());
3613                          
3614                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
3615 mark.hamzy      1.26     
3616                                  // make target object path
3617 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3618                                                                                 request->nameSpace,
3619                                                                                 request->instanceName.getClassName(),
3620                                                                                 request->instanceName.getKeyBindings());
3621 mark.hamzy      1.26     
3622                                  // resolve provider name
3623                                  ProviderName name = _resolveProviderName(
3624                                      request->operationContext.get(ProviderIdContainer::NAME));
3625                          
3626                                  // get cached or load new provider module
3627                                  JMPIProvider::OpProviderHolder ph =
3628                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
3629                          
3630                                  // convert arguments
3631                                  OperationContext context;
3632                          
3633                                  context.insert(request->operationContext.get(IdentityContainer::NAME));
3634                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3635                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3636                          
3637                                  // forward request
3638                                  JMPIProvider &pr = ph.GetProvider();
3639                          
3640                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.getPropertyValue: " + pr.getName());
3641                          
3642 mark.hamzy      1.26             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: Calling provider getPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
3643                          
3644                                  JvmVector *jv = 0;
3645                          
3646                                  env = JMPIjvm::attachThread(&jv);
3647                          
3648 mark.hamzy      1.37             if (!env)
3649                                  {
3650                                      PEG_METHOD_EXIT();
3651                          
3652                                      STAT_COPYDISPATCHER
3653                          
3654                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3655                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3656                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3657                                  }
3658                          
3659 mark.hamzy      1.26             JMPIProvider::pm_service_op_lock op_lock(&pr);
3660                          
3661                                  STAT_GETSTARTTIME;
3662                          
3663                                  jmethodID id = NULL;
3664                          
3665                                  // public abstract org.pegasus.jmpi.CIMValue getPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
3666                                  //                                                             java.lang.String               oclass,
3667                                  //                                                             java.lang.String               pName)
3668                                  //        throws org.pegasus.jmpi.CIMException
3669                                  //
3670                                  id = env->GetMethodID((jclass)pr.jProviderClass,
3671                                                        "getPropertyValue",
3672                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;)Lorg/pegasus/jmpi/CIMValue;");
3673                          
3674                                  if (id != NULL)
3675                                  {
3676                                      eMethodFound = METHOD_SNIA_PROVIDER20;
3677                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3678                                  }
3679                          
3680 mark.hamzy      1.26             if (id == NULL)
3681                                  {
3682                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
3683                                  }
3684                          
3685                                  JMPIjvm::checkException(env);
3686                          
3687                                  switch (eMethodFound)
3688                                  {
3689                                  case METHOD_SNIA_PROVIDER20:
3690                                  {
3691 mark.hamzy      1.27                 jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3692 mark.hamzy      1.26                 jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3693                          
3694                                      JMPIjvm::checkException(env);
3695                          
3696                                      jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
3697                          
3698                                      JMPIjvm::checkException(env);
3699                          
3700                                      jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
3701                          
3702                                      JMPIjvm::checkException(env);
3703                          
3704                                      STAT_GETSTARTTIME;
3705                          
3706 mark.hamzy      1.29                 jobject jvalRet = env->CallObjectMethod ((jobject)pr.jProvider,
3707                                                                               id,
3708                                                                               jcop,
3709                                                                               joclass,
3710                                                                               jpName);
3711 mark.hamzy      1.26     
3712                                      JMPIjvm::checkException(env);
3713                          
3714                                      STAT_PMS_PROVIDEREND;
3715                          
3716                                      handler.processing();
3717                          
3718 mark.hamzy      1.29                 if (jvalRet)
3719 mark.hamzy      1.26                 {
3720 mark.hamzy      1.29                    jint      jvalRetRef = env->CallIntMethod(jvalRet,JMPIjvm::jv.CIMValueCInst);
3721                                         CIMValue *valRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jvalRetRef);
3722 mark.hamzy      1.26     
3723                                         JMPIjvm::checkException(env);
3724                          
3725 mark.hamzy      1.29                    handler.deliver(*valRet);
3726 mark.hamzy      1.26                 }
3727                                      handler.complete();
3728                                      break;
3729                                  }
3730                          
3731                                  case METHOD_UNKNOWN:
3732                                  {
3733                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
3734                                      break;
3735                                  }
3736                                  }
3737                              }
3738                              HandlerCatch(handler);
3739                          
3740                              if (env) JMPIjvm::detachThread();
3741                          
3742                              PEG_METHOD_EXIT();
3743                          
3744 w.white         1.31         STAT_COPYDISPATCHER
3745                          
3746 mark.hamzy      1.26         return(response);
3747                          }
3748                          
3749                          Message * JMPIProviderManager::handleSetPropertyRequest(const Message * message) throw()
3750                          {
3751                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleSetPropertyRequest");
3752                          
3753                              HandlerIntroVoid(SetProperty,message,request,response,handler);
3754                          
3755                              typedef enum {
3756                                 METHOD_UNKNOWN = 0,
3757                                 METHOD_SNIA_PROVIDER20,
3758                              } METHOD_VERSION;
3759                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3760                              JNIEnv          *env           = NULL;
3761                          
3762                              try {
3763                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3764                                      "JMPIProviderManager::handleSetPropertyRequest - Host name: $0  Name space: $1  Class name: $2",
3765                                      System::getHostName(),
3766                                      request->nameSpace.getString(),
3767 mark.hamzy      1.26                 request->instanceName.getClassName().getString());
3768                          
3769                                  DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
3770                          
3771                                  // make target object path
3772 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3773                                                                                 request->nameSpace,
3774                                                                                 request->instanceName.getClassName(),
3775                                                                                 request->instanceName.getKeyBindings());
3776 mark.hamzy      1.26     
3777                                  // resolve provider name
3778                                  ProviderName name = _resolveProviderName(
3779                                      request->operationContext.get(ProviderIdContainer::NAME));
3780                          
3781                                  // get cached or load new provider module
3782                                  JMPIProvider::OpProviderHolder ph =
3783                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
3784                          
3785                                  // convert arguments
3786                                  OperationContext context;
3787                          
3788                                  context.insert(request->operationContext.get(IdentityContainer::NAME));
3789                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3790                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3791                          
3792                                  // forward request
3793                                  JMPIProvider &pr = ph.GetProvider();
3794                          
3795                                  PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.setPropertyValue: " + pr.getName());
3796                          
3797 mark.hamzy      1.26             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: Calling provider setPropertyValue: "<<pr.getName()<<PEGASUS_STD(endl));
3798                          
3799                                  JvmVector *jv = 0;
3800                          
3801                                  env = JMPIjvm::attachThread(&jv);
3802                          
3803 mark.hamzy      1.37             if (!env)
3804                                  {
3805                                      PEG_METHOD_EXIT();
3806                          
3807                                      STAT_COPYDISPATCHER
3808                          
3809                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3810                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3811                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3812                                  }
3813                          
3814 mark.hamzy      1.26             JMPIProvider::pm_service_op_lock op_lock(&pr);
3815                          
3816                                  STAT_GETSTARTTIME;
3817                          
3818                                  jmethodID id = NULL;
3819                          
3820                                  // public abstract void setPropertyValue (org.pegasus.jmpi.CIMObjectPath cop,
3821                                  //                                        java.lang.String               oclass,
3822                                  //                                        java.lang.String               pName,
3823                                  //                                        org.pegasus.jmpi.CIMValue      val)
3824                                  //        throws org.pegasus.jmpi.CIMException
3825                                  //
3826                                  id = env->GetMethodID((jclass)pr.jProviderClass,
3827                                                        "setPropertyValue",
3828                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Lorg/pegasus/jmpi/CIMValue;)V");
3829                          
3830                                  if (id != NULL)
3831                                  {
3832                                      eMethodFound = METHOD_SNIA_PROVIDER20;
3833                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3834                                  }
3835 mark.hamzy      1.26     
3836                                  if (id == NULL)
3837                                  {
3838                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: found no method!"<<PEGASUS_STD(endl));
3839                                  }
3840                          
3841                                  JMPIjvm::checkException(env);
3842                          
3843                                  switch (eMethodFound)
3844                                  {
3845                                  case METHOD_SNIA_PROVIDER20:
3846                                  {
3847 mark.hamzy      1.27                 jint    jcopref = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
3848 mark.hamzy      1.26                 jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef, jv->CIMObjectPathNewI, jcopref);
3849                          
3850                                      JMPIjvm::checkException(env);
3851                          
3852                                      jstring joclass = env->NewStringUTF(request->instanceName.getClassName().getString().getCString());
3853                          
3854                                      JMPIjvm::checkException(env);
3855                          
3856                                      jstring jpName = env->NewStringUTF(request->propertyName.getString().getCString());
3857                          
3858                                      JMPIjvm::checkException(env);
3859                          
3860 mark.hamzy      1.27                 CIMValue *val = new CIMValue (request->newValue);
3861 mark.hamzy      1.26     
3862                                      JMPIjvm::checkException(env);
3863                          
3864 mark.hamzy      1.27                 jint    jvalref = DEBUG_ConvertCToJava (CIMValue*, jint, val);
3865 mark.hamzy      1.26                 jobject jval    = env->NewObject(jv->CIMValueClassRef, jv->CIMValueNewI, jvalref);
3866                          
3867                                      JMPIjvm::checkException(env);
3868                          
3869                                      STAT_GETSTARTTIME;
3870                          
3871                                      env->CallVoidMethod ((jobject)pr.jProvider,
3872                                                           id,
3873                                                           jcop,
3874                                                           joclass,
3875                                                           jpName,
3876                                                           jval);
3877                          
3878                                      JMPIjvm::checkException(env);
3879                          
3880                                      STAT_PMS_PROVIDEREND;
3881                                      break;
3882                                  }
3883                          
3884                                  case METHOD_UNKNOWN:
3885                                  {
3886 mark.hamzy      1.26                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleSetPropertyRequest: should not be here!"<<PEGASUS_STD(endl));
3887                                      break;
3888                                  }
3889                                  }
3890                              }
3891                              HandlerCatch(handler);
3892                          
3893                              if (env) JMPIjvm::detachThread();
3894                          
3895                              PEG_METHOD_EXIT();
3896                          
3897 w.white         1.31         STAT_COPYDISPATCHER
3898                          
3899 mark.hamzy      1.26         return(response);
3900                          }
3901                          
3902 schuur          1.1      Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
3903                          {
3904 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
3905                          
3906                              HandlerIntroMethod(InvokeMethod,message,request,response,handler);
3907 schuur          1.1      
3908 mark.hamzy      1.25         typedef enum {
3909                                 METHOD_UNKNOWN = 0,
3910                                 METHOD_PEGASUS_24,
3911                                 METHOD_SNIA_PROVIDER20,
3912                              } METHOD_VERSION;
3913                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
3914                              JNIEnv          *env           = NULL;
3915 schuur          1.13     
3916 schuur          1.1          try {
3917                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
3918                                      "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0  Name space: $1  Class name: $2",
3919                                      System::getHostName(),
3920                                      request->nameSpace.getString(),
3921                                      request->instanceName.getClassName().getString());
3922                          
3923 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));
3924                          
3925 schuur          1.1              // make target object path
3926 mark.hamzy      1.27             CIMObjectPath *objectPath = new CIMObjectPath (System::getHostName(),
3927                                                                                 request->nameSpace,
3928                                                                                 request->instanceName.getClassName(),
3929                                                                                 request->instanceName.getKeyBindings());
3930 schuur          1.1      
3931                                  // resolve provider name
3932 kumpf           1.2              ProviderName name = _resolveProviderName(
3933                                      request->operationContext.get(ProviderIdContainer::NAME));
3934 schuur          1.1      
3935                                  // get cached or load new provider module
3936                                  JMPIProvider::OpProviderHolder ph =
3937                                      providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
3938                          
3939                                  // convert arguments
3940                                  OperationContext context;
3941                          
3942 schuur          1.11             context.insert(request->operationContext.get(IdentityContainer::NAME));
3943                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
3944                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
3945 schuur          1.1      
3946 mark.hamzy      1.25             JMPIProvider &pr=ph.GetProvider();
3947 schuur          1.1      
3948 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.invokeMethod: " + pr.getName());
3949 schuur          1.1      
3950 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
3951 schuur          1.11     
3952 mark.hamzy      1.25             JvmVector *jv = 0;
3953 mark.hamzy      1.23     
3954 mark.hamzy      1.25             env = JMPIjvm::attachThread(&jv);
3955 schuur          1.11     
3956 mark.hamzy      1.37             if (!env)
3957                                  {
3958                                      PEG_METHOD_EXIT();
3959                          
3960                                      STAT_COPYDISPATCHER
3961                          
3962                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
3963                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
3964                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
3965                                  }
3966                          
3967 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
3968 schuur          1.11     
3969 schuur          1.1              STAT_GETSTARTTIME;
3970                          
3971 mark.hamzy      1.25             jmethodID id = NULL;
3972                          
3973                                  // public abstract org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath cop,
3974                                  //                                                         java.lang.String               name,
3975                                  //                                                         java.util.Vector               in,
3976                                  //                                                         java.util.Vector               out)
3977                                  //        throws org.pegasus.jmpi.CIMException
3978                                  id = env->GetMethodID((jclass)pr.jProviderClass,
3979                                                        "invokeMethod",
3980                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
3981                          
3982                                  if (id != NULL)
3983                                  {
3984                                      eMethodFound = METHOD_SNIA_PROVIDER20;
3985                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
3986                                  }
3987                          
3988                                  if (id == NULL)
3989                                  {
3990                                      env->ExceptionClear();
3991                          
3992 mark.hamzy      1.25                 // public org.pegasus.jmpi.CIMValue invokeMethod (org.pegasus.jmpi.CIMObjectPath op,
3993                                      //                                                java.lang.String               methodName,
3994                                      //                                                org.pegasus.jmpi.CIMArgument[] inArgs,
3995                                      //                                                org.pegasus.jmpi.CIMArgument[] outArgs)
3996                                      //        throws org.pegasus.jmpi.CIMException
3997                                      id = env->GetMethodID((jclass)pr.jProviderClass,
3998                                                            "invokeMethod",
3999                                                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
4000                          
4001                                      if (id != NULL)
4002                                      {
4003                                          eMethodFound = METHOD_PEGASUS_24;
4004                                          DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: found METHOD_PEGASUS_24."<<PEGASUS_STD(endl));
4005                                      }
4006 mark.hamzy      1.23             }
4007 mark.hamzy      1.25     
4008 schuur          1.11             JMPIjvm::checkException(env);
4009                          
4010 mark.hamzy      1.25             switch (eMethodFound)
4011                                  {
4012                                  case METHOD_PEGASUS_24:
4013                                  {
4014 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4015                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
4016 mark.hamzy      1.25     
4017                                      JMPIjvm::checkException(env);
4018                          
4019 mark.hamzy      1.29                 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
4020                          
4021 mark.hamzy      1.23                 JMPIjvm::checkException(env);
4022                          
4023 mark.hamzy      1.25                 Uint32 m=request->inParameters.size();
4024                          
4025                                      jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
4026 mark.hamzy      1.29     
4027 mark.hamzy      1.25                 for (Uint32 i=0; i<m; i++) {
4028 mark.hamzy      1.29                   CIMParamValue *parm    = new CIMParamValue(request->inParameters[i]);
4029                                        jint           jArgRef = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
4030                                        jobject        jArg    = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jArgRef);
4031 mark.hamzy      1.23     
4032 mark.hamzy      1.25                   env->SetObjectArrayElement(jArIn,i,jArg);
4033                                      }
4034 mark.hamzy      1.23     
4035 mark.hamzy      1.25                 jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
4036 mark.hamzy      1.23     
4037 mark.hamzy      1.29                 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
4038                                                                                id,
4039                                                                                jcop,
4040                                                                                jMethod,
4041                                                                                jArIn,
4042                                                                                jArOut);
4043 mark.hamzy      1.23                 JMPIjvm::checkException(env);
4044                          
4045                                      STAT_PMS_PROVIDEREND;
4046                          
4047                                      handler.processing();
4048                          
4049 mark.hamzy      1.29                 jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
4050                                      CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
4051 mark.hamzy      1.23     
4052 mark.hamzy      1.29                 handler.deliver(*valueRet);
4053 schuur          1.13     
4054 mark.hamzy      1.25                 for (int i=0; i<24; i++) {
4055 mark.hamzy      1.29                     jobject jArg = env->GetObjectArrayElement(jArOut,i);
4056                          
4057 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4058 schuur          1.13     
4059 mark.hamzy      1.29                     if (jArg==NULL)
4060                                             break;
4061 schuur          1.13     
4062 mark.hamzy      1.29                     jint           jpRef = env->CallIntMethod(jArg,JMPIjvm::jv.CIMArgumentCInst);
4063                                          CIMParamValue *p     = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jpRef);
4064 schuur          1.13     
4065 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4066 schuur          1.1      
4067 mark.hamzy      1.25                     handler.deliverParamValue(*p);
4068 mark.hamzy      1.23                 }
4069 schuur          1.1      
4070 mark.hamzy      1.23                 handler.complete();
4071 mark.hamzy      1.25                 break;
4072 mark.hamzy      1.23             }
4073 schuur          1.11     
4074 mark.hamzy      1.25             case METHOD_SNIA_PROVIDER20:
4075                                  {
4076 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, objectPath);
4077                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
4078 mark.hamzy      1.25     
4079                                      JMPIjvm::checkException(env);
4080                          
4081 mark.hamzy      1.29                 jstring jMethod = env->NewStringUTF(request->methodName.getString().getCString());
4082                          
4083 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4084                          
4085 mark.hamzy      1.29                 jobject jVecIn = env->NewObject(jv->VectorClassRef,jv->VectorNew);
4086                          
4087 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4088                          
4089 mark.hamzy      1.29                 for (int i=0,m=request->inParameters.size(); i<m; i++)
4090                                      {
4091                                          const CIMParamValue &parm  = request->inParameters[i];
4092                                          const CIMValue       v     = parm.getValue();
4093                                          CIMProperty         *p     = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
4094                                          jint                 jpRef = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
4095                                          jobject              jp    = env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jpRef);
4096 mark.hamzy      1.23     
4097 mark.hamzy      1.29                     env->CallVoidMethod(jVecIn,jv->VectorAddElement,jp);
4098 mark.hamzy      1.25                  }
4099 mark.hamzy      1.23     
4100 mark.hamzy      1.25                 jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
4101                                      JMPIjvm::checkException(env);
4102 mark.hamzy      1.23     
4103 mark.hamzy      1.29                 jobject jValueRet = env->CallObjectMethod((jobject)pr.jProvider,
4104                                                                                id,
4105                                                                                jcop,
4106                                                                                jMethod,
4107                                                                                jVecIn,
4108                                                                                jVecOut);
4109 mark.hamzy      1.23                 JMPIjvm::checkException(env);
4110                          
4111                                      STAT_PMS_PROVIDEREND;
4112                          
4113                                      handler.processing();
4114 schuur          1.1      
4115 mark.hamzy      1.29                 jint      jValueRetRef = env->CallIntMethod(jValueRet,JMPIjvm::jv.CIMValueCInst);
4116                                      CIMValue *valueRet     = DEBUG_ConvertJavaToC (jint, CIMValue*, jValueRetRef);
4117 mark.hamzy      1.23     
4118 mark.hamzy      1.29                 handler.deliver(*valueRet);
4119 mark.hamzy      1.23     
4120 mark.hamzy      1.29                 for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++)
4121                                      {
4122 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4123 schuur          1.13     
4124 mark.hamzy      1.29                     jobject jProp = env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
4125                          
4126 mark.hamzy      1.25                     JMPIjvm::checkException(env);
4127 schuur          1.13     
4128 mark.hamzy      1.29                     jint         jpRef = env->CallIntMethod(jProp,JMPIjvm::jv.CIMPropertyCInst);
4129                                          CIMProperty *p     = DEBUG_ConvertJavaToC (jint, CIMProperty*, jpRef);
4130 schuur          1.13     
4131 mark.hamzy      1.23                     JMPIjvm::checkException(env);
4132 schuur          1.13     
4133 mark.hamzy      1.25                     handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
4134                                      }
4135                          
4136                                      handler.complete();
4137                                      break;
4138                                  }
4139 mark.hamzy      1.23     
4140 mark.hamzy      1.25             case METHOD_UNKNOWN:
4141                                  {
4142                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: should not be here!"<<PEGASUS_STD(endl));
4143                                      break;
4144                                  }
4145 mark.hamzy      1.23             }
4146 schuur          1.1          }
4147                              HandlerCatch(handler);
4148 schuur          1.11     
4149                              if (env) JMPIjvm::detachThread();
4150                          
4151 schuur          1.1          PEG_METHOD_EXIT();
4152                          
4153 w.white         1.31         STAT_COPYDISPATCHER
4154                          
4155 schuur          1.11         return(response);
4156 schuur          1.1      }
4157 mark.hamzy      1.23     
4158 schuur          1.1      int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
4159                                                            String& providerName, String& location)
4160                          {
4161                              Uint32 pos = pInstance.findProperty(CIMName ("Name"));
4162                              pInstance.getProperty(pos).getValue().get(providerName);
4163                          
4164                              pos = pmInstance.findProperty(CIMName ("Location"));
4165                              pmInstance.getProperty(pos).getValue().get(location);
4166                              return 0;
4167                          }
4168                          
4169                          Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
4170                          {
4171 konrad.r        1.15         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
4172 schuur          1.1      
4173 mark.hamzy      1.23         HandlerIntroInd(CreateSubscription,message,request,response,handler);
4174                          
4175 mark.hamzy      1.25         typedef enum {
4176                                 METHOD_UNKNOWN = 0,
4177                                 METHOD_SNIA_PROVIDER20,
4178                              } METHOD_VERSION;
4179                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4180                              JNIEnv          *env           = NULL;
4181                          
4182 schuur          1.1          try {
4183 mark.hamzy      1.25             String               providerName,
4184                                                       providerLocation;
4185                                  CIMInstance          req_provider,
4186                                                       req_providerModule;
4187                          
4188                                  ProviderIdContainer  pidc                = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
4189 schuur          1.1      
4190 mark.hamzy      1.25             req_provider       = pidc.getProvider();
4191 schuur          1.12             req_providerModule = pidc.getModule();
4192 mark.hamzy      1.25     
4193 schuur          1.12             LocateIndicationProviderNames(req_provider, req_providerModule,providerName,providerLocation);
4194 schuur          1.1      
4195                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4196                                      "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
4197                                      System::getHostName(),
4198                                      request->nameSpace.getString(),
4199                                      providerName);
4200                          
4201 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
4202                          
4203 schuur          1.1              String fileName = resolveFileName(providerLocation);
4204                          
4205                                  // get cached or load new provider module
4206                                  JMPIProvider::OpProviderHolder ph =
4207                                      providerManager.getProvider(fileName, providerName, String::EMPTY);
4208                          
4209 mark.hamzy      1.25             indProvRecord *prec = NULL;
4210                          
4211 schuur          1.12             provTab.lookup(providerName,prec);
4212 mark.hamzy      1.25     
4213 mark.hamzy      1.23             if (prec)
4214 mark.hamzy      1.25             {
4215 mark.hamzy      1.23                 prec->count++;
4216 mark.hamzy      1.25             }
4217                                  else
4218                                  {
4219                                      prec=new indProvRecord();
4220                                      provTab.insert(providerName,prec);
4221 schuur          1.12             }
4222 schuur          1.1      
4223 carolann.graves 1.21             //
4224                                  //  Save the provider instance from the request
4225                                  //
4226                                  ph.GetProvider ().setProviderInstance (req_provider);
4227                          
4228 mark.hamzy      1.25             indSelectRecord     *srec  = new indSelectRecord();
4229                                  const CIMObjectPath &sPath = request->subscriptionInstance.getPath();
4230                          
4231 schuur          1.12             selxTab.insert(sPath.toString(),srec);
4232 schuur          1.1      
4233                                  // convert arguments
4234                                  OperationContext *context=new OperationContext();
4235                          
4236 mark.hamzy      1.25             if (prec->ctx==NULL)
4237                                  {
4238                                      prec->ctx=context;
4239 mark.hamzy      1.23             }
4240 schuur          1.12     
4241                                  context->insert(request->operationContext.get(IdentityContainer::NAME));
4242                                  context->insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
4243                                  context->insert(request->operationContext.get(ContentLanguageListContainer::NAME));
4244                                  context->insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
4245                                  context->insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
4246 schuur          1.1      
4247                                  CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
4248                          
4249 schuur          1.12             SubscriptionFilterConditionContainer sub_cntr =  request->operationContext.get
4250                                          (SubscriptionFilterConditionContainer::NAME);
4251                          
4252 mark.hamzy      1.25             JMPIProvider &pr = ph.GetProvider();
4253 konrad.r        1.22     
4254 mark.hamzy      1.25             CIMOMHandleQueryContext *qcontext=new CIMOMHandleQueryContext(CIMNamespaceName(request->nameSpace.getString()),
4255                                                                                                *pr._cimom_handle);
4256 konrad.r        1.22     
4257 mark.hamzy      1.25             CMPI_SelectExp *eSelx = new CMPI_SelectExp(*context,
4258                                                                             qcontext,
4259                                                                             request->query,
4260                                                                             sub_cntr.getQueryLanguage());
4261 konrad.r        1.22     
4262 schuur          1.12             srec->eSelx=eSelx;
4263 mark.hamzy      1.25             srec->qContext=qcontext;
4264 schuur          1.1      
4265 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.createSubscriptionRequest: " + pr.getName());
4266 schuur          1.1      
4267 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
4268 schuur          1.1      
4269                                  for(Uint32 i = 0, n = request->classNames.size(); i < n; i++) {
4270                                      CIMObjectPath className(
4271                                          System::getHostName(),
4272                                          request->nameSpace,
4273                                          request->classNames[i]);
4274                                      eSelx->classNames.append(className);
4275                                  }
4276                          
4277                                  CIMPropertyList propertyList = request->propertyList;
4278 mark.hamzy      1.29     
4279                                  if (!propertyList.isNull())
4280                                  {
4281                                     Array<CIMName> p      = propertyList.getPropertyNameArray();
4282                                     int            pCount = p.size();
4283                          
4284 schuur          1.1                 eSelx->props=(const char**)malloc((1+pCount)*sizeof(char*));
4285 mark.hamzy      1.29     
4286                                     for (int i=0; i<pCount; i++)
4287                                     {
4288 schuur          1.1                    eSelx->props[i]=strdup(p[i].getString().getCString());
4289 mark.hamzy      1.29                }
4290 schuur          1.1                 eSelx->props[pCount]=NULL;
4291                                  }
4292                          
4293 mark.hamzy      1.25             JvmVector *jv = 0;
4294                          
4295                                  env = JMPIjvm::attachThread(&jv);
4296                          
4297 mark.hamzy      1.37             if (!env)
4298                                  {
4299                                      PEG_METHOD_EXIT();
4300                          
4301                                      STAT_COPYDISPATCHER
4302                          
4303                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4304                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4305                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4306                                  }
4307                          
4308 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
4309                          
4310                                  STAT_GETSTARTTIME;
4311                          
4312                                  jmethodID id = NULL;
4313                          
4314 mark.hamzy      1.36             // public void activateFilter (org.pegasus.jmpi.SelectExp     filter,
4315                                  //                             java.lang.String               eventType,
4316                                  //                             org.pegasus.jmpi.CIMObjectPath classPath,
4317                                  //                             java.lang.String               owner)
4318 mark.hamzy      1.25             //        throws org.pegasus.jmpi.CIMException
4319                                  id = env->GetMethodID((jclass)pr.jProviderClass,
4320                                                        "activateFilter",
4321                                                        "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
4322 schuur          1.12     
4323 mark.hamzy      1.25             if (id != NULL)
4324                                  {
4325                                      eMethodFound = METHOD_SNIA_PROVIDER20;
4326                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
4327                                  }
4328 mark.hamzy      1.23     
4329                                  JMPIjvm::checkException(env);
4330                          
4331 mark.hamzy      1.25             switch (eMethodFound)
4332                                  {
4333                                  case METHOD_SNIA_PROVIDER20:
4334                                  {
4335 mark.hamzy      1.29                 jint    jSelRef = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
4336                                      jobject jSel    = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jSelRef);
4337 mark.hamzy      1.25     
4338                                      JMPIjvm::checkException(env);
4339                          
4340 mark.hamzy      1.29                 jint    jcopRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
4341                                      jobject jcop    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jcopRef);
4342 schuur          1.12     
4343 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4344 schuur          1.1      
4345 mark.hamzy      1.25                 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
4346 schuur          1.1      
4347 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4348 schuur          1.1      
4349 mark.hamzy      1.25                 env->CallVoidMethod((jobject)pr.jProvider,
4350                                                          id,
4351                                                          jSel,
4352                                                          jType,
4353 mark.hamzy      1.29                                     jcop,
4354 mark.hamzy      1.25                                     (jboolean)0);
4355 schuur          1.12     
4356 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4357 schuur          1.1      
4358 carolann.graves 1.21                 //
4359 mark.hamzy      1.25                 //  Increment count of current subscriptions for this provider
4360 carolann.graves 1.21                 //
4361 mark.hamzy      1.25                 if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ())
4362 carolann.graves 1.21                 {
4363 mark.hamzy      1.25                     //
4364                                          //  If there were no current subscriptions before the increment,
4365                                          //  the first subscription has been created
4366                                          //  Call the provider's enableIndications method
4367                                          //
4368                                          if (_subscriptionInitComplete)
4369                                          {
4370                                              prec->enabled = true;
4371                                              CIMRequestMessage * request = 0;
4372                                              CIMResponseMessage * response = 0;
4373 kumpf           1.41.2.1                     prec->handler = new EnableIndicationsResponseHandler(
4374                                                  request,
4375                                                  response,
4376                                                  req_provider,
4377                                                  _indicationCallback,
4378                                                  _responseChunkCallback);
4379 mark.hamzy      1.25                     }
4380 carolann.graves 1.21                 }
4381 mark.hamzy      1.25     
4382                                      STAT_PMS_PROVIDEREND;
4383                                      break;
4384 carolann.graves 1.21             }
4385                          
4386 mark.hamzy      1.25             case METHOD_UNKNOWN:
4387                                  {
4388                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
4389                                      break;
4390                                  }
4391                                  }
4392 schuur          1.1      
4393                              }
4394                              HandlerCatch(handler);
4395 schuur          1.12     
4396 mark.hamzy      1.23         if (env) JMPIjvm::detachThread();
4397                          
4398 schuur          1.1          PEG_METHOD_EXIT();
4399                          
4400                              return(response);
4401                          }
4402                          
4403                          Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
4404                          {
4405                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
4406                          
4407 mark.hamzy      1.23         HandlerIntroInd(DeleteSubscription,message,request,response,handler);
4408                          
4409 mark.hamzy      1.25         typedef enum {
4410                                 METHOD_UNKNOWN = 0,
4411                                 METHOD_SNIA_PROVIDER20,
4412                              } METHOD_VERSION;
4413                              METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
4414                              JNIEnv          *env           = NULL;
4415                          
4416 schuur          1.1          try {
4417 mark.hamzy      1.25             String              providerName,
4418                                                      providerLocation;
4419                                  CIMInstance         req_provider,
4420                                                      req_providerModule;
4421                                  ProviderIdContainer pidc               = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
4422                          
4423                                  req_provider       = pidc.getProvider();
4424 schuur          1.12             req_providerModule = pidc.getModule();
4425 se.gupta        1.9      
4426 mark.hamzy      1.25             LocateIndicationProviderNames(req_provider, req_providerModule, providerName,providerLocation);
4427 schuur          1.1      
4428                                  Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
4429                                      "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
4430                                      System::getHostName(),
4431                                      request->nameSpace.getString(),
4432                                      providerName);
4433                          
4434 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
4435                          
4436 schuur          1.1              String fileName = resolveFileName(providerLocation);
4437                          
4438                                  // get cached or load new provider module
4439                                  JMPIProvider::OpProviderHolder ph =
4440                                      providerManager.getProvider(fileName, providerName, String::EMPTY);
4441                          
4442 mark.hamzy      1.25             indProvRecord *prec = NULL;
4443                          
4444 schuur          1.12             provTab.lookup(providerName,prec);
4445 mark.hamzy      1.25             if (--prec->count <= 0)
4446                                  {
4447                                      provTab.remove(providerName);
4448                                      prec=NULL;
4449 schuur          1.12             }
4450 schuur          1.1      
4451 mark.hamzy      1.25             indSelectRecord     *srec        = NULL;
4452                                  const CIMObjectPath &sPath       = request->subscriptionInstance.getPath();
4453                                  String               sPathString = sPath.toString();
4454                          
4455 schuur          1.12             selxTab.lookup(sPathString,srec);
4456 schuur          1.1      
4457 mark.hamzy      1.25             CMPI_SelectExp          *eSelx    = srec->eSelx;
4458                                  CIMOMHandleQueryContext *qContext = srec->qContext;
4459 konrad.r        1.22     
4460 schuur          1.12             selxTab.remove(sPathString);
4461 schuur          1.1      
4462 schuur          1.12             // convert arguments
4463 schuur          1.1              OperationContext context;
4464                          
4465 schuur          1.12             context.insert(request->operationContext.get(IdentityContainer::NAME));
4466                                  context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
4467                                  context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
4468                                  context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
4469                          
4470 schuur          1.1              CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
4471                          
4472 schuur          1.12             JMPIProvider & pr=ph.GetProvider();
4473 schuur          1.1      
4474 mark.hamzy      1.25             PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, "Calling provider.deleteSubscriptionRequest: " + pr.getName());
4475 schuur          1.1      
4476 mark.hamzy      1.23             DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
4477 schuur          1.1      
4478 mark.hamzy      1.25             JvmVector *jv = 0;
4479                          
4480                                  env = JMPIjvm::attachThread(&jv);
4481                          
4482 mark.hamzy      1.37             if (!env)
4483                                  {
4484                                      PEG_METHOD_EXIT();
4485                          
4486                                      STAT_COPYDISPATCHER
4487                          
4488                                      throw PEGASUS_CIM_EXCEPTION_L (CIM_ERR_FAILED,
4489                                                                     MessageLoaderParms("ProviderManager.JMPI.INIT_JVM_FAILED",
4490                                                                                        "Could not initialize the JVM (Java Virtual Machine) runtime environment."));
4491                                  }
4492                          
4493 mark.hamzy      1.25             JMPIProvider::pm_service_op_lock op_lock(&pr);
4494                          
4495                                  STAT_GETSTARTTIME;
4496                          
4497                                  jmethodID id = NULL;
4498                          
4499                                  // public void deActivateFilter (org.pegasus.jmpi.SelectExp    filter,
4500                                  //                              java.lang.String               eventType,
4501                                  //                              org.pegasus.jmpi.CIMObjectPath classPath,
4502                                  //                              boolean                        lastActivation)
4503                                  //        throws org.pegasus.jmpi.CIMException
4504                                  id = env->GetMethodID((jclass)pr.jProviderClass,
4505                                                        "deActivateFilter",
4506                                                        "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
4507 schuur          1.12     
4508 mark.hamzy      1.25             if (id != NULL)
4509                                  {
4510                                      eMethodFound = METHOD_SNIA_PROVIDER20;
4511                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
4512                                  }
4513 mark.hamzy      1.23     
4514                                  JMPIjvm::checkException(env);
4515                          
4516 mark.hamzy      1.25             switch (eMethodFound)
4517                                  {
4518                                  case METHOD_SNIA_PROVIDER20:
4519                                  {
4520                                      jint    jObj = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
4521                                      jobject jSel = env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jObj);
4522                          
4523                                      JMPIjvm::checkException(env);
4524                          
4525                                      jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
4526 mark.hamzy      1.23     
4527 mark.hamzy      1.25                 jobject jRef = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
4528 schuur          1.12     
4529 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4530 schuur          1.12     
4531 mark.hamzy      1.25                 jstring jType = env->NewStringUTF(request->nameSpace.getString().getCString());
4532 schuur          1.1      
4533 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4534 schuur          1.1      
4535 mark.hamzy      1.25                 env->CallVoidMethod((jobject)pr.jProvider,
4536                                                          id,
4537                                                          jSel,
4538                                                          jType,
4539                                                          jRef,
4540                                                          (jboolean)(prec==NULL));
4541 schuur          1.1      
4542 mark.hamzy      1.25                 JMPIjvm::checkException(env);
4543 schuur          1.1      
4544 carolann.graves 1.21                 //
4545 mark.hamzy      1.25                 //  Decrement count of current subscriptions for this provider
4546 carolann.graves 1.21                 //
4547 mark.hamzy      1.25                 if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ())
4548 carolann.graves 1.21                 {
4549 mark.hamzy      1.25                     //
4550                                          //  If there are no current subscriptions after the decrement,
4551                                          //  the last subscription has been deleted
4552                                          //  Call the provider's disableIndications method
4553                                          //
4554                                          if (_subscriptionInitComplete)
4555                                          {
4556                                              prec->enabled = false;
4557                                              if (prec->handler) delete prec->handler;
4558                                              prec->handler = NULL;
4559                                          }
4560 carolann.graves 1.21                 }
4561                          
4562 mark.hamzy      1.25                 STAT_PMS_PROVIDEREND;
4563 schuur          1.1      
4564 mark.hamzy      1.25                 delete eSelx;
4565                                      delete qContext;
4566                                      delete srec;
4567                                      break;
4568                                  }
4569 schuur          1.12     
4570 mark.hamzy      1.25             case METHOD_UNKNOWN:
4571                                  {
4572                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: should not be here!"<<PEGASUS_STD(endl));
4573                                      break;
4574                                  }
4575                                  }
4576 schuur          1.1          }
4577                              HandlerCatch(handler);
4578 schuur          1.12     
4579 mark.hamzy      1.23         if (env) JMPIjvm::detachThread();
4580                          
4581 schuur          1.1          PEG_METHOD_EXIT();
4582                          
4583 w.white         1.31         STAT_COPYDISPATCHER
4584                          
4585 schuur          1.1          return(response);
4586                          }
4587                          
4588                          Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
4589                          {
4590                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
4591                          
4592                              CIMDisableModuleRequestMessage * request =
4593                                  dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
4594                          
4595                              PEGASUS_ASSERT(request != 0);
4596                          
4597                              // get provider module name
4598                              String moduleName;
4599                              CIMInstance mInstance = request->providerModule;
4600                              Uint32 pos = mInstance.findProperty(CIMName ("Name"));
4601                          
4602                              if(pos != PEG_NOT_FOUND)
4603                              {
4604                                  mInstance.getProperty(pos).getValue().get(moduleName);
4605                              }
4606 schuur          1.1      
4607                              Boolean disableProviderOnly = request->disableProviderOnly;
4608                          
4609                              Array<Uint16> operationalStatus;
4610 kumpf           1.2          // Assume success.
4611 kumpf           1.10         operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
4612 schuur          1.1      
4613 kumpf           1.2          //
4614 schuur          1.1          // Unload providers
4615 kumpf           1.2          //
4616 schuur          1.1          Array<CIMInstance> _pInstances = request->providers;
4617                          
4618                              CIMDisableModuleResponseMessage * response =
4619                                  new CIMDisableModuleResponseMessage(
4620                                  request->messageId,
4621                                  CIMException(),
4622                                  request->queueIds.copyAndPop(),
4623                                  operationalStatus);
4624                          
4625                              PEGASUS_ASSERT(response != 0);
4626                          
4627                              // preserve message key
4628                              response->setKey(request->getKey());
4629                          
4630                              //
4631                              //  Set HTTP method in response from request
4632                              //
4633                              response->setHttpMethod (request->getHttpMethod ());
4634                          
4635                              PEG_METHOD_EXIT();
4636                          
4637 schuur          1.1          return(response);
4638                          }
4639                          
4640                          Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
4641                          {
4642                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
4643                          
4644                              CIMEnableModuleRequestMessage * request =
4645                                  dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
4646                          
4647                              PEGASUS_ASSERT(request != 0);
4648                          
4649                              Array<Uint16> operationalStatus;
4650 kumpf           1.10         operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
4651 schuur          1.1      
4652                              CIMEnableModuleResponseMessage * response =
4653                                  new CIMEnableModuleResponseMessage(
4654                                  request->messageId,
4655                                  CIMException(),
4656                                  request->queueIds.copyAndPop(),
4657                                  operationalStatus);
4658                          
4659                              PEGASUS_ASSERT(response != 0);
4660                          
4661                              // preserve message key
4662                              response->setKey(request->getKey());
4663                          
4664                              //  Set HTTP method in response from request
4665                              response->setHttpMethod (request->getHttpMethod ());
4666                          
4667                              PEG_METHOD_EXIT();
4668                          
4669                              return(response);
4670                          }
4671                          
4672 schuur          1.1      Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
4673                          {
4674                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
4675                          
4676                              CIMStopAllProvidersRequestMessage * request =
4677                                  dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
4678                          
4679                              PEGASUS_ASSERT(request != 0);
4680                          
4681                              CIMStopAllProvidersResponseMessage * response =
4682                                  new CIMStopAllProvidersResponseMessage(
4683                                  request->messageId,
4684                                  CIMException(),
4685                                  request->queueIds.copyAndPop());
4686                          
4687                              PEGASUS_ASSERT(response != 0);
4688                          
4689                              // preserve message key
4690                              response->setKey(request->getKey());
4691                          
4692                              //  Set HTTP method in response from request
4693 schuur          1.1          response->setHttpMethod (request->getHttpMethod ());
4694                          
4695                              // tell the provider manager to shutdown all the providers
4696                              providerManager.shutdownAllProviders();
4697                          
4698                              PEG_METHOD_EXIT();
4699                          
4700                              return(response);
4701                          }
4702                          
4703 kumpf           1.4      Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
4704                          {
4705                              PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
4706                          
4707                              HandlerIntroInit(InitializeProvider,message,request,response,handler);
4708                          
4709                              try
4710                              {
4711                                  // resolve provider name
4712 mark.hamzy      1.23             ProviderName name = _resolveProviderName(
4713                                     request->operationContext.get(ProviderIdContainer::NAME));
4714 kumpf           1.4      
4715                                  // get cached or load new provider module
4716                                  JMPIProvider::OpProviderHolder ph =
4717 mark.hamzy      1.23                 providerManager.getProvider(name.getPhysicalName(),
4718                                         name.getLogicalName(), String::EMPTY);
4719 kumpf           1.4      
4720                              }
4721                              HandlerCatch(handler);
4722                          
4723                              PEG_METHOD_EXIT();
4724                          
4725                              return(response);
4726                          }
4727                          
4728 mark.hamzy      1.25     Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest (const Message * message)
4729 carolann.graves 1.21     {
4730                              PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
4731                               "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
4732                          
4733                              CIMSubscriptionInitCompleteRequestMessage * request =
4734                                  dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
4735                                      (const_cast <Message *> (message));
4736                          
4737                              PEGASUS_ASSERT (request != 0);
4738                          
4739                              CIMSubscriptionInitCompleteResponseMessage * response =
4740                                  dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
4741                                      (request->buildResponse ());
4742                          
4743                              PEGASUS_ASSERT (response != 0);
4744                          
4745                              //
4746                              //  Set indicator
4747                              //
4748                              _subscriptionInitComplete = true;
4749                          
4750 carolann.graves 1.21         //
4751                              //  For each provider that has at least one subscription, call
4752                              //  provider's enableIndications method
4753                              //
4754                              Array <JMPIProvider *> enableProviders;
4755                              enableProviders = providerManager.getIndicationProvidersToEnable ();
4756                          
4757                              Uint32 numProviders = enableProviders.size ();
4758                              for (Uint32 i = 0; i < numProviders; i++)
4759                              {
4760                                  try
4761                                  {
4762                                      CIMInstance provider;
4763                                      provider = enableProviders [i]->getProviderInstance ();
4764                          
4765                                      //
4766                                      //  Get cached or load new provider module
4767                                      //
4768                                      JMPIProvider::OpProviderHolder ph = providerManager.getProvider
4769                                          (enableProviders [i]->getModule ()->getFileName (),
4770                                           enableProviders [i]->getName ());
4771 carolann.graves 1.21     
4772                                      indProvRecord * prec = NULL;
4773                                      provTab.lookup (enableProviders [i]->getName (), prec);
4774                                      if (prec)
4775                                      {
4776                                          prec->enabled = true;
4777                                          CIMRequestMessage * request = 0;
4778                                          CIMResponseMessage * response = 0;
4779 kumpf           1.41.2.1                 prec->handler = new EnableIndicationsResponseHandler(
4780                                              request,
4781                                              response,
4782                                              provider,
4783                                              _indicationCallback,
4784                                              _responseChunkCallback);
4785 carolann.graves 1.21                 }
4786                                  }
4787                                  catch (CIMException & e)
4788                                  {
4789                                      PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4790                                          "CIMException: " + e.getMessage ());
4791                                  }
4792                                  catch (Exception & e)
4793                                  {
4794                                      PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4795                                          "Exception: " + e.getMessage ());
4796                                  }
4797                                  catch(...)
4798                                  {
4799                                      PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
4800                                          "Unknown error in handleSubscriptionInitCompleteRequest");
4801                                  }
4802                              }
4803                          
4804                              PEG_METHOD_EXIT ();
4805                              return (response);
4806 carolann.graves 1.21     }
4807                          
4808 schuur          1.1      Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
4809                          {
4810 mark.hamzy      1.23         PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
4811                          
4812 konrad.r        1.16         CIMRequestMessage* request =
4813                                  dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
4814                              PEGASUS_ASSERT(request != 0 );
4815                          
4816                              CIMResponseMessage* response = request->buildResponse();
4817                              response->cimException =
4818                                  PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
4819 schuur          1.1      
4820                              PEG_METHOD_EXIT();
4821 konrad.r        1.16         return response;
4822 schuur          1.1      }
4823                          
4824 kumpf           1.2      ProviderName JMPIProviderManager::_resolveProviderName(
4825                              const ProviderIdContainer & providerId)
4826 schuur          1.1      {
4827 kumpf           1.2          String providerName;
4828                              String fileName;
4829                              String interfaceName;
4830                              CIMValue genericValue;
4831                          
4832                              genericValue = providerId.getProvider().getProperty(
4833                                  providerId.getProvider().findProperty("Name")).getValue();
4834                              genericValue.get(providerName);
4835                          
4836                              genericValue = providerId.getModule().getProperty(
4837                                  providerId.getModule().findProperty("Location")).getValue();
4838                              genericValue.get(fileName);
4839                              fileName = resolveFileName(fileName);
4840                          
4841                              // ATTN: This attribute is probably not required
4842                              genericValue = providerId.getModule().getProperty(
4843                                  providerId.getModule().findProperty("InterfaceType")).getValue();
4844                              genericValue.get(interfaceName);
4845                          
4846                              return ProviderName(providerName, fileName, interfaceName, 0);
4847 schuur          1.1      }
4848                          
4849                          String JMPIProviderManager::resolveFileName(String fileName)
4850                          {
4851                              String name;
4852                              #if defined(PEGASUS_OS_TYPE_WINDOWS)
4853                              name = fileName; // + String(".dll");
4854                              #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
4855                              name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
4856                              name.append(String("/") + fileName); // + String(".sl"));
4857                              #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
4858                              name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
4859                              name.append(String("/") + fileName); // + String(".so"));
4860                              #elif defined(PEGASUS_OS_OS400)
4861                              name = filrName;
4862                              #else
4863                              name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
4864                              name.append(String("/") + fileName); // + String(".so"));
4865                              #endif
4866                              return name;
4867                          }
4868 schuur          1.1      
4869                          PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2