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

   1 karl  1.18 //%2005////////////////////////////////////////////////////////////////////////
   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 schuur 1.1  //
  12             // Permission is hereby granted, free of charge, to any person obtaining a copy
  13             // of this software and associated documentation files (the "Software"), to
  14             // deal in the Software without restriction, including without limitation the
  15             // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  16             // sell copies of the Software, and to permit persons to whom the Software is
  17             // furnished to do so, subject to the following conditions:
  18 mark.hamzy 1.23 //
  19 schuur     1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  20                 // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  21                 // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  22                 // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  23                 // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  24                 // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  25                 // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  26                 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  27                 //
  28                 //==============================================================================
  29                 //
  30 mark.hamzy 1.23 // Author:      Adrian Schuur, schuur@de.ibm.com
  31 schuur     1.1  //
  32 se.gupta   1.9  // Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135
  33 joyce.j    1.19 //              Josephine Eskaline Joyce, IBM (jojustin@in.ibm.com) for PEP#101
  34 schuur     1.1  //
  35                 //%/////////////////////////////////////////////////////////////////////////////
  36                 
  37                 #include "JMPIProviderManager.h"
  38                 
  39                 #include "JMPIImpl.h"
  40                 
  41                 #include <Pegasus/Common/CIMMessage.h>
  42                 #include <Pegasus/Common/OperationContext.h>
  43                 #include <Pegasus/Common/Tracer.h>
  44                 #include <Pegasus/Common/StatisticalData.h>
  45                 #include <Pegasus/Common/Logger.h>
  46                 #include <Pegasus/Common/MessageLoader.h> //l10n
  47 kumpf      1.10 #include <Pegasus/Common/Constants.h>
  48 schuur     1.1  
  49                 #include <Pegasus/Config/ConfigManager.h>
  50                 
  51                 #include <Pegasus/ProviderManager2/ProviderName.h>
  52                 #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
  53 konrad.r   1.22 #include <Pegasus/ProviderManager2/JMPI/JMPIProviderModule.h>
  54 schuur     1.1  #include <Pegasus/ProviderManager2/ProviderManagerService.h>
  55                 
  56 schuur     1.12 #include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h>
  57                 
  58 schuur     1.1  
  59                 PEGASUS_USING_STD;
  60                 PEGASUS_NAMESPACE_BEGIN
  61                 
  62 mark.hamzy 1.23 int JMPIProviderManager::trace=0;
  63 mark.hamzy 1.24 
  64                 #ifdef PEGASUS_DEBUG
  65 mark.hamzy 1.23 #define DDD(x) if (JMPIProviderManager::trace) x;
  66 mark.hamzy 1.24 #else
  67                 #define DDD(x)
  68                 #endif
  69 mark.hamzy 1.23 
  70                 #include "Convert.h"
  71 schuur     1.1  
  72 mark.hamzy 1.23 void JMPIProviderManager::debugPrintMethodPointers (JNIEnv *env, jclass jc)
  73                 {
  74                    // cd ${PEGAUSE_HOME}/src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/tests/JMPI_TestPropertyTypes
  75                    // javap -s -p JMPI_TestPropertyTypes
  76                    static const char *methodNames[][2] = {
  77 mark.hamzy 1.24       // CIMProvider
  78                       //   cimom-2003-11-24/org/snia/wbem/provider/CIMProvider.java
  79                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMProvider.java
  80                       {"initialize","(Lorg/pegasus/jmpi/CIMOMHandle;)V"},
  81 mark.hamzy 1.23       {"cleanup","()V"},
  82 mark.hamzy 1.24       // InstanceProvider
  83                       //   cimom-2003-11-24/org/snia/wbem/provider/InstanceProvider.java
  84                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMInstanceProvider.java
  85                       {"enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
  86                       {"enumInstances","(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;"},
  87                       {"getInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;"},
  88 mark.hamzy 1.23       {"createInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;"},
  89                       {"setInstance","(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V"},
  90                       {"deleteInstance","(Lorg/pegasus/jmpi/CIMObjectPath;)V"},
  91                       {"execQuery","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ILorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;"},
  92 mark.hamzy 1.24       // MethodProvider
  93                       //   cimom-2003-11-24/org/snia/wbem/provider/MethodProvider.java
  94                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMMethodProvider.java
  95 mark.hamzy 1.23       {"invokeMethod","(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;"},
  96 mark.hamzy 1.24       // PropertyProvider
  97                       //   cimom-2003-11-24/org/snia/wbem/provider/PropertyProvider.java
  98                       // AssociatorProvider
  99                       //   cimom-2003-11-24/org/snia/wbem/provider20/AssociatorProvider.java
 100                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/CIMAssociationProvider.java
 101                       // CIMProviderRouter
 102                       //   cimom-2003-11-24/org/snia/wbem/provider20/CIMProviderRouter.java
 103                       // EventProvider
 104                       //   cimom-2003-11-24/org/snia/wbem/provider20/EventProvider.java
 105                       //   src/Pegasus/ProviderManager2/JMPI/org/pegasus/jmpi/EventProvider.java
 106 mark.hamzy 1.23       {"authorizeFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)V"},
 107                       {"mustPoll","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;)Z"},
 108                       {"activateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 109 mark.hamzy 1.24       {"deActivateFilter","(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;Lorg/pegasus/jmpi/CIMObjectPath;Z)V"},
 110                       // IndicationHandler
 111                       //   cimom-2003-11-24/org/snia/wbem/provider20/IndicationHandler.java
 112                       // ProviderAdapter
 113                       //   cimom-2003-11-24/org/snia/wbem/provider20/ProviderAdapter.java
 114                       // JMPI_TestPropertyTypes
 115                       {"findObjectPath","(Lorg/pegasus/jmpi/CIMObjectPath;)I"},
 116                       {"testPropertyTypesValue","(Lorg/pegasus/jmpi/CIMInstance;)V"}
 117 mark.hamzy 1.23    };
 118                 
 119                    if (!env)
 120                    {
 121                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: env is NULL!"<<PEGASUS_STD(endl));
 122                       return;
 123                    }
 124                    if (!jc)
 125                    {
 126                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: jc is NULL!"<<PEGASUS_STD(endl));
 127                       return;
 128                    }
 129                 
 130                    for (int i = 0; i < (int)(sizeof (methodNames)/sizeof (methodNames[0])); i++)
 131                    {
 132                       jmethodID id = env->GetMethodID(jc,methodNames[i][0], methodNames[i][1]);
 133                       DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::debugPrintMethodPointers: "<<methodNames[i][0]<<", id = "<<PEGASUS_STD(hex)<<(int)id<<PEGASUS_STD(dec)<<PEGASUS_STD(endl));
 134                       env->ExceptionClear();
 135                    }
 136                 }
 137 schuur     1.1  
 138                 JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;
 139                 JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;
 140                 JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
 141                 
 142                 JMPIProviderManager::JMPIProviderManager(Mode m)
 143                 {
 144                    mode=m;
 145 carolann.graves 1.21    _subscriptionInitComplete = false;
 146 mark.hamzy      1.23 
 147                      #ifdef PEGASUS_DEBUG
 148                         if (getenv("PEGASUS_JMPI_TRACE"))
 149                            JMPIProviderManager::trace = 1;
 150                         else
 151                            JMPIProviderManager::trace = 0;
 152                      #else
 153                         JMPIProviderManager::trace = 0;
 154                      #endif
 155 schuur          1.1  }
 156                      
 157                      JMPIProviderManager::~JMPIProviderManager(void)
 158                      {
 159                      }
 160                      
 161 schuur          1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
 162 schuur          1.1              const String &ns, const String &cn)
 163                      {
 164                          String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
 165 mark.hamzy      1.23 
 166                          DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::insertProvider: "<<key<<PEGASUS_STD(endl));
 167                      
 168 schuur          1.1      return provReg.insert(key,name);
 169                      }
 170 mark.hamzy      1.23 
 171                      
 172 schuur          1.1  Message * JMPIProviderManager::processMessage(Message * request) throw()
 173                      {
 174 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::processMessage()");
 175 schuur          1.1  
 176                          Message * response = 0;
 177 mark.hamzy      1.23 
 178 schuur          1.1      // pass the request message to a handler method based on message type
 179                          switch(request->getType())
 180                          {
 181                          case CIM_GET_INSTANCE_REQUEST_MESSAGE:
 182                              response = handleGetInstanceRequest(request);
 183                      
 184                              break;
 185                          case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 186                              response = handleEnumerateInstancesRequest(request);
 187                      
 188                              break;
 189                          case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 190                              response = handleEnumerateInstanceNamesRequest(request);
 191                      
 192                              break;
 193                          case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 194                              response = handleCreateInstanceRequest(request);
 195                      
 196                              break;
 197                          case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 198                              response = handleModifyInstanceRequest(request);
 199 schuur          1.1  
 200                              break;
 201                          case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 202                              response = handleDeleteInstanceRequest(request);
 203                      
 204                              break;
 205                      /*    case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 206                              response = handleExecuteQueryRequest(request);
 207                      
 208                      */        break;
 209                          case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 210                              response = handleAssociatorsRequest(request);
 211                      
 212                              break;
 213                          case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 214                              response = handleAssociatorNamesRequest(request);
 215                      
 216                              break;
 217                          case CIM_REFERENCES_REQUEST_MESSAGE:
 218                              response = handleReferencesRequest(request);
 219                      
 220 schuur          1.1          break;
 221                          case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 222                              response = handleReferenceNamesRequest(request);
 223                      
 224                              break;
 225 schuur          1.11     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 226 schuur          1.1          response = handleInvokeMethodRequest(request);
 227                      
 228                              break;
 229 schuur          1.12     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 230 schuur          1.1          response = handleCreateSubscriptionRequest(request);
 231                      
 232                              break;
 233 schuur          1.12 /*    case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 234 schuur          1.1          response = handleModifySubscriptionRequest(request);
 235                              break;
 236 schuur          1.12 */
 237 schuur          1.1      case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 238                              response = handleDeleteSubscriptionRequest(request);
 239                      
 240                              break;
 241 schuur          1.12 /*    case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 242 kumpf           1.7          response = handleExportIndicationRequest(request);
 243 schuur          1.1          break;
 244 schuur          1.12 */
 245 schuur          1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 246                              response = handleDisableModuleRequest(request);
 247                      
 248                              break;
 249                          case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 250                              response = handleEnableModuleRequest(request);
 251                      
 252                              break;
 253                          case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 254                              response = handleStopAllProvidersRequest(request);
 255                      
 256 schuur          1.12         break;
 257 kumpf           1.4      case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
 258 mark.hamzy      1.23         response = handleInitializeProviderRequest(request);
 259 kumpf           1.4  
 260 mark.hamzy      1.23         break;
 261 carolann.graves 1.21     case CIM_SUBSCRIPTION_INIT_COMPLETE_REQUEST_MESSAGE:
 262                              response = handleSubscriptionInitCompleteRequest (request);
 263                      
 264                              break;
 265 schuur          1.1      default:
 266 mark.hamzy      1.23         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 267                                               "*** Unsupported Request "+request->getType());
 268                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::processMessage: Unsupported request "<<request->getType ()<<PEGASUS_STD(endl));
 269 schuur          1.1          response = handleUnsupportedRequest(request);
 270                      
 271                              break;
 272                          }
 273                      
 274                          PEG_METHOD_EXIT();
 275                      
 276                          return(response);
 277                      }
 278                      
 279 kumpf           1.6  Boolean JMPIProviderManager::hasActiveProviders()
 280                      {
 281                           return providerManager.hasActiveProviders();
 282                      }
 283                      
 284                      void JMPIProviderManager::unloadIdleProviders()
 285 schuur          1.1  {
 286 kumpf           1.6       providerManager.unloadIdleProviders();
 287 schuur          1.1  }
 288                      
 289                      #define STRDUPA(s,o) \
 290                         if (s) { \
 291                            o=(const char*)alloca(strlen(s)); \
 292                            strcpy((char*)(o),(s)); \
 293                         } \
 294                         else o=NULL;
 295                      
 296                      #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 297                      
 298                      
 299                      #define HandlerIntroBase(type,type1,message,request,response,handler,respType) \
 300                          CIM##type##RequestMessage * request = \
 301                              dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
 302                          PEGASUS_ASSERT(request != 0); \
 303                          CIM##type##ResponseMessage * response = \
 304                              new CIM##type##ResponseMessage( \
 305                              request->messageId, \
 306                              CIMException(), \
 307                              request->queueIds.copyAndPop() \
 308 schuur          1.1          respType \
 309                          PEGASUS_ASSERT(response != 0); \
 310                          response->setKey(request->getKey()); \
 311                          response->setHttpMethod(request->getHttpMethod()); \
 312                          type1##ResponseHandler handler(request, response);
 313                      
 314                      #define VOIDINTRO );
 315                      #define NOVOIDINTRO(type) ,type);
 316                      #define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName );
 317                      
 318                      
 319                      #define HandlerIntroVoid(type,message,request,response,handler) \
 320                           HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO)
 321                      
 322                      #define HandlerIntroMethod(type,message,request,response,handler) \
 323                           HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO)
 324                      
 325                      #define HandlerIntroInd(type,message,request,response,handler) \
 326                           HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 327                      
 328 kumpf           1.4  #define HandlerIntroInit(type,message,request,response,handler) \
 329                           HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 330                      
 331 schuur          1.1  #define HandlerIntro(type,message,request,response,handler,respType) \
 332                           HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType))
 333                      
 334                      #define HandlerCatch(handler) \
 335                          catch(CIMException & e)  \
 336                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 337                                      "Exception: " + e.getMessage()); \
 338                              handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
 339                          } \
 340                          catch(Exception & e) \
 341                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 342                                      "Exception: " + e.getMessage()); \
 343                              handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
 344                          } \
 345                          catch(...) \
 346                          { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 347                                      "Exception: Unknown"); \
 348                              handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 349                          }
 350                      
 351 schuur          1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
 352                      {
 353                          Uint32 s=list.size();
 354                          jobjectArray pl=NULL;
 355                          if (s) {
 356                             jstring initial=env->NewString(NULL,0);
 357 mark.hamzy      1.23        pl=(jobjectArray)env->NewObjectArray(s,jv->StringClassRef,initial);
 358 schuur          1.13        for (Uint32 i=0; i<s; i++) {
 359                                 env->SetObjectArrayElement
 360                                    (pl,i,env->NewStringUTF(list[i].getString().getCString()));
 361                             }
 362                          }
 363                          return pl;
 364                      }
 365 schuur          1.1  
 366                      Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
 367                      {
 368 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleGetInstanceRequest");
 369 schuur          1.1  
 370                          HandlerIntro(GetInstance,message,request,response,handler,CIMInstance());
 371                      
 372                          JNIEnv *env=NULL;
 373 schuur          1.13     Boolean mode24=false;
 374                          CIMPropertyList propertyList;
 375                          jobjectArray pl=NULL;
 376                      
 377 schuur          1.1      try {
 378 mark.hamzy      1.23         Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 379 schuur          1.1              "JMPIProviderManager::handleGetInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 380                                  System::getHostName(),
 381                                  request->nameSpace.getString(),
 382                                  request->instanceName.getClassName().getString());
 383                      
 384 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));
 385                      
 386 schuur          1.1          // make target object path
 387                              CIMObjectPath objectPath(
 388                                  System::getHostName(),
 389                                  request->nameSpace,
 390                                  request->instanceName.getClassName(),
 391                                  request->instanceName.getKeyBindings());
 392                      
 393                              // resolve provider name
 394 kumpf           1.2          ProviderName name = _resolveProviderName(
 395                                  request->operationContext.get(ProviderIdContainer::NAME));
 396 schuur          1.1  
 397                              // get cached or load new provider module
 398                              JMPIProvider::OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
 399 mark.hamzy      1.23                                    name.getLogicalName());
 400 schuur          1.1          OperationContext context;
 401                      
 402 mark.hamzy      1.23         // forward request
 403                              JMPIProvider & pr=ph.GetProvider();
 404 schuur          1.1  
 405                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 406                                  "Calling provider.getInstance: " + pr.getName());
 407                      
 408 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleGetInstanceRequest: Calling provider getInstance: "<<pr.getName()<<PEGASUS_STD(endl));
 409 schuur          1.1  
 410                              JvmVector *jv;
 411                              JNIEnv *env=JMPIjvm::attachThread(&jv);
 412                              JMPIjvm::checkException(env);
 413 mark.hamzy      1.23 
 414                              jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
 415                      
 416                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
 417 schuur          1.1          JMPIjvm::checkException(env);
 418                      
 419                              CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 420 mark.hamzy      1.23                           request->instanceName.getClassName(),
 421 schuur          1.1                                 false,true,true,CIMPropertyList());
 422                              JMPIjvm::checkException(env);
 423 mark.hamzy      1.23 
 424                              jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
 425                      
 426                              jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
 427 schuur          1.1          JMPIjvm::checkException(env);
 428                      
 429 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
 430 schuur          1.1  
 431 mark.hamzy      1.23         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance",
 432 schuur          1.13            "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
 433                      
 434 mark.hamzy      1.23         if (id==NULL) {
 435 schuur          1.13            env->ExceptionClear();
 436 mark.hamzy      1.23             id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance",
 437 schuur          1.13               "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 438 mark.hamzy      1.23               "Lorg/pegasus/jmpi/CIMInstance;");
 439 schuur          1.13            JMPIjvm::checkException(env);
 440 mark.hamzy      1.23             mode24=true;
 441                                  pl=getList(jv,env,request->propertyList);
 442                              }
 443 schuur          1.13         JMPIjvm::checkException(env);
 444                      
 445 mark.hamzy      1.23         STAT_GETSTARTTIME;
 446 schuur          1.1  
 447 mark.hamzy      1.23         jobject inst=NULL;
 448                              if (mode24)
 449                                  inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
 450 schuur          1.13               request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc);
 451 mark.hamzy      1.23         else
 452                                  inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc,true);
 453 schuur          1.13 
 454 schuur          1.1          STAT_PMS_PROVIDEREND;
 455 schuur          1.13 
 456 schuur          1.1          JMPIjvm::checkException(env);
 457 schuur          1.13         handler.processing();
 458 mark.hamzy      1.23         if (inst) {
 459                                 jint         jCi = env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst);
 460                                 CIMInstance *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
 461                      
 462 schuur          1.1             handler.deliver(*ci);
 463                              }
 464                              handler.complete();
 465 schuur          1.13     }
 466 schuur          1.1      HandlerCatch(handler);
 467 schuur          1.13 
 468 schuur          1.1      if (env) JMPIjvm::detachThread();
 469 schuur          1.13 
 470 schuur          1.1      PEG_METHOD_EXIT();
 471                      
 472                          return(response);
 473                      }
 474                      
 475                      Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
 476                      {
 477 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleEnumerateInstanceRequest");
 478                      
 479                          HandlerIntro(EnumerateInstances,message,request,response,handler,Array<CIMInstance>());
 480 schuur          1.1  
 481                          JNIEnv *env=NULL;
 482 schuur          1.13     Boolean mode24=false;
 483                          CIMPropertyList propertyList;
 484                          jobjectArray pl=NULL;
 485                      
 486                          try {
 487 schuur          1.1        Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 488                                  "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0  Name space: $1  Class name: $2",
 489                                  System::getHostName(),
 490                                  request->nameSpace.getString(),
 491                                  request->className.getString());
 492                      
 493 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
 494                      
 495 schuur          1.1          // make target object path
 496                              CIMObjectPath objectPath(
 497                                  System::getHostName(),
 498                                  request->nameSpace,
 499                                  request->className);
 500                      
 501                              // resolve provider name
 502 kumpf           1.2          ProviderName name = _resolveProviderName(
 503                                  request->operationContext.get(ProviderIdContainer::NAME));
 504 schuur          1.1  
 505                              // get cached or load new provider module
 506                              JMPIProvider::OpProviderHolder ph =
 507                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
 508                                     String::EMPTY);
 509                      
 510 schuur          1.12         // convert arguments
 511 schuur          1.1          OperationContext context;
 512                      
 513 schuur          1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
 514                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 515                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 516 schuur          1.1  
 517                              CIMPropertyList propertyList(request->propertyList);
 518                      
 519                              // forward request
 520 schuur          1.12         JMPIProvider & pr=ph.GetProvider();
 521 schuur          1.1  
 522                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 523                                  "Calling provider.enumerateInstances: " + pr.getName());
 524                      
 525 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstancesRequest: Calling provider enumerateInstances: "<<pr.getName()<<PEGASUS_STD(endl));
 526 schuur          1.12 
 527                              JvmVector *jv;
 528 schuur          1.1          env=JMPIjvm::attachThread(&jv);
 529                      
 530 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
 531                      
 532                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
 533 schuur          1.12         JMPIjvm::checkException(env);
 534                      
 535 schuur          1.1          CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 536 schuur          1.12                                request->className,
 537 schuur          1.1                                 false,true,true,CIMPropertyList());
 538 schuur          1.12         JMPIjvm::checkException(env);
 539 mark.hamzy      1.23 
 540                              jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
 541                      
 542                              jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
 543 schuur          1.1          JMPIjvm::checkException(env);
 544                      
 545 schuur          1.12         JMPIProvider::pm_service_op_lock op_lock(&pr);
 546 schuur          1.1  
 547 schuur          1.12         STAT_GETSTARTTIME;
 548 schuur          1.1  
 549                              jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances",
 550                                 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
 551 schuur          1.13 
 552 mark.hamzy      1.23         if (id==NULL) {
 553                                  env->ExceptionClear();
 554                                  id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstances",
 555 schuur          1.13               "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 556 mark.hamzy      1.23               "[Lorg/pegasus/jmpi/CIMInstance;");
 557                                  JMPIjvm::checkException(env);
 558                                  mode24=true;
 559                                  pl=getList(jv,env,request->propertyList);
 560                              }
 561 schuur          1.1          JMPIjvm::checkException(env);
 562                      
 563 schuur          1.13         if (!mode24) {
 564 mark.hamzy      1.23             jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,false,jCc,true);
 565                                  JMPIjvm::checkException(env);
 566                      
 567                                  STAT_PMS_PROVIDEREND;
 568                      
 569                                  handler.processing();
 570                                  if (jVec) {
 571                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
 572                                          JMPIjvm::checkException(env);
 573                      
 574                                          jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
 575                                          JMPIjvm::checkException(env);
 576 schuur          1.13 
 577 mark.hamzy      1.23                     jint         jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
 578                                          CIMInstance *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
 579 schuur          1.13 
 580 mark.hamzy      1.23                     JMPIjvm::checkException(env);
 581 schuur          1.13 
 582 mark.hamzy      1.23                     handler.deliver(*ci);
 583                                      }
 584                                  }
 585                                  handler.complete();
 586 schuur          1.13         }
 587 mark.hamzy      1.23         else {
 588                                  jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
 589                                                                                       request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc);
 590                                  JMPIjvm::checkException(env);
 591 schuur          1.12 
 592 mark.hamzy      1.23             STAT_PMS_PROVIDEREND;
 593                      
 594                                  handler.processing();
 595                                  if (jAr) {
 596                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
 597                                          JMPIjvm::checkException(env);
 598                      
 599                                          jobject jInst=env->GetObjectArrayElement(jAr,i);
 600                                          JMPIjvm::checkException(env);
 601 schuur          1.12 
 602 mark.hamzy      1.23                     jint         jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
 603                                          CIMInstance *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
 604 schuur          1.12 
 605 mark.hamzy      1.23                     JMPIjvm::checkException(env);
 606 schuur          1.12 
 607 mark.hamzy      1.23                     handler.deliver(*ci);
 608                                      }
 609                                  }
 610                                  handler.complete();
 611 schuur          1.1          }
 612                          }
 613                          HandlerCatch(handler);
 614 schuur          1.12 
 615 schuur          1.11     if (env) JMPIjvm::detachThread();
 616 schuur          1.12 
 617 schuur          1.1      PEG_METHOD_EXIT();
 618                      
 619                          return(response);
 620                      }
 621                      
 622                      Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
 623                      {
 624                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
 625                      
 626 mark.hamzy      1.23     HandlerIntro(EnumerateInstanceNames,message,request,response, handler,Array<CIMObjectPath>());
 627                      
 628 schuur          1.1      JNIEnv *env=NULL;
 629 schuur          1.13     Boolean mode24=false;
 630                          CIMPropertyList propertyList;
 631                          jobjectArray pl=NULL;
 632                      
 633 schuur          1.1      try {
 634                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 635                                  "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
 636                                  System::getHostName(),
 637                                  request->nameSpace.getString(),
 638                                  request->className.getString());
 639 mark.hamzy      1.23 
 640                              DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->className.getString()<<PEGASUS_STD(endl));
 641                      
 642 schuur          1.1         // make target object path
 643                              CIMObjectPath objectPath(
 644                                  System::getHostName(),
 645                                  request->nameSpace,
 646                                  request->className);
 647                      
 648                              // resolve provider name
 649 kumpf           1.2          ProviderName name = _resolveProviderName(
 650                                  request->operationContext.get(ProviderIdContainer::NAME));
 651 schuur          1.1  
 652                              // get cached or load new provider module
 653                              JMPIProvider::OpProviderHolder ph =
 654                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
 655                      
 656                              // convert arguments
 657                              OperationContext context;
 658                      
 659 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
 660                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 661                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 662 schuur          1.1  
 663 mark.hamzy      1.23         JMPIProvider & pr=ph.GetProvider();
 664 schuur          1.1  
 665 mark.hamzy      1.23         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 666 schuur          1.1              "Calling provider.enumerateInstanceNames: " + pr.getName());
 667                      
 668 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleEnumerateInstanceNamesRequest: Calling provider : enumerateInstanceNames"<<pr.getName()<<PEGASUS_STD(endl));
 669 schuur          1.1  
 670 mark.hamzy      1.23         JvmVector *jv;
 671                              env=JMPIjvm::attachThread(&jv);
 672 schuur          1.12 
 673 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
 674 schuur          1.1  
 675 mark.hamzy      1.23         jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
 676                              JMPIjvm::checkException(env);
 677 schuur          1.12 
 678 schuur          1.1          CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 679 mark.hamzy      1.23                           request->className,
 680 schuur          1.1                                 false,true,true,CIMPropertyList());
 681                              JMPIjvm::checkException(env);
 682 mark.hamzy      1.23 
 683                              jObj = DEBUG_ConvertCToJava (CIMClass*, jint, &cls);
 684                      
 685                              jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,jObj);
 686 schuur          1.1          JMPIjvm::checkException(env);
 687                      
 688 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
 689 schuur          1.1  
 690 mark.hamzy      1.23         STAT_GETSTARTTIME;
 691 schuur          1.1  
 692                              jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances",
 693                                 "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
 694 schuur          1.13 
 695 mark.hamzy      1.23         if (id==NULL) {
 696 schuur          1.13            env->ExceptionClear();
 697 mark.hamzy      1.23             id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstanceNames",
 698 schuur          1.13               "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
 699 mark.hamzy      1.23               "[Lorg/pegasus/jmpi/CIMObjectPath;");
 700 schuur          1.13            JMPIjvm::checkException(env);
 701 mark.hamzy      1.23             mode24=true;
 702                              }
 703 schuur          1.1          JMPIjvm::checkException(env);
 704                      
 705 schuur          1.13         if (!mode24) {
 706 mark.hamzy      1.23             jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,true,jCc);
 707                                  JMPIjvm::checkException(env);
 708                      
 709                                  STAT_PMS_PROVIDEREND;
 710                      
 711                                  handler.processing();
 712                                  if (jVec) {
 713                                      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
 714                                          JMPIjvm::checkException(env);
 715                      
 716                                          jobject inst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
 717                                          JMPIjvm::checkException(env);
 718                      
 719                                          jint           jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
 720                                          CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
 721 schuur          1.13 
 722 mark.hamzy      1.23                     JMPIjvm::checkException(env);
 723 schuur          1.13 
 724 mark.hamzy      1.23                     handler.deliver(*cop);
 725                                      }
 726                                  }
 727                                  handler.complete();
 728 schuur          1.13         }
 729                              else {
 730 mark.hamzy      1.23             jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc);
 731                                  JMPIjvm::checkException(env);
 732                      
 733                                  STAT_PMS_PROVIDEREND;
 734                      
 735                                  handler.processing();
 736                                  if (jAr) {
 737                                      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
 738                                          JMPIjvm::checkException(env);
 739                      
 740                                          jobject inst=env->GetObjectArrayElement(jAr,i);
 741                                          JMPIjvm::checkException(env);
 742                      
 743                                          jint           jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
 744                                          CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
 745 schuur          1.13 
 746 mark.hamzy      1.23                     JMPIjvm::checkException(env);
 747 schuur          1.13 
 748 mark.hamzy      1.23                     handler.deliver(*cop);
 749                                      }
 750                                  }
 751                                  handler.complete();
 752 schuur          1.1          }
 753                          }
 754                          HandlerCatch(handler);
 755 mark.hamzy      1.23 
 756                          if (env) JMPIjvm::detachThread();
 757 schuur          1.1  
 758                          PEG_METHOD_EXIT();
 759                      
 760                          return(response);
 761                      }
 762                      
 763                      Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
 764                      {
 765 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleCreateInstanceRequest");
 766                      
 767                          HandlerIntro(CreateInstance,message,request,response,handler,CIMObjectPath());
 768 schuur          1.1  
 769                          JNIEnv *env=NULL;
 770                          try {
 771                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 772                                  "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 773                                  System::getHostName(),
 774                                  request->nameSpace.getString(),
 775                                  request->newInstance.getPath().getClassName().getString());
 776                      
 777 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));
 778                      
 779 schuur          1.1          // make target object path
 780                              CIMObjectPath objectPath(
 781                                  System::getHostName(),
 782                                  request->nameSpace,
 783                                  request->newInstance.getPath().getClassName(),
 784                                  request->newInstance.getPath().getKeyBindings());
 785                      
 786                              // resolve provider name
 787 kumpf           1.2          ProviderName name = _resolveProviderName(
 788                                  request->operationContext.get(ProviderIdContainer::NAME));
 789 schuur          1.1  
 790                              // get cached or load new provider module
 791                              JMPIProvider::OpProviderHolder ph =
 792                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
 793 mark.hamzy      1.23               String::EMPTY);
 794 schuur          1.1  
 795                              // convert arguments
 796                              OperationContext context;
 797                      
 798 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
 799                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 800                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 801 schuur          1.1  
 802                              // forward request
 803 mark.hamzy      1.23         JMPIProvider & pr=ph.GetProvider();
 804 schuur          1.1  
 805                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 806                                  "Calling provider.createInstance: " +
 807                                  ph.GetProvider().getName());
 808                      
 809 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: Calling provider createInstance: "<<pr.getName()<<PEGASUS_STD(endl));
 810 schuur          1.12 
 811 mark.hamzy      1.23         JvmVector *jv;
 812 schuur          1.1          env=JMPIjvm::attachThread(&jv);
 813                      
 814 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
 815                      
 816                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
 817                              JMPIjvm::checkException(env);
 818                      
 819                              jObj = DEBUG_ConvertCToJava (CIMInstance*, jint, &request->newInstance);
 820                      
 821                              jobject jInst=env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jObj);
 822                              JMPIjvm::checkException(env);
 823 schuur          1.1  
 824 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
 825 schuur          1.1  
 826 mark.hamzy      1.23         STAT_GETSTARTTIME;
 827 schuur          1.1  
 828                              jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"createInstance",
 829                                 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
 830                              JMPIjvm::checkException(env);
 831                      
 832 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateInstanceRequest: id = "<<id<<", jRef = "<<jRef<<", jInst = "<<jInst<<PEGASUS_STD(endl));
 833                      
 834                              jobject inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jInst);
 835                      
 836 schuur          1.1          STAT_PMS_PROVIDEREND;
 837 mark.hamzy      1.23 
 838 schuur          1.1          JMPIjvm::checkException(env);
 839 mark.hamzy      1.23         handler.processing();
 840                              if (inst) {
 841                                  jint           jCop = env->CallIntMethod(inst,JMPIjvm::jv.CIMObjectPathCInst);
 842                                  CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
 843                      
 844                                  handler.deliver(*cop);
 845 schuur          1.1          }
 846                              handler.complete();
 847                          }
 848                          HandlerCatch(handler);
 849 mark.hamzy      1.23 
 850 schuur          1.1      if (env) JMPIjvm::detachThread();
 851 mark.hamzy      1.23 
 852 schuur          1.1      PEG_METHOD_EXIT();
 853                      
 854                          return(response);
 855                      }
 856                      
 857                      Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
 858                      {
 859 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleModifyInstanceRequest");
 860 schuur          1.1  
 861                          HandlerIntroVoid(ModifyInstance,message,request,response,handler);
 862 mark.hamzy      1.23 
 863 schuur          1.1      JNIEnv *env=NULL;
 864 schuur          1.13     Boolean mode24=false;
 865                          CIMPropertyList propertyList;
 866                          jobjectArray pl=NULL;
 867                      
 868 schuur          1.1      try {
 869                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 870 konrad.r        1.15             "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 871 schuur          1.1              System::getHostName(),
 872                                  request->nameSpace.getString(),
 873                                  request->modifiedInstance.getPath().getClassName().getString());
 874                      
 875 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));
 876                      
 877 schuur          1.1          // make target object path
 878                              CIMObjectPath objectPath(
 879                                  System::getHostName(),
 880                                  request->nameSpace,
 881                                  request->modifiedInstance.getPath ().getClassName(),
 882                                  request->modifiedInstance.getPath ().getKeyBindings());
 883                      
 884                              // resolve provider name
 885 kumpf           1.2          ProviderName name = _resolveProviderName(
 886                                  request->operationContext.get(ProviderIdContainer::NAME));
 887 schuur          1.1  
 888 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleModifyInstanceRequest: provider name physical = "<<name.getPhysicalName()<<", logical = "<<name.getLogicalName()<<PEGASUS_STD(endl));
 889                      
 890 schuur          1.1          // get cached or load new provider module
 891                              JMPIProvider::OpProviderHolder ph =
 892                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
 893                      
 894                              // convert arguments
 895                              OperationContext context;
 896                      
 897 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
 898                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 899                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 900 schuur          1.1  
 901                              CIMPropertyList propertyList(request->propertyList);
 902                      
 903                              // forward request
 904 mark.hamzy      1.23         JMPIProvider & pr=ph.GetProvider();
 905                      
 906                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.modifyInstance: " + pr.getName());
 907                      
 908                              JvmVector *jv;
 909                              env=JMPIjvm::attachThread(&jv);
 910                      
 911                              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));
 912                              DDD(debugPrintMethodPointers (env, (jclass)pr.jProviderClass));
 913 schuur          1.1  
 914 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
 915 schuur          1.1  
 916 mark.hamzy      1.23         jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
 917                              JMPIjvm::checkException(env);
 918 schuur          1.1  
 919 mark.hamzy      1.23         jObj = DEBUG_ConvertCToJava (CIMInstance*, jint, &request->modifiedInstance);
 920 schuur          1.1  
 921 mark.hamzy      1.23         jobject jInst=env->NewObject(jv->CIMInstanceClassRef,jv->CIMInstanceNewI,jObj);
 922                              JMPIjvm::checkException(env);
 923 schuur          1.1  
 924 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
 925 schuur          1.1  
 926 mark.hamzy      1.23         STAT_GETSTARTTIME;
 927 schuur          1.1  
 928                              jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance",
 929                                 "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
 930 schuur          1.13 
 931 mark.hamzy      1.23         if (id==NULL) {
 932 schuur          1.13            env->ExceptionClear();
 933                                 id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance",
 934                                    "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
 935                                 JMPIjvm::checkException(env);
 936                                 mode24=true;
 937                                 pl=getList(jv,env,request->propertyList);
 938                              }
 939 schuur          1.1          JMPIjvm::checkException(env);
 940                      
 941 mark.hamzy      1.23         if (!mode24)
 942                                 env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst);
 943                              else
 944                                 env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst,pl);
 945 schuur          1.13 
 946 schuur          1.1          STAT_PMS_PROVIDEREND;
 947 mark.hamzy      1.23 
 948 schuur          1.1          JMPIjvm::checkException(env);
 949                          }
 950                          HandlerCatch(handler);
 951 mark.hamzy      1.23 
 952 schuur          1.1      if (env) JMPIjvm::detachThread();
 953 mark.hamzy      1.23 
 954 schuur          1.1      PEG_METHOD_EXIT();
 955                      
 956                          return(response);
 957                      }
 958                      
 959                      Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
 960                      {
 961 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleDeleteInstanceRequest");
 962                      
 963                          HandlerIntroVoid(DeleteInstance,message,request,response,handler);
 964 schuur          1.1  
 965                          JNIEnv *env=NULL;
 966                          try {
 967                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 968 konrad.r        1.15             "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 969 schuur          1.1              System::getHostName(),
 970                                  request->nameSpace.getString(),
 971                                  request->instanceName.getClassName().getString());
 972                      
 973 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));
 974                      
 975 schuur          1.1          // make target object path
 976                              CIMObjectPath objectPath(
 977                                  System::getHostName(),
 978                                  request->nameSpace,
 979                                  request->instanceName.getClassName(),
 980                                  request->instanceName.getKeyBindings());
 981                      
 982                              // resolve provider name
 983 kumpf           1.2          ProviderName name = _resolveProviderName(
 984                                  request->operationContext.get(ProviderIdContainer::NAME));
 985 schuur          1.1  
 986                              // get cached or load new provider module
 987                              JMPIProvider::OpProviderHolder ph =
 988                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
 989                      
 990                              // convert arguments
 991                              OperationContext context;
 992                      
 993 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
 994                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 995                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 996 schuur          1.1  
 997                              // forward request
 998 mark.hamzy      1.23         JMPIProvider & pr=ph.GetProvider();
 999 schuur          1.1  
1000                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1001                                  "Calling provider.deleteInstance: " + pr.getName());
1002                      
1003 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: Calling provider deleteInstance: "<<pr.getName()<<PEGASUS_STD(endl));
1004 schuur          1.1  
1005 mark.hamzy      1.23         JvmVector *jv;
1006 schuur          1.1          env=JMPIjvm::attachThread(&jv);
1007                      
1008 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1009                      
1010                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1011                              JMPIjvm::checkException(env);
1012 schuur          1.1  
1013 mark.hamzy      1.23         JMPIProvider::pm_service_op_lock op_lock(&pr);
1014 schuur          1.1  
1015 mark.hamzy      1.23         STAT_GETSTARTTIME;
1016 schuur          1.1  
1017                              jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deleteInstance",
1018                                 "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
1019                              JMPIjvm::checkException(env);
1020                      
1021                              env->CallVoidMethod((jobject)pr.jProvider,id,jRef);
1022 mark.hamzy      1.23 
1023 schuur          1.1          STAT_PMS_PROVIDEREND;
1024 mark.hamzy      1.23 
1025 schuur          1.1          JMPIjvm::checkException(env);
1026                          }
1027                          HandlerCatch(handler);
1028 mark.hamzy      1.23 
1029 schuur          1.1      if (env) JMPIjvm::detachThread();
1030 mark.hamzy      1.23 
1031 schuur          1.1      PEG_METHOD_EXIT();
1032                      
1033                          return(response);
1034                      }
1035                      
1036                      
1037                      Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
1038                      {
1039 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorsRequest");
1040                      
1041                          HandlerIntro(Associators,message,request,response,handler,Array<CIMObject>());
1042 schuur          1.1  
1043 mark.hamzy      1.24     typedef enum {
1044                             METHOD_UNKNOWN = 0,
1045                             METHOD_DIRECTOR,
1046                             METHOD_SNIA_PROVIDER20,
1047                          } METHOD_VERSION;
1048                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1049                          JNIEnv          *env           = NULL;
1050                          CIMPropertyList  propertyList;
1051                          jobjectArray     jPropertyList = NULL;
1052 schuur          1.13 
1053 schuur          1.1      try {
1054                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1055                                  "JMPIProviderManager::handleAssociatorsRequest - Host name: $0  Name space: $1  Class name: $2",
1056                                  System::getHostName(),
1057                                  request->nameSpace.getString(),
1058                                  request->objectName.getClassName().getString());
1059                      
1060 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteInstanceRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
1061                      
1062 schuur          1.1          // make target object path
1063                              CIMObjectPath objectPath(
1064                                  System::getHostName(),
1065                                  request->nameSpace,
1066                                  request->objectName.getClassName());
1067                      
1068                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1069                      
1070                              CIMObjectPath assocPath(
1071                                  System::getHostName(),
1072                                  request->nameSpace,
1073                                  request->assocClass.getString());
1074                      
1075                              // resolve provider name
1076 kumpf           1.2          ProviderName name = _resolveProviderName(
1077                                  request->operationContext.get(ProviderIdContainer::NAME));
1078 schuur          1.1  
1079                              // get cached or load new provider module
1080                              JMPIProvider::OpProviderHolder ph =
1081                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1082                      
1083 mark.hamzy      1.24         // convert arguments
1084 schuur          1.1          OperationContext context;
1085                      
1086 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
1087                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1088                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1089 schuur          1.1  
1090                              // forward request
1091 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
1092                      
1093                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associators: " + pr.getName());
1094 schuur          1.1  
1095 mark.hamzy      1.24         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: Calling provider associators: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
1096 schuur          1.1  
1097 mark.hamzy      1.24         JvmVector *jv = 0;
1098 schuur          1.1  
1099 mark.hamzy      1.24         env = JMPIjvm::attachThread(&jv);
1100 schuur          1.1  
1101 mark.hamzy      1.24         jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1102                              jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1103 mark.hamzy      1.23 
1104                              JMPIjvm::checkException(env);
1105 schuur          1.1  
1106 mark.hamzy      1.24         jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
1107                              jstring jRole        = env->NewStringUTF(request->role.getCString());
1108                              jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
1109                      
1110 mark.hamzy      1.23         JMPIjvm::checkException(env);
1111 schuur          1.1  
1112                              JMPIProvider::pm_service_op_lock op_lock(&pr);
1113                      
1114                              STAT_GETSTARTTIME;
1115                      
1116 mark.hamzy      1.24         jmethodID id = NULL;
1117                      
1118                              // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
1119                              //                                               java.lang.String               resultClass,
1120                              //                                               java.lang.String               role,
1121                              //                                               java.lang.String               resultRole,
1122                              //                                               boolean                        includeQualifiers,
1123                              //                                               boolean                        includeClassOrigin,
1124                              //                                               java.lang.String[]             propertyList)
1125                              //        throws org.pegasus.jmpi.CIMException;
1126                              //
1127                              id = env->GetMethodID((jclass)pr.jProviderClass,
1128                                                    "associators",
1129                                                    "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1130                      
1131                              if (id != NULL)
1132                              {
1133                                  eMethodFound = METHOD_DIRECTOR;
1134                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_DIRECTOR."<<PEGASUS_STD(endl));
1135                              }
1136 schuur          1.12 
1137 mark.hamzy      1.24         if (id == NULL)
1138                              {
1139                                  env->ExceptionClear();
1140                      
1141                                  // public abstract java.util.Vector associators (org.pegasus.jmpi.CIMObjectPath assocName,
1142                                  //                                               org.pegasus.jmpi.CIMObjectPath pathName,
1143                                  //                                               java.lang.String               resultClass,
1144                                  //                                               java.lang.String               role,
1145                                  //                                               java.lang.String               resultRole,
1146                                  //                                               boolean                        includeQualifiers,
1147                                  //                                               boolean                        includeClassOrigin,
1148                                  //                                               java.lang.String[]             propertyList)
1149                                  //        throws org.pegasus.jmpi.CIMException;
1150                                  //
1151                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1152                                                        "associators",
1153                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1154                      
1155                                  if (id != NULL)
1156                                  {
1157                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1158 mark.hamzy      1.24                 DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1159                                  }
1160                              }
1161                      
1162                              if (id == NULL)
1163                              {
1164                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
1165 mark.hamzy      1.23         }
1166 mark.hamzy      1.24 
1167 schuur          1.1          JMPIjvm::checkException(env);
1168                      
1169 mark.hamzy      1.24         jPropertyList = getList(jv,env,request->propertyList);
1170 schuur          1.13 
1171 mark.hamzy      1.24         switch (eMethodFound)
1172                              {
1173                              case METHOD_DIRECTOR:
1174                              {
1175                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1176                                                                                        id,
1177                                                                                        jAssociationName,
1178                                                                                        jResultClass,
1179                                                                                        jRole,
1180                                                                                        jResultRole,
1181                                                                                        false,
1182                                                                                        false,
1183                                                                                        jPropertyList);
1184 mark.hamzy      1.23             JMPIjvm::checkException(env);
1185 schuur          1.13 
1186 mark.hamzy      1.23             STAT_PMS_PROVIDEREND;
1187 schuur          1.1  
1188 mark.hamzy      1.23             handler.processing();
1189                                  if (jVec) {
1190 mark.hamzy      1.24                 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1191 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1192 schuur          1.1  
1193 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1194                      
1195 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1196 schuur          1.13 
1197 mark.hamzy      1.24                     jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
1198 schuur          1.13 
1199 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1200 schuur          1.13 
1201 mark.hamzy      1.24                     CIMInstance         *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1202                                          CIMClass             cls = pr._cimom_handle->getClass(context,request->nameSpace,ci->getClassName(),false,true,true,CIMPropertyList());
1203                                          const CIMObjectPath& op  = ci->getPath();
1204                                          CIMObjectPath        iop = ci->buildPath(cls);
1205                      
1206 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
1207                                          ci->setPath(iop);
1208 schuur          1.13 
1209 mark.hamzy      1.23                     handler.deliver(*ci);
1210                                      }
1211                                  }
1212 mark.hamzy      1.24             handler.complete();
1213                                  break;
1214 mark.hamzy      1.23         }
1215 mark.hamzy      1.24 
1216                              case METHOD_SNIA_PROVIDER20:
1217                              {
1218                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &assocPath);
1219                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
1220                      
1221                                  JMPIjvm::checkException(env);
1222                      
1223                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1224                                                                                       id,
1225                                                                                       jAssociationName,
1226                                                                                       jPathName,
1227                                                                                       jResultClass,
1228                                                                                       jRole,
1229                                                                                       jResultRole,
1230                                                                                       false,
1231                                                                                       false,
1232                                                                                       jPropertyList);
1233 mark.hamzy      1.23             JMPIjvm::checkException(env);
1234                      
1235                                  STAT_PMS_PROVIDEREND;
1236                      
1237                                  handler.processing();
1238 mark.hamzy      1.24             if (jVec) {
1239                                      for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1240 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1241                      
1242 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1243                      
1244 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1245                      
1246 mark.hamzy      1.24                     jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
1247                      
1248 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1249                      
1250 mark.hamzy      1.24                     CIMInstance         *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1251                                          CIMClass             cls = pr._cimom_handle->getClass(context,request->nameSpace,ci->getClassName(),false,true,true,CIMPropertyList());
1252                                          const CIMObjectPath& op  = ci->getPath();
1253                                          CIMObjectPath        iop = ci->buildPath(cls);
1254                      
1255 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
1256                                          ci->setPath(iop);
1257 schuur          1.13 
1258 mark.hamzy      1.23                     handler.deliver(*ci);
1259                                      }
1260                                  }
1261 mark.hamzy      1.24             handler.complete();
1262                                  break;
1263                              }
1264                      
1265                              case METHOD_UNKNOWN:
1266                              {
1267                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
1268                                  break;
1269                              }
1270 mark.hamzy      1.23         }
1271 schuur          1.1      }
1272                          HandlerCatch(handler);
1273 schuur          1.13 
1274                          if (env) JMPIjvm::detachThread();
1275                      
1276 schuur          1.1      PEG_METHOD_EXIT();
1277                      
1278                          return(response);
1279                      }
1280 schuur          1.13 
1281 schuur          1.1  Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
1282                      {
1283 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleAssociatorNamesRequest");
1284                      
1285                          HandlerIntro(AssociatorNames,message,request,response,handler,Array<CIMObjectPath>());
1286 schuur          1.1  
1287 mark.hamzy      1.24     typedef enum {
1288                             METHOD_UNKNOWN = 0,
1289                             METHOD_DIRECTOR,
1290                             METHOD_SNIA_PROVIDER20
1291                          } METHOD_VERSION;
1292                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1293                          JNIEnv          *env           = NULL;
1294 schuur          1.13 
1295 schuur          1.1      try {
1296                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1297                                  "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1298                                  System::getHostName(),
1299                                  request->nameSpace.getString(),
1300                                  request->objectName.getClassName().getString());
1301                      
1302 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
1303                      
1304 schuur          1.1          // make target object path
1305                              CIMObjectPath objectPath(
1306                                  System::getHostName(),
1307                                  request->nameSpace,
1308                                  request->objectName.getClassName());
1309                      
1310                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1311                      
1312                              CIMObjectPath assocPath(
1313                                  System::getHostName(),
1314                                  request->nameSpace,
1315                                  request->assocClass.getString());
1316 mark.hamzy      1.23 
1317 schuur          1.1          // resolve provider name
1318 kumpf           1.2          ProviderName name = _resolveProviderName(
1319                                  request->operationContext.get(ProviderIdContainer::NAME));
1320 schuur          1.1  
1321                              // get cached or load new provider module
1322                              JMPIProvider::OpProviderHolder ph =
1323                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1324                      
1325                              // convert arguments
1326                              OperationContext context;
1327                      
1328 mark.hamzy      1.23         context.insert(request->operationContext.get(IdentityContainer::NAME));
1329                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1330                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1331 schuur          1.1  
1332                              // forward request
1333 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
1334 schuur          1.1  
1335 mark.hamzy      1.24         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.associatorNames: " + pr.getName());
1336 schuur          1.1  
1337 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: Calling provider associatorNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->assocClass<<PEGASUS_STD(endl));
1338 schuur          1.1  
1339 mark.hamzy      1.24         JvmVector *jv = 0;
1340                      
1341                              env = JMPIjvm::attachThread(&jv);
1342 schuur          1.1  
1343 mark.hamzy      1.24         jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1344                              jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1345 mark.hamzy      1.23 
1346                              JMPIjvm::checkException(env);
1347                      
1348 mark.hamzy      1.24         jstring jResultClass = env->NewStringUTF(request->resultClass.getString().getCString());
1349                              jstring jRole        = env->NewStringUTF(request->role.getCString());
1350                              jstring jResultRole  = env->NewStringUTF(request->resultRole.getCString());
1351                      
1352 mark.hamzy      1.23         JMPIjvm::checkException(env);
1353 schuur          1.1  
1354                              JMPIProvider::pm_service_op_lock op_lock(&pr);
1355                      
1356                              STAT_GETSTARTTIME;
1357                      
1358 mark.hamzy      1.24         jmethodID id = NULL;
1359                      
1360                              // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
1361                              //                                                   java.lang.String               resultClass,
1362                              //                                                   java.lang.String               role,
1363                              //                                                   java.lang.String               resultRole)
1364                              //        throws org.pegasus.jmpi.CIMException
1365                              id = env->GetMethodID((jclass)pr.jProviderClass,
1366                                                    "associatorNames",
1367                                                    "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
1368                      
1369                              if (id != NULL)
1370                              {
1371                                  eMethodFound = METHOD_DIRECTOR;
1372                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_DIRECTOR."<<PEGASUS_STD(endl));
1373                              }
1374                      
1375                              if (id == NULL)
1376                              {
1377                                  env->ExceptionClear();
1378                      
1379 mark.hamzy      1.24             // public abstract java.util.Vector associatorNames (org.pegasus.jmpi.CIMObjectPath assocName,
1380                                  //                                                   org.pegasus.jmpi.CIMObjectPath pathName,
1381                                  //                                                   java.lang.String               resultClass,
1382                                  //                                                   java.lang.String               role,
1383                                  //                                                   java.lang.String               resultRole)
1384                                  //        throws org.pegasus.jmpi.CIMException
1385                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1386                                                        "associatorNames",
1387                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/util/Vector;");
1388                      
1389                                  if (id != NULL)
1390                                  {
1391                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1392                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1393                                  }
1394                              }
1395 schuur          1.13 
1396 mark.hamzy      1.24         if (id == NULL)
1397                              {
1398                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: found no method!"<<PEGASUS_STD(endl));
1399 mark.hamzy      1.23         }
1400 mark.hamzy      1.24 
1401 schuur          1.1          JMPIjvm::checkException(env);
1402                      
1403 mark.hamzy      1.24         switch (eMethodFound)
1404                              {
1405                              case METHOD_DIRECTOR:
1406                              {
1407                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1408                                                                                        id,
1409                                                                                        jAssociationName,
1410                                                                                        jResultClass,
1411                                                                                        jRole,
1412                                                                                        jResultRole);
1413 mark.hamzy      1.23             JMPIjvm::checkException(env);
1414                      
1415                                  STAT_PMS_PROVIDEREND;
1416                      
1417                                  handler.processing();
1418                                  if (jVec) {
1419 mark.hamzy      1.24                 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1420 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1421                      
1422 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1423                      
1424 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1425                      
1426 mark.hamzy      1.24                     jint           jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
1427 mark.hamzy      1.23                     CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
1428                      
1429                                          JMPIjvm::checkException(env);
1430                      
1431                                          handler.deliver(*cop);
1432                                      }
1433                                  }
1434                                  handler.complete();
1435 mark.hamzy      1.24             break;
1436 mark.hamzy      1.23         }
1437 mark.hamzy      1.24 
1438                              case METHOD_SNIA_PROVIDER20:
1439                              {
1440                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &assocPath);
1441                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
1442                      
1443                                  JMPIjvm::checkException(env);
1444                      
1445                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1446                                                                                        id,
1447                                                                                        jAssociationName,
1448                                                                                        jPathNameRef,
1449                                                                                        jResultClass,
1450                                                                                        jRole,
1451                                                                                        jResultRole);
1452 mark.hamzy      1.23             JMPIjvm::checkException(env);
1453                      
1454                                  STAT_PMS_PROVIDEREND;
1455 schuur          1.13 
1456 mark.hamzy      1.23             handler.processing();
1457 mark.hamzy      1.24             if (jVec) {
1458                                      for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1459 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1460 schuur          1.13 
1461 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1462                      
1463 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1464 schuur          1.13 
1465 mark.hamzy      1.24                     jint           jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
1466 mark.hamzy      1.23                     CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
1467 schuur          1.1  
1468 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1469 schuur          1.1  
1470 mark.hamzy      1.23                     handler.deliver(*cop);
1471                                      }
1472                                  }
1473                                  handler.complete();
1474 mark.hamzy      1.24             break;
1475                              }
1476                      
1477                              case METHOD_UNKNOWN:
1478                              {
1479                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorNamesRequest: should not be here!"<<PEGASUS_STD(endl));
1480                                  break;
1481                              }
1482 mark.hamzy      1.23         }
1483 schuur          1.1      }
1484                          HandlerCatch(handler);
1485 schuur          1.12 
1486 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
1487 schuur          1.12 
1488 schuur          1.1      PEG_METHOD_EXIT();
1489                      
1490                          return(response);
1491                      }
1492                      
1493                      Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
1494                      {
1495 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferencesRequest");
1496                      
1497                          HandlerIntro(References,message,request,response,handler,Array<CIMObject>());
1498 schuur          1.1  
1499 mark.hamzy      1.24     typedef enum {
1500                             METHOD_UNKNOWN = 0,
1501                             METHOD_DIRECTOR,
1502                             METHOD_SNIA_PROVIDER20,
1503                          } METHOD_VERSION;
1504                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1505                          JNIEnv          *env           = NULL;
1506                          CIMPropertyList  propertyList;
1507                          jobjectArray     jPropertyList = NULL;
1508 schuur          1.13 
1509 schuur          1.1      try {
1510                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1511 konrad.r        1.15             "JMPIProviderManager::handleReferencesRequest - Host name: $0  Name space: $1  Class name: $2",
1512 schuur          1.1              System::getHostName(),
1513                                  request->nameSpace.getString(),
1514                                  request->objectName.getClassName().getString());
1515                      
1516 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", classname = "<<request->objectName.getClassName().getString()<<PEGASUS_STD(endl));
1517                      
1518 schuur          1.1          // make target object path
1519                              CIMObjectPath objectPath(
1520                                  System::getHostName(),
1521                                  request->nameSpace,
1522                                  request->objectName.getClassName());
1523                      
1524                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1525                      
1526                              CIMObjectPath resultPath(
1527                                  System::getHostName(),
1528                                  request->nameSpace,
1529                                  request->resultClass.getString());
1530                      
1531                              // resolve provider name
1532 kumpf           1.2          ProviderName name = _resolveProviderName(
1533                                  request->operationContext.get(ProviderIdContainer::NAME));
1534 schuur          1.1  
1535                              // get cached or load new provider module
1536                              JMPIProvider::OpProviderHolder ph =
1537                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1538                      
1539                              // convert arguments
1540                              OperationContext context;
1541                      
1542 schuur          1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
1543                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1544                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1545 schuur          1.1  
1546                              // forward request
1547 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
1548                      
1549                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.references: " + pr.getName());
1550 schuur          1.1  
1551 mark.hamzy      1.24         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferencesRequest: Calling provider references: "<<pr.getName()<<", role: "<<request->role<<" aCls: "<<request->resultClass<<PEGASUS_STD(endl));
1552 schuur          1.1  
1553 mark.hamzy      1.24         JvmVector *jv = 0;
1554 schuur          1.1  
1555 mark.hamzy      1.24         env = JMPIjvm::attachThread(&jv);
1556 schuur          1.1  
1557 mark.hamzy      1.24         jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1558                              jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1559 mark.hamzy      1.23 
1560 schuur          1.12         JMPIjvm::checkException(env);
1561 schuur          1.1  
1562 mark.hamzy      1.24         jstring jRole = env->NewStringUTF(request->role.getCString());
1563                      
1564 schuur          1.12         JMPIjvm::checkException(env);
1565 schuur          1.1  
1566                              JMPIProvider::pm_service_op_lock op_lock(&pr);
1567                      
1568                              STAT_GETSTARTTIME;
1569                      
1570 mark.hamzy      1.24         jmethodID id = NULL;
1571                      
1572                              // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
1573                              //                                              java.lang.String               role,
1574                              //                                              boolean                        includeQualifiers,
1575                              //                                              boolean                        includeClassOrigin,
1576                              //                                              java.lang.String[]             propertyList)
1577                              //        throws org.pegasus.jmpi.CIMException
1578                              id = env->GetMethodID((jclass)pr.jProviderClass,
1579                                                    "references",
1580                                                    "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1581                      
1582                              if (id != NULL)
1583                              {
1584                                  eMethodFound = METHOD_DIRECTOR;
1585                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_DIRECTOR."<<PEGASUS_STD(endl));
1586                              }
1587                      
1588                              if (id == NULL)
1589                              {
1590                                  env->ExceptionClear();
1591 mark.hamzy      1.24 
1592                                  // public abstract java.util.Vector references (org.pegasus.jmpi.CIMObjectPath assocName,
1593                                  //                                              org.pegasus.jmpi.CIMObjectPath pathName,
1594                                  //                                              java.lang.String               role,
1595                                  //                                              boolean                        includeQualifiers,
1596                                  //                                              boolean                        includeClassOrigin,
1597                                  //                                              java.lang.String[]             propertyList)
1598                                  //        throws org.pegasus.jmpi.CIMException
1599                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1600                                                        "references",
1601                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1602                      
1603                                  if (id != NULL)
1604                                  {
1605                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1606                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1607                                  }
1608                              }
1609 schuur          1.12 
1610 mark.hamzy      1.24         if (id == NULL)
1611                              {
1612                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
1613 mark.hamzy      1.23         }
1614 mark.hamzy      1.24 
1615 schuur          1.1          JMPIjvm::checkException(env);
1616                      
1617 mark.hamzy      1.24         jPropertyList = getList(jv,env,request->propertyList);
1618 schuur          1.13 
1619 mark.hamzy      1.24         switch (eMethodFound)
1620                              {
1621                              case METHOD_DIRECTOR:
1622                              {
1623                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1624                                                                                        id,
1625                                                                                        jAssociationName,
1626                                                                                        jRole,
1627                                                                                        false,
1628                                                                                        false,
1629                                                                                        jPropertyList);
1630 mark.hamzy      1.23             JMPIjvm::checkException(env);
1631                      
1632                                  STAT_PMS_PROVIDEREND;
1633                      
1634                                  handler.processing();
1635                                  if (jVec) {
1636 mark.hamzy      1.24                 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1637 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1638                      
1639 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1640                      
1641 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1642                      
1643 mark.hamzy      1.24                     jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
1644 mark.hamzy      1.23 
1645                                          JMPIjvm::checkException(env);
1646                      
1647 mark.hamzy      1.24                     CIMInstance         *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1648                                          CIMClass             cls = pr._cimom_handle->getClass(context,
1649                                                                                                request->nameSpace,
1650                                                                                                ci->getClassName(),
1651                                                                                                false,
1652                                                                                                true,
1653                                                                                                true,
1654                                                                                                CIMPropertyList());
1655                                          const CIMObjectPath& op  = ci->getPath();
1656                                          CIMObjectPath        iop = ci->buildPath(cls);
1657                      
1658 mark.hamzy      1.23                     iop.setNameSpace(op.getNameSpace());
1659                                          ci->setPath(iop);
1660 schuur          1.13 
1661 mark.hamzy      1.23                     handler.deliver(*ci);
1662                                      }
1663                                  }
1664                                  handler.complete();
1665 mark.hamzy      1.24             break;
1666 mark.hamzy      1.23         }
1667 schuur          1.1  
1668 mark.hamzy      1.24         case METHOD_SNIA_PROVIDER20:
1669                              {
1670                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &resultPath);
1671                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
1672                      
1673                                  JMPIjvm::checkException(env);
1674                      
1675                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1676                                                                                        id,
1677                                                                                        jAssociationName,
1678                                                                                        jPathName,
1679                                                                                        jRole,
1680                                                                                        false,
1681                                                                                        false,
1682                                                                                        jPropertyList);
1683                                  JMPIjvm::checkException(env);
1684                      
1685                                  STAT_PMS_PROVIDEREND;
1686                      
1687                                  handler.processing();
1688                                  if (jVec) {
1689 mark.hamzy      1.24                 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1690                                          JMPIjvm::checkException(env);
1691                      
1692                                          jobject jInst=env->GetObjectArrayElement(jVec,i);
1693                      
1694                                          JMPIjvm::checkException(env);
1695                      
1696                                          jint jCi = env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst);
1697                      
1698                                          JMPIjvm::checkException(env);
1699                      
1700                                          CIMInstance         *ci  = DEBUG_ConvertJavaToC (jint, CIMInstance*, jCi);
1701                                          CIMClass             cls = pr._cimom_handle->getClass(context,
1702                                                                                                request->nameSpace,
1703                                                                                                ci->getClassName(),
1704                                                                                                false,
1705                                                                                                true,
1706                                                                                                true,
1707                                                                                                CIMPropertyList());
1708                                          const CIMObjectPath& op  = ci->getPath();
1709                                          CIMObjectPath        iop = ci->buildPath(cls);
1710 schuur          1.1  
1711 mark.hamzy      1.24                     iop.setNameSpace(op.getNameSpace());
1712                                          ci->setPath(iop);
1713 schuur          1.12 
1714 mark.hamzy      1.24                     handler.deliver(*ci);
1715                                      }
1716                                  }
1717                                  handler.complete();
1718                                  break;
1719                              }
1720 mark.hamzy      1.23 
1721 mark.hamzy      1.24         case METHOD_UNKNOWN:
1722                              {
1723                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
1724                                  break;
1725                              }
1726 mark.hamzy      1.23         }
1727 schuur          1.1      }
1728                          HandlerCatch(handler);
1729 schuur          1.12 
1730                          if (env) JMPIjvm::detachThread();
1731                      
1732 schuur          1.1      PEG_METHOD_EXIT();
1733                      
1734                          return(response);
1735                      }
1736                      
1737                      Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
1738                      {
1739 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleReferenceNamesRequest");
1740                      
1741                          HandlerIntro(ReferenceNames,message,request,response,handler,Array<CIMObjectPath>());
1742 schuur          1.1  
1743 mark.hamzy      1.24     typedef enum {
1744                             METHOD_UNKNOWN = 0,
1745                             METHOD_DIRECTOR,
1746                             METHOD_SNIA_PROVIDER20,
1747                          } METHOD_VERSION;
1748                          METHOD_VERSION   eMethodFound  = METHOD_UNKNOWN;
1749                          JNIEnv          *env           = NULL;
1750 schuur          1.13 
1751 schuur          1.1      try {
1752                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1753                                  "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1754                                  System::getHostName(),
1755                                  request->nameSpace.getString(),
1756                                  request->objectName.getClassName().getString());
1757                      
1758 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));
1759                      
1760 schuur          1.1          // make target object path
1761                              CIMObjectPath objectPath(
1762                                  System::getHostName(),
1763                                  request->nameSpace,
1764                                  request->objectName.getClassName());
1765                      
1766                              objectPath.setKeyBindings(request->objectName.getKeyBindings());
1767                      
1768                              CIMObjectPath resultPath(
1769                                  System::getHostName(),
1770                                  request->nameSpace,
1771                                  request->resultClass.getString());
1772                      
1773                              // resolve provider name
1774 kumpf           1.2          ProviderName name = _resolveProviderName(
1775                                  request->operationContext.get(ProviderIdContainer::NAME));
1776 schuur          1.1  
1777                              // get cached or load new provider module
1778                              JMPIProvider::OpProviderHolder ph =
1779                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1780                      
1781                              // convert arguments
1782                              OperationContext context;
1783                      
1784 schuur          1.11         context.insert(request->operationContext.get(IdentityContainer::NAME));
1785                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1786                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1787 schuur          1.1  
1788 mark.hamzy      1.24         JMPIProvider &pr = ph.GetProvider();
1789 schuur          1.1  
1790 mark.hamzy      1.24         PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,"Calling provider.referenceNames: " + pr.getName());
1791 schuur          1.1  
1792 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleReferenceNamesRequest: Calling provider referenceNames: "<<pr.getName()<<", role: "<<request->role<<", aCls: "<<request->resultClass<<PEGASUS_STD(endl));
1793 schuur          1.12 
1794 mark.hamzy      1.24         JvmVector *jv = 0;
1795                      
1796                              env = JMPIjvm::attachThread(&jv);
1797 schuur          1.1  
1798 mark.hamzy      1.24         jint    jAssociationNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1799                              jobject jAssociationName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jAssociationNameRef);
1800 schuur          1.1  
1801 mark.hamzy      1.23         JMPIjvm::checkException(env);
1802 schuur          1.11 
1803 mark.hamzy      1.24         jstring jRole = env->NewStringUTF(request->role.getCString());
1804                      
1805 mark.hamzy      1.23         JMPIjvm::checkException(env);
1806 schuur          1.1  
1807                              JMPIProvider::pm_service_op_lock op_lock(&pr);
1808                      
1809                              STAT_GETSTARTTIME;
1810                      
1811 mark.hamzy      1.24         jmethodID id = NULL;
1812                      
1813                              // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
1814                              //                                                  java.lang.String               role)
1815                              //        throws org/pegasus/jmpi/CIMException
1816                              id = env->GetMethodID((jclass)pr.jProviderClass,
1817                                                    "referenceNames",
1818                                                    "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
1819                      
1820                              if (id != NULL)
1821                              {
1822                                  eMethodFound = METHOD_DIRECTOR;
1823                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_DIRECTOR."<<PEGASUS_STD(endl));
1824                              }
1825                      
1826                              if (id == NULL)
1827                              {
1828                                  env->ExceptionClear();
1829                      
1830                                  // public abstract java.util.Vector referenceNames (org.pegasus.jmpi.CIMObjectPath assocName,
1831                                  //                                                  org.pegasus.jmpi.CIMObjectPath pathName,
1832 mark.hamzy      1.24             //                                                  java.lang.String               role)
1833                                  //        throws org/pegasus/jmpi/CIMException
1834                                  id = env->GetMethodID((jclass)pr.jProviderClass,
1835                                                        "referenceNames",
1836                                                        "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
1837                      
1838                                  if (id != NULL)
1839                                  {
1840                                      eMethodFound = METHOD_SNIA_PROVIDER20;
1841                                      DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found METHOD_SNIA_PROVIDER20."<<PEGASUS_STD(endl));
1842                                  }
1843                              }
1844 schuur          1.11 
1845 mark.hamzy      1.24         if (id == NULL)
1846                              {
1847                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: found no method!"<<PEGASUS_STD(endl));
1848 mark.hamzy      1.23         }
1849 mark.hamzy      1.24 
1850 schuur          1.1          JMPIjvm::checkException(env);
1851                      
1852 mark.hamzy      1.24         switch (eMethodFound)
1853                              {
1854                              case METHOD_DIRECTOR:
1855                              {
1856                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1857                                                                                        id,
1858                                                                                        jAssociationName,
1859                                                                                        jRole);
1860 mark.hamzy      1.23             JMPIjvm::checkException(env);
1861                      
1862                                  STAT_PMS_PROVIDEREND;
1863                      
1864                                  handler.processing();
1865                                  if (jVec) {
1866 mark.hamzy      1.24                 for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1867 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1868                      
1869 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1870                      
1871 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1872                      
1873 mark.hamzy      1.24                     jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
1874 mark.hamzy      1.23 
1875                                          JMPIjvm::checkException(env);
1876                      
1877 mark.hamzy      1.24                     CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
1878                      
1879 mark.hamzy      1.23                     handler.deliver(*cop);
1880                                      }
1881                                  }
1882                                  handler.complete();
1883 mark.hamzy      1.24             break;
1884 mark.hamzy      1.23         }
1885 mark.hamzy      1.24 
1886                              case METHOD_SNIA_PROVIDER20:
1887                              {
1888                                  jint    jPathNameRef = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &resultPath);
1889                                  jobject jPathName    = env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jPathNameRef);
1890                      
1891                                  JMPIjvm::checkException(env);
1892                      
1893                                  jobjectArray jVec=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,
1894                                                                                        id,
1895                                                                                        jAssociationName,
1896                                                                                        jPathName,
1897                                                                                        jRole);
1898 mark.hamzy      1.23             JMPIjvm::checkException(env);
1899                      
1900                                  STAT_PMS_PROVIDEREND;
1901 schuur          1.13 
1902 mark.hamzy      1.23             handler.processing();
1903 mark.hamzy      1.24             if (jVec) {
1904                                      for (int i=0,m=env->GetArrayLength(jVec); i<m; i++) {
1905 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1906 schuur          1.13 
1907 mark.hamzy      1.24                     jobject jInst=env->GetObjectArrayElement(jVec,i);
1908                      
1909 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1910 schuur          1.13 
1911 mark.hamzy      1.24                     jint jCop = env->CallIntMethod(jInst,JMPIjvm::jv.CIMObjectPathCInst);
1912 schuur          1.1  
1913 mark.hamzy      1.23                     JMPIjvm::checkException(env);
1914 schuur          1.1  
1915 mark.hamzy      1.24                     CIMObjectPath *cop  = DEBUG_ConvertJavaToC (jint, CIMObjectPath*, jCop);
1916                      
1917 mark.hamzy      1.23                     handler.deliver(*cop);
1918                                      }
1919                                  }
1920                                  handler.complete();
1921 mark.hamzy      1.24             break;
1922                              }
1923                      
1924                              case METHOD_UNKNOWN:
1925                              {
1926                                  DDD (PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleAssociatorsRequest: should not be here!"<<PEGASUS_STD(endl));
1927                                  break;
1928                              }
1929 mark.hamzy      1.23         }
1930 schuur          1.1      }
1931                          HandlerCatch(handler);
1932 schuur          1.11 
1933                          if (env) JMPIjvm::detachThread();
1934                      
1935 schuur          1.1      PEG_METHOD_EXIT();
1936                      
1937                          return(response);
1938                      }
1939                      
1940                      Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
1941                      {
1942 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleInvokeMethodRequest");
1943                      
1944                          HandlerIntroMethod(InvokeMethod,message,request,response,handler);
1945 schuur          1.1  
1946 schuur          1.11     JNIEnv *env=NULL;
1947 schuur          1.13     Boolean mode24=false;
1948                      
1949 schuur          1.1      try {
1950                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1951                                  "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0  Name space: $1  Class name: $2",
1952                                  System::getHostName(),
1953                                  request->nameSpace.getString(),
1954                                  request->instanceName.getClassName().getString());
1955                      
1956 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));
1957                      
1958 schuur          1.1          // make target object path
1959                              CIMObjectPath objectPath(
1960                                  System::getHostName(),
1961                                  request->nameSpace,
1962                                  request->instanceName.getClassName(),
1963                                  request->instanceName.getKeyBindings());
1964                      
1965                              // resolve provider name
1966 kumpf           1.2          ProviderName name = _resolveProviderName(
1967                                  request->operationContext.get(ProviderIdContainer::NAME));
1968 schuur          1.1  
1969                              // get cached or load new provider module
1970                              JMPIProvider::OpProviderHolder ph =
1971                                  providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1972                      
1973                              // convert arguments
1974                              OperationContext context;
1975                      
1976 schuur          1.11         context.insert(request->operationContext.get(IdentityContainer::NAME));
1977                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1978                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1979 schuur          1.1  
1980 mark.hamzy      1.23         JMPIProvider & pr=ph.GetProvider();
1981 schuur          1.1  
1982                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1983                                  "Calling provider.invokeMethod: " + pr.getName());
1984                      
1985 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleInvokeMethodRequest: Calling provider invokeMethod: "<<pr.getName()<<PEGASUS_STD(endl));
1986                              JvmVector *jv;
1987 schuur          1.11         env=JMPIjvm::attachThread(&jv);
1988                      
1989 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &objectPath);
1990                      
1991                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
1992                              JMPIjvm::checkException(env);
1993 schuur          1.11 
1994                              jstring jMethod=env->NewStringUTF(request->methodName.getString().getCString());
1995 mark.hamzy      1.23         JMPIjvm::checkException(env);
1996 schuur          1.11 
1997 schuur          1.1          STAT_GETSTARTTIME;
1998                      
1999 schuur          1.11         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod",
2000                                 "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
2001 mark.hamzy      1.23            "Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
2002 schuur          1.13 
2003 mark.hamzy      1.23         if (id==NULL) {
2004 schuur          1.13            env->ExceptionClear();
2005 mark.hamzy      1.23             id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod",
2006 schuur          1.13               "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
2007 mark.hamzy      1.23               "[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
2008 schuur          1.13            JMPIjvm::checkException(env);
2009 mark.hamzy      1.23             mode24=true;
2010                              }
2011 schuur          1.11         JMPIjvm::checkException(env);
2012                      
2013 mark.hamzy      1.23         if (!mode24) {
2014                                  jobject jVecIn=env->NewObject(jv->VectorClassRef,jv->VectorNew);
2015                                  JMPIjvm::checkException(env);
2016                                  for (int i=0,m=request->inParameters.size(); i<m; i++) {
2017                                      const CIMParamValue &parm = request->inParameters[i];
2018                                      const CIMValue       v    = parm.getValue();
2019                                      CIMProperty         *p    = new CIMProperty(parm.getParameterName(),v,v.getArraySize());
2020                                      jint                 jObj = DEBUG_ConvertCToJava (CIMProperty*, jint, p);
2021                      
2022                                      jobject prop=env->NewObject(jv->CIMPropertyClassRef,jv->CIMPropertyNewI,jObj);
2023                      
2024                                      env->CallVoidMethod(jVecIn,jv->VectorAddElement,prop);
2025                                   }
2026                      
2027                                  jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
2028                                  JMPIjvm::checkException(env);
2029                      
2030                                  jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jVecIn,jVecOut);
2031                                  JMPIjvm::checkException(env);
2032                      
2033                                  STAT_PMS_PROVIDEREND;
2034 mark.hamzy      1.23 
2035                                  handler.processing();
2036                      
2037                                  jint      jv = env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst);
2038                                  CIMValue *v  = DEBUG_ConvertJavaToC (jint, CIMValue*, jv);
2039                      
2040                                  handler.deliver(*v);
2041 schuur          1.13 
2042 mark.hamzy      1.23             for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++) {
2043                                      JMPIjvm::checkException(env);
2044 schuur          1.13 
2045 mark.hamzy      1.23                 jobject jProp=env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
2046                                      JMPIjvm::checkException(env);
2047 schuur          1.13 
2048 mark.hamzy      1.23                 jint         jp = env->CallIntMethod(jProp,JMPIjvm::jv.PropertyCInst);
2049                                      CIMProperty *p  = DEBUG_ConvertJavaToC (jint, CIMProperty*, jp);
2050 schuur          1.13 
2051 mark.hamzy      1.23                 JMPIjvm::checkException(env);
2052 schuur          1.1  
2053 mark.hamzy      1.23                 handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
2054                                  }
2055 schuur          1.1  
2056 mark.hamzy      1.23             handler.complete();
2057                              }
2058 schuur          1.13         else {
2059 mark.hamzy      1.23             Uint32 m=request->inParameters.size();
2060 schuur          1.11 
2061 mark.hamzy      1.23             jobjectArray jArIn=(jobjectArray)env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
2062 schuur          1.13            for (Uint32 i=0; i<m; i++) {
2063 mark.hamzy      1.23               CIMParamValue *parm = new CIMParamValue(request->inParameters[i]);
2064                                    jint           jObj = DEBUG_ConvertCToJava (CIMParamValue*, jint, parm);
2065                                    jobject        jArg = env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,jObj);
2066                      
2067 schuur          1.13               env->SetObjectArrayElement(jArIn,i,jArg);
2068 mark.hamzy      1.23             }
2069                      
2070                                  jobjectArray jArOut=(jobjectArray)env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
2071                      
2072                                  jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jArIn,jArOut);
2073                                  JMPIjvm::checkException(env);
2074                      
2075                                  STAT_PMS_PROVIDEREND;
2076                      
2077                                  handler.processing();
2078 schuur          1.1  
2079 mark.hamzy      1.23             jint      jv = env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst);
2080                                  CIMValue *v  = DEBUG_ConvertJavaToC (jint, CIMValue*, jv);
2081                      
2082                                  handler.deliver(*v);
2083                      
2084                                  for (int i=0; i<24; i++) {
2085                                      jobject jArg=env->GetObjectArrayElement(jArOut,i);
2086                                      JMPIjvm::checkException(env);
2087 schuur          1.13 
2088 mark.hamzy      1.23                 if (jArg==NULL) break;
2089 schuur          1.13 
2090 mark.hamzy      1.23                 jint           jp = env->CallIntMethod(jArg,JMPIjvm::jv.ArgumentCInst);
2091                                      CIMParamValue *p  = DEBUG_ConvertJavaToC (jint, CIMParamValue*, jp);
2092 schuur          1.13 
2093 mark.hamzy      1.23                 JMPIjvm::checkException(env);
2094 schuur          1.13 
2095 mark.hamzy      1.23                 handler.deliverParamValue(*p);
2096 schuur          1.13            }
2097 mark.hamzy      1.23 
2098 schuur          1.13            handler.complete();
2099 mark.hamzy      1.23         }
2100 schuur          1.1      }
2101                          HandlerCatch(handler);
2102 schuur          1.11 
2103                          if (env) JMPIjvm::detachThread();
2104                      
2105 schuur          1.1      PEG_METHOD_EXIT();
2106                      
2107 schuur          1.11     return(response);
2108 schuur          1.1  }
2109 mark.hamzy      1.23 
2110 schuur          1.1  int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
2111                                                        String& providerName, String& location)
2112                      {
2113                          Uint32 pos = pInstance.findProperty(CIMName ("Name"));
2114                          pInstance.getProperty(pos).getValue().get(providerName);
2115                      
2116                          pos = pmInstance.findProperty(CIMName ("Location"));
2117                          pmInstance.getProperty(pos).getValue().get(location);
2118                          return 0;
2119                      }
2120                      
2121                      Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
2122                      {
2123 konrad.r        1.15     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
2124 schuur          1.1  
2125 mark.hamzy      1.23     HandlerIntroInd(CreateSubscription,message,request,response,handler);
2126                      
2127 schuur          1.12     JNIEnv *env=NULL;
2128 schuur          1.1      try {
2129                              const CIMObjectPath &x=request->subscriptionInstance.getPath();
2130                      
2131 schuur          1.12         String providerName,providerLocation;
2132                              CIMInstance req_provider, req_providerModule;
2133                              ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
2134                              req_provider = pidc.getProvider();
2135                              req_providerModule = pidc.getModule();
2136                              LocateIndicationProviderNames(req_provider, req_providerModule,providerName,providerLocation);
2137 schuur          1.1  
2138                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2139                                  "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
2140                                  System::getHostName(),
2141                                  request->nameSpace.getString(),
2142                                  providerName);
2143                      
2144 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
2145                      
2146 schuur          1.1          String fileName = resolveFileName(providerLocation);
2147                      
2148                              // get cached or load new provider module
2149                              JMPIProvider::OpProviderHolder ph =
2150                                  providerManager.getProvider(fileName, providerName, String::EMPTY);
2151                      
2152                              indProvRecord *prec=NULL;
2153 schuur          1.12         provTab.lookup(providerName,prec);
2154 mark.hamzy      1.23         if (prec)
2155                                  prec->count++;
2156 schuur          1.1          else {
2157 schuur          1.12            prec=new indProvRecord();
2158                                 provTab.insert(providerName,prec);
2159                              }
2160 schuur          1.1  
2161 carolann.graves 1.21         //
2162                              //  Save the provider instance from the request
2163                              //
2164                              ph.GetProvider ().setProviderInstance (req_provider);
2165                      
2166 schuur          1.1          indSelectRecord *srec=new indSelectRecord();
2167                              const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
2168 schuur          1.12         selxTab.insert(sPath.toString(),srec);
2169 schuur          1.1  
2170                              // convert arguments
2171                              OperationContext *context=new OperationContext();
2172                      
2173 mark.hamzy      1.23         if (prec->ctx==NULL) {
2174 schuur          1.12            prec->ctx=context;
2175 mark.hamzy      1.23         }
2176 schuur          1.12 
2177                              context->insert(request->operationContext.get(IdentityContainer::NAME));
2178                              context->insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2179                              context->insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2180                              context->insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
2181                              context->insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
2182                              context->insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
2183 schuur          1.1  
2184                              CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
2185                      
2186 schuur          1.12         SubscriptionFilterConditionContainer sub_cntr =  request->operationContext.get
2187                                      (SubscriptionFilterConditionContainer::NAME);
2188                      
2189 konrad.r        1.22         JMPIProvider & pr=ph.GetProvider();
2190                      
2191                      		CIMOMHandleQueryContext *qcontext=new CIMOMHandleQueryContext(CIMNamespaceName(request->nameSpace.getString()),
2192                      																	  *pr._cimom_handle);
2193                      
2194 konrad.r        1.20         CMPI_SelectExp *eSelx=new CMPI_SelectExp(*context,
2195 konrad.r        1.22 			qcontext,
2196 konrad.r        1.20 			request->query,
2197                                      	sub_cntr.getQueryLanguage());
2198 konrad.r        1.22 
2199 schuur          1.12         srec->eSelx=eSelx;
2200 konrad.r        1.22 	 	srec->qContext=qcontext;
2201 schuur          1.1  
2202                      
2203                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2204                                  "Calling provider.createSubscriptionRequest: " + pr.getName());
2205                      
2206 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleCreateSubscriptionRequest: Calling provider createSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
2207 schuur          1.1  
2208                              for(Uint32 i = 0, n = request->classNames.size(); i < n; i++) {
2209                                  CIMObjectPath className(
2210                                      System::getHostName(),
2211                                      request->nameSpace,
2212                                      request->classNames[i]);
2213                                  eSelx->classNames.append(className);
2214                              }
2215                      
2216                              CIMPropertyList propertyList = request->propertyList;
2217 schuur          1.12         if (!propertyList.isNull()) {
2218 schuur          1.1             Array<CIMName> p=propertyList.getPropertyNameArray();
2219                                 int pCount=p.size();
2220                                 eSelx->props=(const char**)malloc((1+pCount)*sizeof(char*));
2221                                 for (int i=0; i<pCount; i++) {
2222                                    eSelx->props[i]=strdup(p[i].getString().getCString());
2223 mark.hamzy      1.23             }
2224 schuur          1.1             eSelx->props[pCount]=NULL;
2225                              }
2226                      
2227 mark.hamzy      1.23         JvmVector *jv;
2228 schuur          1.12         env=JMPIjvm::attachThread(&jv);
2229                      
2230 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
2231                      
2232                              jobject jSel=env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jObj);
2233                              JMPIjvm::checkException(env);
2234                      
2235                              jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
2236                      
2237                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
2238                              JMPIjvm::checkException(env);
2239 schuur          1.12 
2240                              jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString());
2241 mark.hamzy      1.23         JMPIjvm::checkException(env);
2242 schuur          1.1  
2243                              JMPIProvider::pm_service_op_lock op_lock(&pr);
2244                      
2245                              STAT_GETSTARTTIME;
2246                      
2247 schuur          1.12         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"activateFilter",
2248                                 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
2249 mark.hamzy      1.23            "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
2250 schuur          1.12         JMPIjvm::checkException(env);
2251                      
2252                              env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType,
2253 mark.hamzy      1.23            jRef,(jboolean)0);
2254 schuur          1.12         JMPIjvm::checkException(env);
2255 schuur          1.1  
2256 carolann.graves 1.21         //
2257                              //  Increment count of current subscriptions for this provider
2258                              //
2259                              if (ph.GetProvider ().testIfZeroAndIncrementSubscriptions ())
2260                              {
2261                                  //
2262                                  //  If there were no current subscriptions before the increment,
2263                                  //  the first subscription has been created
2264                                  //  Call the provider's enableIndications method
2265                                  //
2266                                  if (_subscriptionInitComplete)
2267                                  {
2268                                      prec->enabled = true;
2269                                      CIMRequestMessage * request = 0;
2270                                      CIMResponseMessage * response = 0;
2271                                      prec->handler = new EnableIndicationsResponseHandler
2272                                          (request, response, req_provider, _indicationCallback);
2273                                  }
2274                              }
2275                      
2276 schuur          1.1         STAT_PMS_PROVIDEREND;
2277                      
2278                          }
2279                          HandlerCatch(handler);
2280 schuur          1.12 
2281 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
2282                      
2283 schuur          1.1      PEG_METHOD_EXIT();
2284                      
2285                          return(response);
2286                      }
2287                      
2288                      Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
2289                      {
2290                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
2291                      
2292 mark.hamzy      1.23     HandlerIntroInd(DeleteSubscription,message,request,response,handler);
2293                      
2294 schuur          1.12     JNIEnv *env=NULL;
2295 schuur          1.1      try {
2296 schuur          1.12         String providerName,providerLocation;
2297                              CIMInstance req_provider, req_providerModule;
2298                              ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
2299                              req_provider = pidc.getProvider();
2300                              req_providerModule = pidc.getModule();
2301 se.gupta        1.9  
2302 schuur          1.12         LocateIndicationProviderNames(req_provider, req_providerModule,
2303                                 providerName,providerLocation);
2304 schuur          1.1  
2305                              Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
2306                                  "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
2307                                  System::getHostName(),
2308                                  request->nameSpace.getString(),
2309                                  providerName);
2310                      
2311 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: hostname = "<<System::getHostName()<<", namespace = "<<request->nameSpace.getString()<<", providername = "<<providerName<<PEGASUS_STD(endl));
2312                      
2313 schuur          1.1          String fileName = resolveFileName(providerLocation);
2314                      
2315                              // get cached or load new provider module
2316                              JMPIProvider::OpProviderHolder ph =
2317                                  providerManager.getProvider(fileName, providerName, String::EMPTY);
2318                      
2319                              indProvRecord *prec=NULL;
2320 schuur          1.12         provTab.lookup(providerName,prec);
2321                              if (--prec->count<=0) {
2322                                 provTab.remove(providerName);
2323                                 prec=NULL;
2324                              }
2325 schuur          1.1  
2326                              indSelectRecord *srec=NULL;
2327                              const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
2328 schuur          1.12         String sPathString=sPath.toString();
2329                              selxTab.lookup(sPathString,srec);
2330 schuur          1.1  
2331                              CMPI_SelectExp *eSelx=srec->eSelx;
2332 mark.hamzy      1.23         CIMOMHandleQueryContext *qContext=srec->qContext;
2333 konrad.r        1.22 
2334 schuur          1.12         selxTab.remove(sPathString);
2335 schuur          1.1  
2336 schuur          1.12         // convert arguments
2337 schuur          1.1          OperationContext context;
2338                      
2339 schuur          1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
2340                              context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
2341                              context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
2342                              context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
2343                              context.insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
2344                      
2345 schuur          1.1          CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
2346                      
2347 schuur          1.12         JMPIProvider & pr=ph.GetProvider();
2348 schuur          1.1  
2349                              PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
2350                                  "Calling provider.deleteSubscriptionRequest: " + pr.getName());
2351                      
2352 mark.hamzy      1.23         DDD(PEGASUS_STD(cout)<<"--- JMPIProviderManager::handleDeleteSubscriptionRequest: Calling provider deleteSubscriptionRequest: "<<pr.getName()<<PEGASUS_STD(endl));
2353 schuur          1.1  
2354 mark.hamzy      1.23         JvmVector *jv;
2355 schuur          1.12         env=JMPIjvm::attachThread(&jv);
2356                      
2357 mark.hamzy      1.23         jint jObj = DEBUG_ConvertCToJava (CMPI_SelectExp*, jint, eSelx);
2358                      
2359                              jobject jSel=env->NewObject(jv->SelectExpClassRef,jv->SelectExpNewI,jObj);
2360                              JMPIjvm::checkException(env);
2361                      
2362                              jObj = DEBUG_ConvertCToJava (CIMObjectPath*, jint, &eSelx->classNames[0]);
2363                      
2364                              jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,jv->CIMObjectPathNewI,jObj);
2365                              JMPIjvm::checkException(env);
2366 schuur          1.12 
2367                              jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString());
2368 mark.hamzy      1.23         JMPIjvm::checkException(env);
2369 schuur          1.12 
2370 schuur          1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
2371                      
2372                              STAT_GETSTARTTIME;
2373                      
2374 schuur          1.12         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deActivateFilter",
2375                                 "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
2376 mark.hamzy      1.23            "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
2377 schuur          1.12         JMPIjvm::checkException(env);
2378 schuur          1.1  
2379 schuur          1.12         env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType,
2380 mark.hamzy      1.23            jRef,(jboolean)(prec==NULL));
2381 schuur          1.12         JMPIjvm::checkException(env);
2382 schuur          1.1  
2383 carolann.graves 1.21         //
2384                              //  Decrement count of current subscriptions for this provider
2385                              //
2386                              if (ph.GetProvider ().decrementSubscriptionsAndTestIfZero ())
2387                              {
2388                                  //
2389                                  //  If there are no current subscriptions after the decrement,
2390                                  //  the last subscription has been deleted
2391                                  //  Call the provider's disableIndications method
2392                                  //
2393                                  if (_subscriptionInitComplete)
2394                                  {
2395                                      prec->enabled = false;
2396                                      if (prec->handler) delete prec->handler;
2397                                      prec->handler = NULL;
2398                                  }
2399                              }
2400                      
2401 schuur          1.1         STAT_PMS_PROVIDEREND;
2402                      
2403 schuur          1.12        delete eSelx;
2404 mark.hamzy      1.23        delete qContext;
2405                             delete srec;
2406 schuur          1.12 
2407 schuur          1.1      }
2408                          HandlerCatch(handler);
2409 schuur          1.12 
2410 mark.hamzy      1.23     if (env) JMPIjvm::detachThread();
2411                      
2412 schuur          1.1      PEG_METHOD_EXIT();
2413                      
2414                          return(response);
2415                      }
2416                      
2417                      Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
2418                      {
2419                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
2420                      
2421                          CIMDisableModuleRequestMessage * request =
2422                              dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
2423                      
2424                          PEGASUS_ASSERT(request != 0);
2425                      
2426                          // get provider module name
2427                          String moduleName;
2428                          CIMInstance mInstance = request->providerModule;
2429                          Uint32 pos = mInstance.findProperty(CIMName ("Name"));
2430                      
2431                          if(pos != PEG_NOT_FOUND)
2432                          {
2433 schuur          1.1          mInstance.getProperty(pos).getValue().get(moduleName);
2434                          }
2435                      
2436                          Boolean disableProviderOnly = request->disableProviderOnly;
2437                      
2438                          Array<Uint16> operationalStatus;
2439 kumpf           1.2      // Assume success.
2440 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
2441 schuur          1.1  
2442 kumpf           1.2      //
2443 schuur          1.1      // Unload providers
2444 kumpf           1.2      //
2445 schuur          1.1      Array<CIMInstance> _pInstances = request->providers;
2446                      
2447                          CIMDisableModuleResponseMessage * response =
2448                              new CIMDisableModuleResponseMessage(
2449                              request->messageId,
2450                              CIMException(),
2451                              request->queueIds.copyAndPop(),
2452                              operationalStatus);
2453                      
2454                          PEGASUS_ASSERT(response != 0);
2455                      
2456                          // preserve message key
2457                          response->setKey(request->getKey());
2458                      
2459                          //
2460                          //  Set HTTP method in response from request
2461                          //
2462                          response->setHttpMethod (request->getHttpMethod ());
2463                      
2464                          PEG_METHOD_EXIT();
2465                      
2466 schuur          1.1      return(response);
2467                      }
2468                      
2469                      Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
2470                      {
2471                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
2472                      
2473                          CIMEnableModuleRequestMessage * request =
2474                              dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
2475                      
2476                          PEGASUS_ASSERT(request != 0);
2477                      
2478                          Array<Uint16> operationalStatus;
2479 kumpf           1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2480 schuur          1.1  
2481                          CIMEnableModuleResponseMessage * response =
2482                              new CIMEnableModuleResponseMessage(
2483                              request->messageId,
2484                              CIMException(),
2485                              request->queueIds.copyAndPop(),
2486                              operationalStatus);
2487                      
2488                          PEGASUS_ASSERT(response != 0);
2489                      
2490                          // preserve message key
2491                          response->setKey(request->getKey());
2492                      
2493                          //  Set HTTP method in response from request
2494                          response->setHttpMethod (request->getHttpMethod ());
2495                      
2496                          PEG_METHOD_EXIT();
2497                      
2498                          return(response);
2499                      }
2500                      
2501 schuur          1.1  Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
2502                      {
2503                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
2504                      
2505                          CIMStopAllProvidersRequestMessage * request =
2506                              dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
2507                      
2508                          PEGASUS_ASSERT(request != 0);
2509                      
2510                          CIMStopAllProvidersResponseMessage * response =
2511                              new CIMStopAllProvidersResponseMessage(
2512                              request->messageId,
2513                              CIMException(),
2514                              request->queueIds.copyAndPop());
2515                      
2516                          PEGASUS_ASSERT(response != 0);
2517                      
2518                          // preserve message key
2519                          response->setKey(request->getKey());
2520                      
2521                          //  Set HTTP method in response from request
2522 schuur          1.1      response->setHttpMethod (request->getHttpMethod ());
2523                      
2524                          // tell the provider manager to shutdown all the providers
2525                          providerManager.shutdownAllProviders();
2526                      
2527                          PEG_METHOD_EXIT();
2528                      
2529                          return(response);
2530                      }
2531                      
2532 kumpf           1.4  Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
2533                      {
2534                          PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
2535                      
2536                          HandlerIntroInit(InitializeProvider,message,request,response,handler);
2537                      
2538                          try
2539                          {
2540                              // resolve provider name
2541 mark.hamzy      1.23         ProviderName name = _resolveProviderName(
2542                                 request->operationContext.get(ProviderIdContainer::NAME));
2543 kumpf           1.4  
2544                              // get cached or load new provider module
2545                              JMPIProvider::OpProviderHolder ph =
2546 mark.hamzy      1.23             providerManager.getProvider(name.getPhysicalName(),
2547                                     name.getLogicalName(), String::EMPTY);
2548 kumpf           1.4  
2549                          }
2550                          HandlerCatch(handler);
2551                      
2552                          PEG_METHOD_EXIT();
2553                      
2554                          return(response);
2555                      }
2556                      
2557 carolann.graves 1.21 Message * JMPIProviderManager::handleSubscriptionInitCompleteRequest
2558                          (const Message * message)
2559                      {
2560                          PEG_METHOD_ENTER (TRC_PROVIDERMANAGER,
2561                           "JMPIProviderManager::handleSubscriptionInitCompleteRequest");
2562                      
2563                          CIMSubscriptionInitCompleteRequestMessage * request =
2564                              dynamic_cast <CIMSubscriptionInitCompleteRequestMessage *>
2565                                  (const_cast <Message *> (message));
2566                      
2567                          PEGASUS_ASSERT (request != 0);
2568                      
2569                          CIMSubscriptionInitCompleteResponseMessage * response =
2570                              dynamic_cast <CIMSubscriptionInitCompleteResponseMessage *>
2571                                  (request->buildResponse ());
2572                      
2573                          PEGASUS_ASSERT (response != 0);
2574                      
2575                          //
2576                          //  Set indicator
2577                          //
2578 carolann.graves 1.21     _subscriptionInitComplete = true;
2579                      
2580                          //
2581                          //  For each provider that has at least one subscription, call
2582                          //  provider's enableIndications method
2583                          //
2584                          Array <JMPIProvider *> enableProviders;
2585                          enableProviders = providerManager.getIndicationProvidersToEnable ();
2586                      
2587                          Uint32 numProviders = enableProviders.size ();
2588                          for (Uint32 i = 0; i < numProviders; i++)
2589                          {
2590                              try
2591                              {
2592                                  CIMInstance provider;
2593                                  provider = enableProviders [i]->getProviderInstance ();
2594                      
2595                                  //
2596                                  //  Get cached or load new provider module
2597                                  //
2598                                  JMPIProvider::OpProviderHolder ph = providerManager.getProvider
2599 carolann.graves 1.21                 (enableProviders [i]->getModule ()->getFileName (),
2600                                       enableProviders [i]->getName ());
2601                      
2602                                  indProvRecord * prec = NULL;
2603                                  provTab.lookup (enableProviders [i]->getName (), prec);
2604                                  if (prec)
2605                                  {
2606                                      prec->enabled = true;
2607                                      CIMRequestMessage * request = 0;
2608                                      CIMResponseMessage * response = 0;
2609                                      prec->handler = new EnableIndicationsResponseHandler
2610                                          (request, response, provider, _indicationCallback);
2611                                  }
2612                              }
2613                              catch (CIMException & e)
2614                              {
2615                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2616                                      "CIMException: " + e.getMessage ());
2617                              }
2618                              catch (Exception & e)
2619                              {
2620 carolann.graves 1.21             PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2621                                      "Exception: " + e.getMessage ());
2622                              }
2623                              catch(...)
2624                              {
2625                                  PEG_TRACE_STRING (TRC_PROVIDERMANAGER, Tracer::LEVEL2,
2626                                      "Unknown error in handleSubscriptionInitCompleteRequest");
2627                              }
2628                          }
2629                      
2630                          PEG_METHOD_EXIT ();
2631                          return (response);
2632                      }
2633                      
2634 schuur          1.1  Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
2635                      {
2636 mark.hamzy      1.23     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,"JMPIProviderManager::handleUnsupportedRequest");
2637                      
2638 konrad.r        1.16     CIMRequestMessage* request =
2639                              dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
2640                          PEGASUS_ASSERT(request != 0 );
2641                      
2642                          CIMResponseMessage* response = request->buildResponse();
2643                          response->cimException =
2644                              PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
2645 schuur          1.1  
2646                          PEG_METHOD_EXIT();
2647 konrad.r        1.16     return response;
2648 schuur          1.1  }
2649                      
2650 kumpf           1.2  ProviderName JMPIProviderManager::_resolveProviderName(
2651                          const ProviderIdContainer & providerId)
2652 schuur          1.1  {
2653 kumpf           1.2      String providerName;
2654                          String fileName;
2655                          String interfaceName;
2656                          CIMValue genericValue;
2657                      
2658                          genericValue = providerId.getProvider().getProperty(
2659                              providerId.getProvider().findProperty("Name")).getValue();
2660                          genericValue.get(providerName);
2661                      
2662                          genericValue = providerId.getModule().getProperty(
2663                              providerId.getModule().findProperty("Location")).getValue();
2664                          genericValue.get(fileName);
2665                          fileName = resolveFileName(fileName);
2666                      
2667                          // ATTN: This attribute is probably not required
2668                          genericValue = providerId.getModule().getProperty(
2669                              providerId.getModule().findProperty("InterfaceType")).getValue();
2670                          genericValue.get(interfaceName);
2671                      
2672                          return ProviderName(providerName, fileName, interfaceName, 0);
2673 schuur          1.1  }
2674                      
2675                      String JMPIProviderManager::resolveFileName(String fileName)
2676                      {
2677                          String name;
2678                          #if defined(PEGASUS_OS_TYPE_WINDOWS)
2679                          name = fileName; // + String(".dll");
2680                          #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
2681                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2682                          name.append(String("/") + fileName); // + String(".sl"));
2683                          #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
2684                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2685                          name.append(String("/") + fileName); // + String(".so"));
2686                          #elif defined(PEGASUS_OS_OS400)
2687                          name = filrName;
2688                          #else
2689                          name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2690                          name.append(String("/") + fileName); // + String(".so"));
2691                          #endif
2692                          return name;
2693                      }
2694 schuur          1.1  
2695                      PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2