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

   1 karl  1.17 //%2004////////////////////////////////////////////////////////////////////////
   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 schuur 1.1  //
  10             // Permission is hereby granted, free of charge, to any person obtaining a copy
  11             // of this software and associated documentation files (the "Software"), to
  12             // deal in the Software without restriction, including without limitation the
  13             // rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
  14             // sell copies of the Software, and to permit persons to whom the Software is
  15             // furnished to do so, subject to the following conditions:
  16 karl   1.17 // 
  17 schuur 1.1  // THE ABOVE COPYRIGHT NOTICE AND THIS PERMISSION NOTICE SHALL BE INCLUDED IN
  18             // ALL COPIES OR SUBSTANTIAL PORTIONS OF THE SOFTWARE. THE SOFTWARE IS PROVIDED
  19             // "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT
  20             // LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
  21             // PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
  22             // HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN
  23             // ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
  24             // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25             //
  26             //==============================================================================
  27             //
  28             // Author:      Adrian Schuur, schuur@de.ibm.com 
  29             //
  30 se.gupta 1.9  // Modified By: Seema Gupta (gseema@in.ibm.com) for PEP135
  31 schuur   1.1  //
  32               //%/////////////////////////////////////////////////////////////////////////////
  33               
  34               #include "JMPIProviderManager.h"
  35               
  36               #include "JMPIImpl.h"
  37               
  38               #include <Pegasus/Common/CIMMessage.h>
  39               #include <Pegasus/Common/OperationContext.h>
  40               #include <Pegasus/Common/Destroyer.h>
  41               #include <Pegasus/Common/Tracer.h>
  42               #include <Pegasus/Common/StatisticalData.h>
  43               #include <Pegasus/Common/Logger.h>
  44               #include <Pegasus/Common/MessageLoader.h> //l10n
  45 kumpf    1.10 #include <Pegasus/Common/Constants.h>
  46 schuur   1.1  
  47               #include <Pegasus/Config/ConfigManager.h>
  48               
  49               #include <Pegasus/ProviderManager2/ProviderName.h>
  50               #include <Pegasus/ProviderManager2/JMPI/JMPIProvider.h>
  51               #include <Pegasus/ProviderManager2/ProviderManagerService.h>
  52               
  53 schuur   1.12 #include <Pegasus/ProviderManager2/CMPI/CMPI_SelectExp.h>
  54               
  55 schuur   1.1  
  56               PEGASUS_USING_STD;
  57               PEGASUS_NAMESPACE_BEGIN
  58               
  59               int _jmpi_trace=0;
  60               
  61               #define DDD(x) if (_jmpi_trace) x;
  62               
  63               JMPIProviderManager::IndProvTab    JMPIProviderManager::provTab;
  64               JMPIProviderManager::IndSelectTab  JMPIProviderManager::selxTab;
  65               JMPIProviderManager::ProvRegistrar JMPIProviderManager::provReg;
  66               
  67               JMPIProviderManager::JMPIProviderManager(Mode m)
  68               {
  69                  mode=m;
  70                  if (getenv("JMPI_TRACE")) _jmpi_trace=1;
  71                  else _jmpi_trace=0;
  72               }
  73               
  74               JMPIProviderManager::~JMPIProviderManager(void)
  75               {
  76 schuur   1.1  }
  77               
  78 schuur   1.12 Boolean JMPIProviderManager::insertProvider(const ProviderName & name,
  79 schuur   1.1              const String &ns, const String &cn)
  80               {
  81                   String key(ns+String("::")+cn+String("::")+CIMValue(name.getCapabilitiesMask()).toString());
  82                   return provReg.insert(key,name);
  83               }
  84                        
  85               	    
  86               Message * JMPIProviderManager::processMessage(Message * request) throw()
  87               {
  88                     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
  89                       "JMPIProviderManager::processMessage()");
  90               
  91                   Message * response = 0;
  92                   
  93                   // pass the request message to a handler method based on message type
  94                   switch(request->getType())
  95                   {
  96                   case CIM_GET_INSTANCE_REQUEST_MESSAGE:
  97                       response = handleGetInstanceRequest(request);
  98               
  99                       break;
 100 schuur   1.1      case CIM_ENUMERATE_INSTANCES_REQUEST_MESSAGE:
 101                       response = handleEnumerateInstancesRequest(request);
 102               
 103                       break;
 104                   case CIM_ENUMERATE_INSTANCE_NAMES_REQUEST_MESSAGE:
 105                       response = handleEnumerateInstanceNamesRequest(request);
 106               
 107                       break;
 108                   case CIM_CREATE_INSTANCE_REQUEST_MESSAGE:
 109                       response = handleCreateInstanceRequest(request);
 110               
 111                       break;
 112                   case CIM_MODIFY_INSTANCE_REQUEST_MESSAGE:
 113                       response = handleModifyInstanceRequest(request);
 114               
 115                       break;
 116                   case CIM_DELETE_INSTANCE_REQUEST_MESSAGE:
 117                       response = handleDeleteInstanceRequest(request);
 118               
 119                       break;
 120               /*    case CIM_EXEC_QUERY_REQUEST_MESSAGE:
 121 schuur   1.1          response = handleExecuteQueryRequest(request);
 122               
 123               */        break;
 124                   case CIM_ASSOCIATORS_REQUEST_MESSAGE:
 125                       response = handleAssociatorsRequest(request);
 126               
 127                       break;
 128                   case CIM_ASSOCIATOR_NAMES_REQUEST_MESSAGE:
 129                       response = handleAssociatorNamesRequest(request);
 130               
 131                       break;
 132                   case CIM_REFERENCES_REQUEST_MESSAGE:
 133                       response = handleReferencesRequest(request);
 134               
 135                       break;
 136                   case CIM_REFERENCE_NAMES_REQUEST_MESSAGE:
 137                       response = handleReferenceNamesRequest(request);
 138               
 139                       break;
 140 schuur   1.11     case CIM_INVOKE_METHOD_REQUEST_MESSAGE:
 141 schuur   1.1          response = handleInvokeMethodRequest(request);
 142               
 143                       break;
 144 schuur   1.12     case CIM_CREATE_SUBSCRIPTION_REQUEST_MESSAGE:
 145 schuur   1.1          response = handleCreateSubscriptionRequest(request);
 146               
 147                       break;
 148 schuur   1.12 /*    case CIM_MODIFY_SUBSCRIPTION_REQUEST_MESSAGE:
 149 schuur   1.1          response = handleModifySubscriptionRequest(request);
 150                       break;
 151 schuur   1.12 */
 152 schuur   1.1      case CIM_DELETE_SUBSCRIPTION_REQUEST_MESSAGE:
 153                       response = handleDeleteSubscriptionRequest(request);
 154               
 155                       break;
 156                   case CIM_ENABLE_INDICATIONS_REQUEST_MESSAGE:
 157                       response = handleEnableIndicationsRequest(request);
 158               
 159                       break;
 160                   case CIM_DISABLE_INDICATIONS_REQUEST_MESSAGE:
 161                       response = handleDisableIndicationsRequest(request);
 162               
 163                       break;
 164 schuur   1.12 /*    case CIM_EXPORT_INDICATION_REQUEST_MESSAGE:
 165 kumpf    1.7          response = handleExportIndicationRequest(request);
 166 schuur   1.1          break;
 167 schuur   1.12 */
 168 schuur   1.1      case CIM_DISABLE_MODULE_REQUEST_MESSAGE:
 169                       response = handleDisableModuleRequest(request);
 170               
 171                       break;
 172                   case CIM_ENABLE_MODULE_REQUEST_MESSAGE:
 173                       response = handleEnableModuleRequest(request);
 174               
 175                       break;
 176                   case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE:
 177                       response = handleStopAllProvidersRequest(request);
 178               
 179 schuur   1.12         break;
 180 kumpf    1.4      case CIM_INITIALIZE_PROVIDER_REQUEST_MESSAGE:
 181               	response = handleInitializeProviderRequest(request);
 182               
 183               	break;
 184 schuur   1.1      default:
 185 konrad.r 1.14 	PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL2,
 186                       	"*** Unsupported Request "+request->getType());
 187 schuur   1.1          response = handleUnsupportedRequest(request);
 188               
 189                       break;
 190                   }
 191               
 192                   PEG_METHOD_EXIT();
 193               
 194                   return(response);
 195               }
 196               
 197 kumpf    1.6  Boolean JMPIProviderManager::hasActiveProviders()
 198               {
 199                    return providerManager.hasActiveProviders();
 200               }
 201               
 202               void JMPIProviderManager::unloadIdleProviders()
 203 schuur   1.1  {
 204 kumpf    1.6       providerManager.unloadIdleProviders();
 205 schuur   1.1  }
 206               
 207               #define STRDUPA(s,o) \
 208                  if (s) { \
 209                     o=(const char*)alloca(strlen(s)); \
 210                     strcpy((char*)(o),(s)); \
 211                  } \
 212                  else o=NULL;
 213               
 214               #define CHARS(cstring) (char*)(strlen(cstring)?(const char*)cstring:NULL)
 215               
 216               
 217               #define HandlerIntroBase(type,type1,message,request,response,handler,respType) \
 218                   CIM##type##RequestMessage * request = \
 219                       dynamic_cast<CIM##type##RequestMessage *>(const_cast<Message *>(message)); \
 220                   PEGASUS_ASSERT(request != 0); \
 221                   CIM##type##ResponseMessage * response = \
 222                       new CIM##type##ResponseMessage( \
 223                       request->messageId, \
 224                       CIMException(), \
 225                       request->queueIds.copyAndPop() \
 226 schuur   1.1          respType \
 227                   PEGASUS_ASSERT(response != 0); \
 228                   response->setKey(request->getKey()); \
 229                   response->setHttpMethod(request->getHttpMethod()); \
 230                   type1##ResponseHandler handler(request, response);
 231               
 232               #define VOIDINTRO );
 233               #define NOVOIDINTRO(type) ,type);
 234               #define METHODINTRO ,CIMValue(), Array<CIMParamValue>(), request->methodName );
 235               
 236               
 237               #define HandlerIntroVoid(type,message,request,response,handler) \
 238                    HandlerIntroBase(type,type,message,request,response,handler,VOIDINTRO)
 239               
 240               #define HandlerIntroMethod(type,message,request,response,handler) \
 241                    HandlerIntroBase(type,type,message,request,response,handler,METHODINTRO)
 242               
 243               #define HandlerIntroInd(type,message,request,response,handler) \
 244                    HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 245               
 246 kumpf    1.4  #define HandlerIntroInit(type,message,request,response,handler) \
 247                    HandlerIntroBase(type,Operation,message,request,response,handler,VOIDINTRO)
 248               
 249 schuur   1.1  #define HandlerIntro(type,message,request,response,handler,respType) \
 250                    HandlerIntroBase(type,type,message,request,response,handler,NOVOIDINTRO(respType))
 251               
 252               #define HandlerCatch(handler) \
 253                   catch(CIMException & e)  \
 254                   { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 255                               "Exception: " + e.getMessage()); \
 256                       handler.setStatus(e.getCode(), e.getContentLanguages(), e.getMessage()); \
 257                   } \
 258                   catch(Exception & e) \
 259                   { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 260                               "Exception: " + e.getMessage()); \
 261                       handler.setStatus(CIM_ERR_FAILED, e.getContentLanguages(), e.getMessage()); \
 262                   } \
 263                   catch(...) \
 264                   { PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4, \
 265                               "Exception: Unknown"); \
 266                       handler.setStatus(CIM_ERR_FAILED, "Unknown error."); \
 267                   }
 268               
 269 schuur   1.13 static jobjectArray getList(JvmVector *jv, JNIEnv *env, CIMPropertyList &list)
 270               {
 271                   Uint32 s=list.size();
 272                   jobjectArray pl=NULL;
 273                   if (s) {
 274                      jstring initial=env->NewString(NULL,0);
 275                      pl=env->NewObjectArray(s,jv->StringClassRef,initial);
 276                      for (Uint32 i=0; i<s; i++) {
 277                          env->SetObjectArrayElement
 278                             (pl,i,env->NewStringUTF(list[i].getString().getCString()));
 279                      }
 280                   }
 281                   return pl;
 282               }
 283 schuur   1.1  
 284               Message * JMPIProviderManager::handleGetInstanceRequest(const Message * message) throw()
 285               {
 286                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 287                       "JMPIProviderManager::handleGetInstanceRequest");
 288               
 289                   HandlerIntro(GetInstance,message,request,response,handler,CIMInstance());
 290               
 291                   JNIEnv *env=NULL;
 292 schuur   1.13     Boolean mode24=false;
 293                   CIMPropertyList propertyList;
 294                   jobjectArray pl=NULL;
 295               
 296 schuur   1.1      try {
 297               	Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 298                           "JMPIProviderManager::handleGetInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 299                           System::getHostName(),
 300                           request->nameSpace.getString(),
 301                           request->instanceName.getClassName().getString());
 302               
 303                       // make target object path
 304                       CIMObjectPath objectPath(
 305                           System::getHostName(),
 306                           request->nameSpace,
 307                           request->instanceName.getClassName(),
 308                           request->instanceName.getKeyBindings());
 309               
 310                       // resolve provider name
 311 kumpf    1.2          ProviderName name = _resolveProviderName(
 312                           request->operationContext.get(ProviderIdContainer::NAME));
 313 schuur   1.1  
 314                       // get cached or load new provider module
 315                       JMPIProvider::OpProviderHolder ph = providerManager.getProvider(name.getPhysicalName(),
 316               	                                name.getLogicalName());
 317                       OperationContext context;
 318               
 319               	// forward request
 320               	JMPIProvider & pr=ph.GetProvider();
 321               
 322                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 323                           "Calling provider.getInstance: " + pr.getName());
 324               
 325 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::getInstance"<<endl);
 326 schuur   1.1  
 327                       JvmVector *jv;
 328                       JNIEnv *env=JMPIjvm::attachThread(&jv);
 329                       JMPIjvm::checkException(env);
 330                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 331               	               jv->CIMObjectPathNewI,(jint)&objectPath);
 332                       JMPIjvm::checkException(env);
 333               
 334                       CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 335               	                       request->instanceName.getClassName(),
 336                                              false,true,true,CIMPropertyList());
 337                       JMPIjvm::checkException(env);
 338 schuur   1.13         jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls);
 339 schuur   1.1          JMPIjvm::checkException(env);
 340               
 341               	JMPIProvider::pm_service_op_lock op_lock(&pr);
 342               
 343 schuur   1.13 	jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance",
 344                          "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;Z)Lorg/pegasus/jmpi/CIMInstance;");
 345               
 346               	if (id==NULL) {
 347                          env->ExceptionClear();
 348               	   id=env->GetMethodID((jclass)pr.jProviderClass,"getInstance",
 349                             "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 350               	      "Lorg/pegasus/jmpi/CIMInstance;");
 351                          JMPIjvm::checkException(env);
 352               	   mode24=true;
 353               	   pl=getList(jv,env,request->propertyList);
 354               	}
 355                       JMPIjvm::checkException(env);
 356               
 357 schuur   1.1  	STAT_GETSTARTTIME;
 358               
 359 schuur   1.13 	jobject inst=NULL;
 360               	if (mode24) inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
 361                             request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc);
 362               	else inst=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc,true);
 363               
 364 schuur   1.1          STAT_PMS_PROVIDEREND;
 365 schuur   1.13 
 366 schuur   1.1          JMPIjvm::checkException(env);
 367 schuur   1.13         handler.processing();
 368 schuur   1.1  	if (inst) {
 369 schuur   1.11            CIMInstance *ci=((CIMInstance*)env->CallIntMethod(inst,JMPIjvm::jv.CIMInstanceCInst));
 370 schuur   1.1             handler.deliver(*ci);
 371                       }
 372                       handler.complete();
 373 schuur   1.13     }
 374 schuur   1.1      HandlerCatch(handler);
 375 schuur   1.13 
 376 schuur   1.1      if (env) JMPIjvm::detachThread();
 377 schuur   1.13 
 378 schuur   1.1      PEG_METHOD_EXIT();
 379               
 380                   return(response);
 381               }
 382               
 383               Message * JMPIProviderManager::handleEnumerateInstancesRequest(const Message * message) throw()
 384               {
 385                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 386                       "JMPIProviderManager::handleEnumerateInstanceRequest");
 387               
 388                   HandlerIntro(EnumerateInstances,message,request,response,
 389                                handler,Array<CIMInstance>());
 390                   JNIEnv *env=NULL;
 391 schuur   1.13     Boolean mode24=false;
 392                   CIMPropertyList propertyList;
 393                   jobjectArray pl=NULL;
 394               
 395                   try {
 396 schuur   1.1        Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 397                           "JMPIProviderManager::handleEnumerateInstancesRequest - Host name: $0  Name space: $1  Class name: $2",
 398                           System::getHostName(),
 399                           request->nameSpace.getString(),
 400                           request->className.getString());
 401               
 402                       // make target object path
 403                       CIMObjectPath objectPath(
 404                           System::getHostName(),
 405                           request->nameSpace,
 406                           request->className);
 407               
 408                       // resolve provider name
 409 kumpf    1.2          ProviderName name = _resolveProviderName(
 410                           request->operationContext.get(ProviderIdContainer::NAME));
 411 schuur   1.1  
 412                       // get cached or load new provider module
 413                       JMPIProvider::OpProviderHolder ph =
 414                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
 415                              String::EMPTY);
 416               
 417 schuur   1.12         // convert arguments
 418 schuur   1.1          OperationContext context;
 419               
 420 schuur   1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
 421                       context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
 422                       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
 423 schuur   1.1  
 424                       CIMPropertyList propertyList(request->propertyList);
 425               
 426                       // forward request
 427 schuur   1.12         JMPIProvider & pr=ph.GetProvider();
 428 schuur   1.1  
 429                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 430                           "Calling provider.enumerateInstances: " + pr.getName());
 431               
 432 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::enumerateInstances"<<endl);
 433 schuur   1.1  
 434 schuur   1.12 
 435                       JvmVector *jv;
 436 schuur   1.1          env=JMPIjvm::attachThread(&jv);
 437               
 438                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 439 schuur   1.12                        jv->CIMObjectPathNewI,(jint)&objectPath);
 440                       JMPIjvm::checkException(env);
 441               
 442 schuur   1.1          CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 443 schuur   1.12                                request->className,
 444 schuur   1.1                                 false,true,true,CIMPropertyList());
 445 schuur   1.12         JMPIjvm::checkException(env);
 446 schuur   1.1          jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls);
 447                       JMPIjvm::checkException(env);
 448               
 449 schuur   1.12         JMPIProvider::pm_service_op_lock op_lock(&pr);
 450 schuur   1.1  
 451 schuur   1.12         STAT_GETSTARTTIME;
 452 schuur   1.1  
 453                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances",
 454                          "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;Z)Ljava/util/Vector;");
 455 schuur   1.13 
 456               	if (id==NULL) {
 457                          env->ExceptionClear();
 458               	   id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstances",
 459                             "(Lorg/pegasus/jmpi/CIMObjectPath;ZZZ[Ljava/lang/String;Lorg/pegasus/jmpi/CIMClass;)"
 460               	      "[Lorg/pegasus/jmpi/CIMInstance;");
 461                          JMPIjvm::checkException(env);
 462               	   mode24=true;
 463               	   pl=getList(jv,env,request->propertyList);
 464               	}
 465 schuur   1.1          JMPIjvm::checkException(env);
 466               
 467 schuur   1.13         if (!mode24) {
 468               	   jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,false,jCc,true);
 469                          JMPIjvm::checkException(env);
 470               
 471                          STAT_PMS_PROVIDEREND;
 472               
 473                          handler.processing();
 474                          if (jVec) {
 475                             for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
 476                                JMPIjvm::checkException(env);
 477               	         jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
 478                                JMPIjvm::checkException(env);
 479                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
 480                                JMPIjvm::checkException(env);
 481               
 482                                handler.deliver(inst);
 483                	      }
 484                          }
 485                          handler.complete();
 486                       }
 487 schuur   1.12 
 488 schuur   1.13         else {
 489               	   jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
 490                             request->localOnly,request->includeQualifiers,request->includeClassOrigin,pl,jCc);
 491                          JMPIjvm::checkException(env);
 492 schuur   1.12 
 493 schuur   1.13            STAT_PMS_PROVIDEREND;
 494 schuur   1.12 
 495 schuur   1.13            handler.processing();
 496                          if (jAr) {
 497                             for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
 498                                JMPIjvm::checkException(env);
 499               	         jobject jInst=env->GetObjectArrayElement(jAr,i);
 500                                JMPIjvm::checkException(env);
 501                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
 502                                JMPIjvm::checkException(env);
 503 schuur   1.12 
 504 schuur   1.13                  handler.deliver(inst);
 505                	      }
 506                          }
 507                          handler.complete();
 508 schuur   1.1          }
 509                   }
 510                   HandlerCatch(handler);
 511 schuur   1.12 
 512 schuur   1.11     if (env) JMPIjvm::detachThread();
 513 schuur   1.12 
 514 schuur   1.1      PEG_METHOD_EXIT();
 515               
 516                   return(response);
 517               }
 518               
 519               Message * JMPIProviderManager::handleEnumerateInstanceNamesRequest(const Message * message) throw()
 520               {
 521                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnumerateInstanceNamesRequest");
 522               
 523                   HandlerIntro(EnumerateInstanceNames,message,request,response,
 524                                handler,Array<CIMObjectPath>()); 
 525                   JNIEnv *env=NULL;
 526 schuur   1.13     Boolean mode24=false;
 527                   CIMPropertyList propertyList;
 528                   jobjectArray pl=NULL;
 529               
 530 schuur   1.1      try {
 531                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 532                           "JMPIProviderManager::handleEnumerateInstanceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
 533                           System::getHostName(),
 534                           request->nameSpace.getString(),
 535                           request->className.getString());
 536                      
 537                      // make target object path
 538                       CIMObjectPath objectPath(
 539                           System::getHostName(),
 540                           request->nameSpace,
 541                           request->className);
 542               
 543                       // resolve provider name
 544 kumpf    1.2          ProviderName name = _resolveProviderName(
 545                           request->operationContext.get(ProviderIdContainer::NAME));
 546 schuur   1.1  
 547                       // get cached or load new provider module
 548                       JMPIProvider::OpProviderHolder ph =
 549                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName());
 550               
 551                       // convert arguments
 552                       OperationContext context;
 553               
 554 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
 555               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 556               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 557 schuur   1.1  
 558               	JMPIProvider & pr=ph.GetProvider();
 559               
 560               	PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 561                           "Calling provider.enumerateInstanceNames: " + pr.getName());
 562               
 563 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::enumerateInstanceNames"<<endl);
 564 schuur   1.1  
 565 schuur   1.12 
 566 schuur   1.1  	JvmVector *jv;
 567                       env=JMPIjvm::attachThread(&jv);
 568               
 569                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 570               	               jv->CIMObjectPathNewI,(jint)&objectPath);        
 571               	JMPIjvm::checkException(env);
 572 schuur   1.12 
 573 schuur   1.1          CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
 574               	                       request->className,
 575                                              false,true,true,CIMPropertyList());
 576                       JMPIjvm::checkException(env);
 577                       jobject jCc=env->NewObject(jv->CIMClassClassRef,jv->CIMClassNewI,(jint)&cls);
 578                       JMPIjvm::checkException(env);
 579               
 580               	JMPIProvider::pm_service_op_lock op_lock(&pr);
 581               
 582               	STAT_GETSTARTTIME;
 583               
 584                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"enumInstances",
 585                          "(Lorg/pegasus/jmpi/CIMObjectPath;ZLorg/pegasus/jmpi/CIMClass;)Ljava/util/Vector;");
 586 schuur   1.13 
 587               	if (id==NULL) {
 588                          env->ExceptionClear();
 589               	   id=env->GetMethodID((jclass)pr.jProviderClass,"enumerateInstanceNames",
 590                             "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMClass;)"
 591               	      "[Lorg/pegasus/jmpi/CIMObjectPath;");
 592                          JMPIjvm::checkException(env);
 593               	   mode24=true;
 594               	}
 595 schuur   1.1          JMPIjvm::checkException(env);
 596               
 597 schuur   1.13         if (!mode24) {
 598               	   jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,true,jCc);
 599                          JMPIjvm::checkException(env);
 600               
 601                          STAT_PMS_PROVIDEREND;
 602               
 603                          handler.processing();
 604               	   if (jVec) {
 605               	      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
 606                                JMPIjvm::checkException(env);
 607                                jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
 608                                JMPIjvm::checkException(env);
 609                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
 610                                   (jCop,JMPIjvm::jv.CIMObjectPathCInst));
 611                                JMPIjvm::checkException(env);
 612                                handler.deliver(*cop);
 613                             }
 614 schuur   1.1   	   }
 615 schuur   1.13            handler.complete();
 616                       }
 617                       else {
 618                          jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jCc);
 619                          JMPIjvm::checkException(env);
 620               
 621                          STAT_PMS_PROVIDEREND;
 622               
 623                          handler.processing();
 624                          if (jAr) {
 625                             for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
 626                                JMPIjvm::checkException(env);
 627                                jobject jCop=env->GetObjectArrayElement(jAr,i);
 628                                JMPIjvm::checkException(env);
 629                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
 630                                   (jCop,JMPIjvm::jv.CIMObjectPathCInst));
 631                                JMPIjvm::checkException(env);
 632                                handler.deliver(*cop);
 633                             }
 634                          }
 635                          handler.complete();
 636 schuur   1.1          }
 637                   }
 638                   HandlerCatch(handler);
 639                   
 640                   if (env) JMPIjvm::detachThread();	
 641               
 642                   PEG_METHOD_EXIT();
 643               
 644                   return(response);
 645               }
 646               
 647               Message * JMPIProviderManager::handleCreateInstanceRequest(const Message * message) throw()
 648               {
 649                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 650                      "JMPIProviderManager::handleCreateInstanceRequest");
 651               
 652                   HandlerIntro(CreateInstance,message,request,response,
 653                                handler,CIMObjectPath());
 654                   JNIEnv *env=NULL;
 655                   try {
 656                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 657 schuur   1.1              "JMPIProviderManager::handleCreateInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 658                           System::getHostName(),
 659                           request->nameSpace.getString(),
 660                           request->newInstance.getPath().getClassName().getString());
 661               
 662                       // make target object path
 663                       CIMObjectPath objectPath(
 664                           System::getHostName(),
 665                           request->nameSpace,
 666                           request->newInstance.getPath().getClassName(),
 667                           request->newInstance.getPath().getKeyBindings());
 668               
 669                       // resolve provider name
 670 kumpf    1.2          ProviderName name = _resolveProviderName(
 671                           request->operationContext.get(ProviderIdContainer::NAME));
 672 schuur   1.1  
 673                       // get cached or load new provider module
 674                       JMPIProvider::OpProviderHolder ph =
 675                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(),
 676               	           String::EMPTY);
 677               
 678                       // convert arguments
 679                       OperationContext context;
 680               
 681 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
 682               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 683               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 684 schuur   1.1  
 685                       // forward request
 686                	JMPIProvider & pr=ph.GetProvider();
 687               
 688                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 689                           "Calling provider.createInstance: " +
 690                           ph.GetProvider().getName());
 691               
 692 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::createInstances"<<endl);
 693 schuur   1.12 
 694 schuur   1.1  	JvmVector *jv;
 695                       env=JMPIjvm::attachThread(&jv);
 696               
 697                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 698               	               jv->CIMObjectPathNewI,(jint)&objectPath);        
 699               	JMPIjvm::checkException(env);
 700                       jobject jInst=env->NewObject(jv->CIMInstanceClassRef,
 701               	               jv->CIMInstanceNewI,(jint)&request->newInstance);        
 702               	JMPIjvm::checkException(env);
 703               
 704               	JMPIProvider::pm_service_op_lock op_lock(&pr);
 705               
 706               	STAT_GETSTARTTIME;
 707               
 708                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"createInstance",
 709                          "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)Lorg/pegasus/jmpi/CIMObjectPath;");
 710                       JMPIjvm::checkException(env);
 711               
 712                       jobject jCop=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jInst);
 713                       
 714                       STAT_PMS_PROVIDEREND;
 715 schuur   1.1  	
 716                       JMPIjvm::checkException(env);
 717                       handler.processing();       
 718               	if (jCop) {
 719                          CIMObjectPath cop=*((CIMObjectPath*)env->CallIntMethod(jCop,JMPIjvm::jv.CIMObjectPathCInst)); 
 720                          handler.deliver(cop);
 721                       }
 722                       handler.complete();
 723                   }
 724                   HandlerCatch(handler);
 725                   
 726                   if (env) JMPIjvm::detachThread();
 727                   
 728                   PEG_METHOD_EXIT();
 729               
 730                   return(response);
 731               }
 732               
 733               Message * JMPIProviderManager::handleModifyInstanceRequest(const Message * message) throw()
 734               {
 735                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 736 schuur   1.1         "JMPIProviderManager::handleModifyInstanceRequest");
 737               
 738                   HandlerIntroVoid(ModifyInstance,message,request,response,handler);
 739                   JNIEnv *env=NULL;
 740 schuur   1.13     Boolean mode24=false;
 741                   CIMPropertyList propertyList;
 742                   jobjectArray pl=NULL;
 743               
 744 schuur   1.1      try {
 745                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 746 konrad.r 1.15             "JMPIProviderManager::handleModifyInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 747 schuur   1.1              System::getHostName(),
 748                           request->nameSpace.getString(),
 749                           request->modifiedInstance.getPath().getClassName().getString());
 750               
 751                       // make target object path
 752                       CIMObjectPath objectPath(
 753                           System::getHostName(),
 754                           request->nameSpace,
 755                           request->modifiedInstance.getPath ().getClassName(),
 756                           request->modifiedInstance.getPath ().getKeyBindings());
 757               
 758                       // resolve provider name
 759 kumpf    1.2          ProviderName name = _resolveProviderName(
 760                           request->operationContext.get(ProviderIdContainer::NAME));
 761 schuur   1.1  
 762                       // get cached or load new provider module
 763                       JMPIProvider::OpProviderHolder ph =
 764                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
 765               
 766                       // convert arguments
 767                       OperationContext context;
 768               
 769 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
 770               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 771               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 772 schuur   1.1  
 773                       CIMPropertyList propertyList(request->propertyList);
 774               
 775                       // forward request
 776                	JMPIProvider & pr=ph.GetProvider();
 777               
 778                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 779                           "Calling provider.modifyInstance: " + pr.getName());
 780               
 781 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::modifyInstance"<<endl);
 782 schuur   1.1  
 783               	JvmVector *jv;
 784                       env=JMPIjvm::attachThread(&jv);
 785               
 786                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 787 schuur   1.12 	               jv->CIMObjectPathNewI,(jint)&objectPath);
 788 schuur   1.1  	JMPIjvm::checkException(env);
 789                       jobject jInst=env->NewObject(jv->CIMInstanceClassRef,
 790               	               jv->CIMInstanceNewI,(jint)&request->modifiedInstance);        
 791               	JMPIjvm::checkException(env);
 792               
 793               	JMPIProvider::pm_service_op_lock op_lock(&pr);
 794               
 795               	STAT_GETSTARTTIME;
 796               
 797                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance",
 798                          "(Lorg/pegasus/jmpi/CIMObjectPath;Lorg/pegasus/jmpi/CIMInstance;)V");
 799 schuur   1.13 
 800               	if (id==NULL) {
 801                          env->ExceptionClear();
 802                          id=env->GetMethodID((jclass)pr.jProviderClass,"setInstance",
 803                             "(Lorg/pegasus/jmpi/CIMObjectPath;Z[Ljava/lang/String)V");
 804                          JMPIjvm::checkException(env);
 805                          mode24=true;
 806                          pl=getList(jv,env,request->propertyList);
 807                       }
 808 schuur   1.1          JMPIjvm::checkException(env);
 809               
 810 schuur   1.13         if (!mode24) env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst);
 811                       else env->CallVoidMethod((jobject)pr.jProvider,id,jRef,jInst,pl);
 812               
 813 schuur   1.1          STAT_PMS_PROVIDEREND;
 814               	
 815                       JMPIjvm::checkException(env);
 816                       JMPIjvm::detachThread();
 817                   }
 818                   HandlerCatch(handler);
 819                   
 820                   if (env) JMPIjvm::detachThread();
 821                   
 822                   PEG_METHOD_EXIT();
 823               
 824                   return(response);
 825               }
 826               
 827               Message * JMPIProviderManager::handleDeleteInstanceRequest(const Message * message) throw()
 828               {
 829                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 830                      "JMPIProviderManager::handleDeleteInstanceRequest");
 831               
 832                   HandlerIntroVoid(DeleteInstance,message,request,response,
 833                                handler);
 834 schuur   1.1      JNIEnv *env=NULL;
 835                   try {
 836                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 837 konrad.r 1.15             "JMPIProviderManager::handleDeleteInstanceRequest - Host name: $0  Name space: $1  Class name: $2",
 838 schuur   1.1              System::getHostName(),
 839                           request->nameSpace.getString(),
 840                           request->instanceName.getClassName().getString());
 841               
 842                       // make target object path
 843                       CIMObjectPath objectPath(
 844                           System::getHostName(),
 845                           request->nameSpace,
 846                           request->instanceName.getClassName(),
 847                           request->instanceName.getKeyBindings());
 848               
 849                       // resolve provider name
 850 kumpf    1.2          ProviderName name = _resolveProviderName(
 851                           request->operationContext.get(ProviderIdContainer::NAME));
 852 schuur   1.1  
 853                       // get cached or load new provider module
 854                       JMPIProvider::OpProviderHolder ph =
 855                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
 856               
 857                       // convert arguments
 858                       OperationContext context;
 859               
 860 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
 861               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 862               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 863 schuur   1.1  
 864                       // forward request
 865                	JMPIProvider & pr=ph.GetProvider();
 866               
 867                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 868                           "Calling provider.deleteInstance: " + pr.getName());
 869               
 870 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::modifyInstance"<<endl);
 871 schuur   1.1  
 872               	JvmVector *jv;
 873                       env=JMPIjvm::attachThread(&jv);
 874               
 875                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 876               	               jv->CIMObjectPathNewI,(jint)&objectPath);        
 877               	JMPIjvm::checkException(env);
 878               
 879               	JMPIProvider::pm_service_op_lock op_lock(&pr);
 880               
 881               	STAT_GETSTARTTIME;
 882               
 883                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deleteInstance",
 884                          "(Lorg/pegasus/jmpi/CIMObjectPath;)V");
 885                       JMPIjvm::checkException(env);
 886               
 887                       env->CallVoidMethod((jobject)pr.jProvider,id,jRef);
 888                       
 889                       STAT_PMS_PROVIDEREND;
 890               	
 891                       JMPIjvm::checkException(env);
 892 schuur   1.1          JMPIjvm::detachThread();
 893                   }
 894                   HandlerCatch(handler);
 895                   
 896                   if (env) JMPIjvm::detachThread();
 897                   PEG_METHOD_EXIT();
 898               
 899                   return(response);
 900               }
 901               
 902               
 903               Message * JMPIProviderManager::handleAssociatorsRequest(const Message * message) throw()
 904               {
 905                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
 906                      "JMPIProviderManager::handleAssociatorsRequest");
 907               
 908                   HandlerIntro(Associators,message,request,response,
 909                                handler,Array<CIMObject>());
 910                   JNIEnv *env=NULL;
 911 schuur   1.13     Boolean mode24=false;
 912                   CIMPropertyList propertyList;
 913                   jobjectArray pl=NULL;
 914               
 915 schuur   1.1      try {
 916                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
 917                           "JMPIProviderManager::handleAssociatorsRequest - Host name: $0  Name space: $1  Class name: $2",
 918                           System::getHostName(),
 919                           request->nameSpace.getString(),
 920                           request->objectName.getClassName().getString());
 921               
 922                       // make target object path
 923                       CIMObjectPath objectPath(
 924                           System::getHostName(),
 925                           request->nameSpace,
 926                           request->objectName.getClassName());
 927               
 928                       objectPath.setKeyBindings(request->objectName.getKeyBindings());
 929               
 930                       CIMObjectPath assocPath(
 931                           System::getHostName(),
 932                           request->nameSpace,
 933                           request->assocClass.getString());
 934               
 935                       // resolve provider name
 936 kumpf    1.2          ProviderName name = _resolveProviderName(
 937                           request->operationContext.get(ProviderIdContainer::NAME));
 938 schuur   1.1  
 939                       // get cached or load new provider module
 940                       JMPIProvider::OpProviderHolder ph =
 941                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
 942               
 943                      // convert arguments
 944                       OperationContext context;
 945               
 946 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
 947               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
 948               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
 949 schuur   1.1  
 950                       // forward request
 951                	JMPIProvider & pr=ph.GetProvider();
 952               
 953                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
 954                           "Calling provider.associators: " + pr.getName());
 955               
 956 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::associators"<<
 957 schuur   1.1  	               " role: >"<<request->role<<"< aCls "<<
 958 kumpf    1.2  	   request->assocClass<<endl);
 959 schuur   1.1  
 960               	JvmVector *jv;
 961                       env=JMPIjvm::attachThread(&jv);
 962               
 963                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
 964 schuur   1.12 	               jv->CIMObjectPathNewI,(jint)&objectPath);
 965 schuur   1.1  	JMPIjvm::checkException(env);
 966               
 967                       jstring rClass=env->NewStringUTF(request->resultClass.getString().getCString());
 968                       jstring rRole=env->NewStringUTF(request->role.getCString());
 969                       jstring resRole=env->NewStringUTF(request->resultRole.getCString());
 970               	JMPIjvm::checkException(env);
 971               
 972                       JMPIProvider::pm_service_op_lock op_lock(&pr);
 973               
 974                       STAT_GETSTARTTIME;
 975               
 976                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"associators",
 977                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
 978               	   "Ljava/lang/String;ZZ[Ljava/lang/String;)Ljava/util/Vector;");
 979 schuur   1.12 
 980 schuur   1.13 	if (id==NULL) {
 981                          env->ExceptionClear();
 982               	   id=env->GetMethodID((jclass)pr.jProviderClass,"associators",
 983                            "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
 984               	     "Ljava/lang/String;ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
 985                          JMPIjvm::checkException(env);
 986               	   mode24=true;
 987               	}
 988 schuur   1.1          JMPIjvm::checkException(env);
 989               
 990 schuur   1.13 	pl=getList(jv,env,request->propertyList);
 991               
 992               	if (!mode24) {
 993                          jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
 994               	                 rClass,rRole,resRole,false,false,pl);
 995                          JMPIjvm::checkException(env);
 996               
 997                          STAT_PMS_PROVIDEREND;
 998 schuur   1.1  
 999 schuur   1.13            handler.processing();
1000               	   if (jVec) {
1001               	      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1002                                JMPIjvm::checkException(env);
1003               	         jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1004                                JMPIjvm::checkException(env);
1005                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
1006                                JMPIjvm::checkException(env);
1007 schuur   1.1  
1008 schuur   1.13 	         CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
1009 schuur   1.1  	             inst.getClassName(),false,true,true,CIMPropertyList());
1010 schuur   1.13                  const CIMObjectPath& op=inst.getPath();
1011                                CIMObjectPath iop=inst.buildPath(cls);
1012                                iop.setNameSpace(op.getNameSpace());
1013                                inst.setPath(iop);
1014               
1015                                handler.deliver(inst);
1016                	      }
1017               	   }
1018 schuur   1.1          }
1019 schuur   1.13 
1020               	else {
1021                          jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
1022               	                 rClass,rRole,resRole,false,false,pl);
1023                          JMPIjvm::checkException(env);
1024               
1025                          STAT_PMS_PROVIDEREND;
1026               
1027                          handler.processing();
1028               	   if (jAr) {
1029               	      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1030                                JMPIjvm::checkException(env);
1031               	         jobject jInst=env->GetObjectArrayElement(jAr,i);
1032                                JMPIjvm::checkException(env);
1033                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
1034                                JMPIjvm::checkException(env);
1035               
1036               	         CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
1037               	             inst.getClassName(),false,true,true,CIMPropertyList());
1038                                const CIMObjectPath& op=inst.getPath();
1039                                CIMObjectPath iop=inst.buildPath(cls);
1040 schuur   1.13                  iop.setNameSpace(op.getNameSpace());
1041                                inst.setPath(iop);
1042               
1043                                handler.deliver(inst);
1044                	      }
1045               	   }
1046               	}
1047 schuur   1.1          handler.complete();
1048                   }
1049                   HandlerCatch(handler);
1050 schuur   1.13 
1051                   if (env) JMPIjvm::detachThread();
1052               
1053 schuur   1.1      PEG_METHOD_EXIT();
1054               
1055                   return(response);
1056               }
1057 schuur   1.13 
1058 schuur   1.1  
1059               
1060               Message * JMPIProviderManager::handleAssociatorNamesRequest(const Message * message) throw()
1061               {
1062                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1063                      "JMPIProviderManager::handleAssociatorNamesRequest");
1064               
1065                   HandlerIntro(AssociatorNames,message,request,response,
1066                                handler,Array<CIMObjectPath>());
1067                   JNIEnv *env=NULL;
1068 schuur   1.13     Boolean mode24=false;
1069                   CIMPropertyList propertyList;
1070                   jobjectArray pl=NULL;
1071               
1072 schuur   1.1      try {
1073                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1074                           "JMPIProviderManager::handleAssociatorNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1075                           System::getHostName(),
1076                           request->nameSpace.getString(),
1077                           request->objectName.getClassName().getString());
1078               
1079                       // make target object path
1080                       CIMObjectPath objectPath(
1081                           System::getHostName(),
1082                           request->nameSpace,
1083                           request->objectName.getClassName());
1084               
1085                       objectPath.setKeyBindings(request->objectName.getKeyBindings());
1086               
1087                       CIMObjectPath assocPath(
1088                           System::getHostName(),
1089                           request->nameSpace,
1090                           request->assocClass.getString());
1091                     
1092                       // resolve provider name
1093 kumpf    1.2          ProviderName name = _resolveProviderName(
1094                           request->operationContext.get(ProviderIdContainer::NAME));
1095 schuur   1.1  
1096                       // get cached or load new provider module
1097                       JMPIProvider::OpProviderHolder ph =
1098                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1099               
1100                       // convert arguments
1101                       OperationContext context;
1102               
1103 se.gupta 1.9  		context.insert(request->operationContext.get(IdentityContainer::NAME));
1104               		context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME)); 
1105               	    context.insert(request->operationContext.get(ContentLanguageListContainer::NAME)); 
1106 schuur   1.1  
1107                       // forward request
1108                	JMPIProvider & pr=ph.GetProvider();
1109               
1110                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1111                           "Calling provider.associatorNames: " + pr.getName());
1112               
1113 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::associatorNames"<<
1114 schuur   1.1  	               " role: >"<<request->role<<"< aCls "<<
1115 kumpf    1.2  	   request->assocClass<<endl);
1116 schuur   1.1  
1117               	JvmVector *jv;
1118                       env=JMPIjvm::attachThread(&jv);
1119               
1120                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1121               	               jv->CIMObjectPathNewI,(jint)&objectPath);        
1122               	JMPIjvm::checkException(env);
1123                       
1124                       jstring rClass=env->NewStringUTF(request->resultClass.getString().getCString());
1125                       jstring rRole=env->NewStringUTF(request->role.getCString());
1126                       jstring resRole=env->NewStringUTF(request->resultRole.getCString());
1127               	JMPIjvm::checkException(env);
1128               
1129                       JMPIProvider::pm_service_op_lock op_lock(&pr);
1130               
1131                       STAT_GETSTARTTIME;
1132               
1133                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"associatorNames",
1134                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
1135               	   "Ljava/lang/String;)Ljava/util/Vector;");
1136 schuur   1.13 
1137               	if (id==NULL) {
1138                          env->ExceptionClear();
1139               	   id=env->GetMethodID((jclass)pr.jProviderClass,"associatorNames",
1140                             "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;Ljava/lang/String;"
1141               	      "Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1142                          JMPIjvm::checkException(env);
1143               	   mode24=true;
1144               	}
1145 schuur   1.1          JMPIjvm::checkException(env);
1146               
1147 schuur   1.13 	if (!mode24) {
1148                          jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
1149               	                 rClass,rRole,resRole);
1150                          JMPIjvm::checkException(env);
1151               
1152                          STAT_PMS_PROVIDEREND;
1153               
1154                          handler.processing();
1155               	   if (jVec) {
1156               	      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1157                                JMPIjvm::checkException(env);
1158               	         jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1159                                JMPIjvm::checkException(env);
1160                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
1161               	            (jCop,JMPIjvm::jv.CIMObjectPathCInst));
1162                                JMPIjvm::checkException(env);
1163                                handler.deliver(*cop);
1164                	      }
1165                          }
1166                          handler.complete();
1167               	}
1168 schuur   1.13 
1169               	else {
1170                          jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
1171 schuur   1.1  	                 rClass,rRole,resRole);
1172 schuur   1.13            JMPIjvm::checkException(env);
1173 schuur   1.1  
1174 schuur   1.13            STAT_PMS_PROVIDEREND;
1175 schuur   1.1  
1176 schuur   1.13            handler.processing();
1177               	   if (jAr) {
1178               	      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1179                                JMPIjvm::checkException(env);
1180               	         jobject jCop=env->GetObjectArrayElement(jAr,i);
1181                                JMPIjvm::checkException(env);
1182                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
1183               	            (jCop,JMPIjvm::jv.CIMObjectPathCInst));
1184                                JMPIjvm::checkException(env);
1185                                handler.deliver(*cop);
1186                	      }
1187                          }
1188                          handler.complete();
1189               	}
1190 schuur   1.1      }
1191                   HandlerCatch(handler);
1192 schuur   1.12 
1193 schuur   1.1      if (env) JMPIjvm::detachThread();	
1194 schuur   1.12 
1195 schuur   1.1      PEG_METHOD_EXIT();
1196               
1197                   return(response);
1198               }
1199               
1200               
1201               Message * JMPIProviderManager::handleReferencesRequest(const Message * message) throw()
1202               {
1203                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1204                      "JMPIProviderManager::handleReferencesRequest");
1205               
1206                   HandlerIntro(References,message,request,response,
1207                                handler,Array<CIMObject>());
1208                   JNIEnv *env=NULL;
1209 schuur   1.13     Boolean mode24=false;
1210                   CIMPropertyList propertyList;
1211                   jobjectArray pl=NULL;
1212               
1213 schuur   1.1      try {
1214                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1215 konrad.r 1.15             "JMPIProviderManager::handleReferencesRequest - Host name: $0  Name space: $1  Class name: $2",
1216 schuur   1.1              System::getHostName(),
1217                           request->nameSpace.getString(),
1218                           request->objectName.getClassName().getString());
1219               
1220                       // make target object path
1221                       CIMObjectPath objectPath(
1222                           System::getHostName(),
1223                           request->nameSpace,
1224                           request->objectName.getClassName());
1225               
1226                       objectPath.setKeyBindings(request->objectName.getKeyBindings());
1227               
1228                       CIMObjectPath resultPath(
1229                           System::getHostName(),
1230                           request->nameSpace,
1231                           request->resultClass.getString());
1232               
1233                       // resolve provider name
1234 kumpf    1.2          ProviderName name = _resolveProviderName(
1235                           request->operationContext.get(ProviderIdContainer::NAME));
1236 schuur   1.1  
1237                       // get cached or load new provider module
1238                       JMPIProvider::OpProviderHolder ph =
1239                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1240               
1241                       // convert arguments
1242                       OperationContext context;
1243               
1244 schuur   1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
1245                       context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1246                       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1247 schuur   1.1  
1248                       // forward request
1249 schuur   1.12         JMPIProvider & pr=ph.GetProvider();
1250 schuur   1.1  
1251                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1252                           "Calling provider.references: " + pr.getName());
1253               
1254 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::references"<<" role: >"<<request->role<<"< aCls "<<
1255 schuur   1.12            request->resultClass<<endl);
1256 schuur   1.1  
1257 schuur   1.12         JvmVector *jv;
1258 schuur   1.1          env=JMPIjvm::attachThread(&jv);
1259               
1260                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1261 schuur   1.12                        jv->CIMObjectPathNewI,(jint)&objectPath);
1262                       JMPIjvm::checkException(env);
1263 schuur   1.1  
1264                       jstring rRole=env->NewStringUTF(request->role.getCString());
1265 schuur   1.12         JMPIjvm::checkException(env);
1266 schuur   1.1  
1267                       JMPIProvider::pm_service_op_lock op_lock(&pr);
1268               
1269                       STAT_GETSTARTTIME;
1270               
1271                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"references",
1272                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
1273 schuur   1.12            "ZZ[Ljava/lang/String;)Ljava/util/Vector;");
1274               
1275 schuur   1.13 	if (id==NULL) {
1276                          env->ExceptionClear();
1277               	   id=env->GetMethodID((jclass)pr.jProviderClass,"references",
1278                             "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
1279                             "ZZ[Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMInstance;");
1280                          JMPIjvm::checkException(env);
1281               	   mode24=true;
1282               	}
1283 schuur   1.1          JMPIjvm::checkException(env);
1284               
1285 schuur   1.13 	pl=getList(jv,env,request->propertyList);
1286               
1287               	if (!mode24) {
1288                          jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
1289                                        rRole,false,false,pl);
1290                          JMPIjvm::checkException(env);
1291               
1292                          STAT_PMS_PROVIDEREND;
1293               
1294                          handler.processing();
1295                          if (jVec) {
1296                             for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1297                                JMPIjvm::checkException(env);
1298                                jobject jInst=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1299                                JMPIjvm::checkException(env);
1300                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
1301                                JMPIjvm::checkException(env);
1302               
1303                                CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
1304                                    inst.getClassName(),false,true,true,CIMPropertyList());
1305                                const CIMObjectPath& op=inst.getPath();
1306 schuur   1.13                  CIMObjectPath iop=inst.buildPath(cls);
1307                                iop.setNameSpace(op.getNameSpace());
1308                                inst.setPath(iop);
1309               
1310                                handler.deliver(inst);
1311                             }
1312                          }
1313                          handler.complete();
1314               	}
1315               
1316               	else {
1317                          jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,
1318                                        rRole,false,false,pl);
1319                          JMPIjvm::checkException(env);
1320 schuur   1.1  
1321 schuur   1.13            STAT_PMS_PROVIDEREND;
1322 schuur   1.1  
1323 schuur   1.13            handler.processing();
1324                          if (jAr) {
1325                             for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1326                                JMPIjvm::checkException(env);
1327                                jobject jInst=env->GetObjectArrayElement(jAr,i);
1328                                JMPIjvm::checkException(env);
1329                                CIMInstance inst=*((CIMInstance*)env->CallIntMethod(jInst,JMPIjvm::jv.CIMInstanceCInst));
1330                                JMPIjvm::checkException(env);
1331 schuur   1.12 
1332 schuur   1.13                  CIMClass cls=pr._cimom_handle->getClass(context,request->nameSpace,
1333 schuur   1.12                      inst.getClassName(),false,true,true,CIMPropertyList());
1334 schuur   1.13                  const CIMObjectPath& op=inst.getPath();
1335                                CIMObjectPath iop=inst.buildPath(cls);
1336                                iop.setNameSpace(op.getNameSpace());
1337                                inst.setPath(iop);
1338 schuur   1.12 
1339 schuur   1.13                  handler.deliver(inst);
1340                             }
1341 schuur   1.12            }
1342 schuur   1.13            handler.complete();
1343               	}
1344               
1345 schuur   1.1      }
1346                   HandlerCatch(handler);
1347 schuur   1.12 
1348                   if (env) JMPIjvm::detachThread();
1349               
1350 schuur   1.1      PEG_METHOD_EXIT();
1351               
1352                   return(response);
1353               }
1354               
1355               
1356               Message * JMPIProviderManager::handleReferenceNamesRequest(const Message * message) throw()
1357               {
1358                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1359                       "JMPIProviderManager::handleReferenceNamesRequest");
1360               
1361                   HandlerIntro(ReferenceNames,message,request,response,
1362                                handler,Array<CIMObjectPath>());
1363                   JNIEnv *env=NULL;
1364 schuur   1.13     Boolean mode24=false;
1365                   CIMPropertyList propertyList;
1366                   jobjectArray pl=NULL;
1367               
1368 schuur   1.1      try {
1369                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1370                           "JMPIProviderManager::handleReferenceNamesRequest - Host name: $0  Name space: $1  Class name: $2",
1371                           System::getHostName(),
1372                           request->nameSpace.getString(),
1373                           request->objectName.getClassName().getString());
1374               
1375                       // make target object path
1376                       CIMObjectPath objectPath(
1377                           System::getHostName(),
1378                           request->nameSpace,
1379                           request->objectName.getClassName());
1380               
1381                       objectPath.setKeyBindings(request->objectName.getKeyBindings());
1382               
1383                       CIMObjectPath resultPath(
1384                           System::getHostName(),
1385                           request->nameSpace,
1386                           request->resultClass.getString());
1387               
1388                       // resolve provider name
1389 kumpf    1.2          ProviderName name = _resolveProviderName(
1390                           request->operationContext.get(ProviderIdContainer::NAME));
1391 schuur   1.1  
1392                       // get cached or load new provider module
1393                       JMPIProvider::OpProviderHolder ph =
1394                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1395               
1396                       // convert arguments
1397                       OperationContext context;
1398               
1399 schuur   1.11         context.insert(request->operationContext.get(IdentityContainer::NAME));
1400                       context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1401                       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1402 schuur   1.1  
1403                 	JMPIProvider & pr=ph.GetProvider();
1404               
1405                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1406                           "Calling provider.referenceNames: " + pr.getName());
1407               
1408 schuur   1.12 
1409 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::referenceNames"<<" role: >"<<request->role<<"< aCls "<<
1410               	   request->resultClass<<endl);
1411 schuur   1.1  
1412               	JvmVector *jv;
1413                       env=JMPIjvm::attachThread(&jv);
1414               
1415                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1416 schuur   1.11 	               jv->CIMObjectPathNewI,(jint)&objectPath);
1417 schuur   1.1  	JMPIjvm::checkException(env);
1418 schuur   1.11 
1419 schuur   1.1          jstring rRole=env->NewStringUTF(request->role.getCString());
1420               	JMPIjvm::checkException(env);
1421               
1422                       JMPIProvider::pm_service_op_lock op_lock(&pr);
1423               
1424                       STAT_GETSTARTTIME;
1425               
1426                       jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"referenceNames",
1427                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)Ljava/util/Vector;");
1428 schuur   1.11 
1429 schuur   1.13 	if (id==NULL) {
1430                          env->ExceptionClear();
1431               	   id=env->GetMethodID((jclass)pr.jProviderClass,"referenceNames",
1432                             "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;)[Lorg/pegasus/jmpi/CIMObjectPath;");
1433                          JMPIjvm::checkException(env);
1434               	   mode24=true;
1435               	}
1436 schuur   1.1          JMPIjvm::checkException(env);
1437               
1438 schuur   1.13 	if (!mode24) {
1439                          jobject jVec=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,rRole);
1440                          JMPIjvm::checkException(env);
1441               
1442                          STAT_PMS_PROVIDEREND;
1443               
1444                          handler.processing();
1445               	   if (jVec) {
1446               	      for (int i=0,m=env->CallIntMethod(jVec,JMPIjvm::jv.VectorSize); i<m; i++) {
1447                                JMPIjvm::checkException(env);
1448               	         jobject jCop=env->CallObjectMethod(jVec,JMPIjvm::jv.VectorElementAt,i);
1449                                JMPIjvm::checkException(env);
1450                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
1451               	            (jCop,JMPIjvm::jv.CIMObjectPathCInst));
1452                                JMPIjvm::checkException(env);
1453                                handler.deliver(*cop);
1454                	      }
1455                          }
1456                          handler.complete();
1457               	}
1458               
1459 schuur   1.13 	else {
1460                          jobjectArray jAr=(jobjectArray)env->CallObjectMethod((jobject)pr.jProvider,id,jRef,rRole);
1461                          JMPIjvm::checkException(env);
1462 schuur   1.1  
1463 schuur   1.13            STAT_PMS_PROVIDEREND;
1464 schuur   1.1  
1465 schuur   1.13            handler.processing();
1466               	   if (jAr) {
1467               	      for (int i=0,m=env->GetArrayLength(jAr); i<m; i++) {
1468                                JMPIjvm::checkException(env);
1469               	         jobject jCop=env->GetObjectArrayElement(jAr,i);
1470                                JMPIjvm::checkException(env);
1471                                CIMObjectPath *cop=((CIMObjectPath*)env->CallIntMethod
1472               	            (jCop,JMPIjvm::jv.CIMObjectPathCInst));
1473                                JMPIjvm::checkException(env);
1474                                handler.deliver(*cop);
1475                	      }
1476                          }
1477                          handler.complete();
1478               	}
1479 schuur   1.1      }
1480                   HandlerCatch(handler);
1481 schuur   1.11 
1482                   if (env) JMPIjvm::detachThread();
1483               
1484 schuur   1.1      PEG_METHOD_EXIT();
1485               
1486                   return(response);
1487               }
1488               
1489               
1490               Message * JMPIProviderManager::handleInvokeMethodRequest(const Message * message) throw()
1491               {
1492                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
1493                       "JMPIProviderManager::handleInvokeMethodRequest");
1494               
1495                   HandlerIntroMethod(InvokeMethod,message,request,response,
1496                                handler);
1497 schuur   1.11     JNIEnv *env=NULL;
1498 schuur   1.13     Boolean mode24=false;
1499               
1500 schuur   1.1      try {
1501                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1502                           "JMPIProviderManager::handleInvokeMethodRequest - Host name: $0  Name space: $1  Class name: $2",
1503                           System::getHostName(),
1504                           request->nameSpace.getString(),
1505                           request->instanceName.getClassName().getString());
1506               
1507                       // make target object path
1508                       CIMObjectPath objectPath(
1509                           System::getHostName(),
1510                           request->nameSpace,
1511                           request->instanceName.getClassName(),
1512                           request->instanceName.getKeyBindings());
1513               
1514                       // resolve provider name
1515 kumpf    1.2          ProviderName name = _resolveProviderName(
1516                           request->operationContext.get(ProviderIdContainer::NAME));
1517 schuur   1.1  
1518                       // get cached or load new provider module
1519                       JMPIProvider::OpProviderHolder ph =
1520                           providerManager.getProvider(name.getPhysicalName(), name.getLogicalName(), String::EMPTY);
1521               
1522                       // convert arguments
1523                       OperationContext context;
1524               
1525 schuur   1.11         context.insert(request->operationContext.get(IdentityContainer::NAME));
1526                       context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1527                       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1528 schuur   1.1  
1529                	JMPIProvider & pr=ph.GetProvider();
1530               
1531                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1532                           "Calling provider.invokeMethod: " + pr.getName());
1533               
1534 schuur   1.11 	JvmVector *jv;
1535                       env=JMPIjvm::attachThread(&jv);
1536               
1537                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1538               	               jv->CIMObjectPathNewI,(jint)&objectPath);
1539               	JMPIjvm::checkException(env);
1540               
1541                       jstring jMethod=env->NewStringUTF(request->methodName.getString().getCString());
1542               	JMPIjvm::checkException(env);
1543               
1544 schuur   1.1          STAT_GETSTARTTIME;
1545               
1546 schuur   1.11         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod",
1547                          "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
1548               	    "Ljava/util/Vector;Ljava/util/Vector;)Lorg/pegasus/jmpi/CIMValue;");
1549 schuur   1.13 
1550               	if (id==NULL) {
1551                          env->ExceptionClear();
1552               	   id=env->GetMethodID((jclass)pr.jProviderClass,"invokeMethod",
1553                             "(Lorg/pegasus/jmpi/CIMObjectPath;Ljava/lang/String;"
1554               	      "[Lorg/pegasus/jmpi/CIMArgument;[Lorg/pegasus/jmpi/CIMArgument;)Lorg/pegasus/jmpi/CIMValue;");
1555                          JMPIjvm::checkException(env);
1556               	   mode24=true;
1557               	}
1558 schuur   1.11         JMPIjvm::checkException(env);
1559               
1560 schuur   1.13 	if (!mode24) {
1561                          jobject jVecIn=env->NewObject(jv->VectorClassRef,jv->VectorNew);
1562                          JMPIjvm::checkException(env);
1563                          for (int i=0,m=request->inParameters.size(); i<m; i++) {
1564                             const CIMParamValue & parm=request->inParameters[i];
1565               	      const CIMValue v=parm.getValue();
1566                             CIMProperty *p=new CIMProperty(parm.getParameterName(),v,v.getArraySize());
1567                             jobject prop=env->NewObject(jv->CIMPropertyClassRef,
1568               	         jv->CIMPropertyNewI,(jint)p);
1569                             env->CallVoidMethod(jVecIn,jv->VectorAddElement,prop);
1570               	   }
1571               
1572                          jobject jVecOut=env->NewObject(jv->VectorClassRef,jv->VectorNew);
1573                          JMPIjvm::checkException(env);
1574               
1575                          jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jVecIn,jVecOut);
1576                          JMPIjvm::checkException(env);
1577               
1578                          STAT_PMS_PROVIDEREND;
1579               
1580                          handler.processing();
1581 schuur   1.1  
1582 schuur   1.13            CIMValue *v=((CIMValue*)env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst));
1583               	   handler.deliver(*v);
1584 schuur   1.1  
1585 schuur   1.13            for (int i=0,m=env->CallIntMethod(jVecOut,JMPIjvm::jv.VectorSize); i<m; i++) {
1586                             JMPIjvm::checkException(env);
1587               	      jobject jProp=env->CallObjectMethod(jVecOut,JMPIjvm::jv.VectorElementAt,i);
1588                             JMPIjvm::checkException(env);
1589                             CIMProperty *p=((CIMProperty*)env->CallIntMethod(jProp,JMPIjvm::jv.PropertyCInst));
1590                             JMPIjvm::checkException(env);
1591                             handler.deliverParamValue(CIMParamValue(p->getName().getString(),p->getValue()));
1592                          }
1593                          handler.complete();
1594               	}
1595                       else {
1596               	   Uint32 m=request->inParameters.size();
1597 schuur   1.11 
1598 schuur   1.13 	   jobjectArray jArIn=env->NewObjectArray(m,jv->CIMArgumentClassRef,NULL);
1599                          for (Uint32 i=0; i<m; i++) {
1600                             CIMParamValue *parm=new CIMParamValue(request->inParameters[i]);
1601                             jobject jArg=env->NewObject(jv->CIMArgumentClassRef,jv->CIMArgumentNewI,(jint)parm);
1602                             env->SetObjectArrayElement(jArIn,i,jArg);
1603               	   }
1604               	   jobjectArray jArOut=env->NewObjectArray(24,jv->CIMArgumentClassRef,NULL);
1605 schuur   1.1  
1606 schuur   1.13            jobject jValue=env->CallObjectMethod((jobject)pr.jProvider,id,jRef,jMethod,jArIn,jArOut);
1607 schuur   1.11            JMPIjvm::checkException(env);
1608 schuur   1.13 
1609                          STAT_PMS_PROVIDEREND;
1610               
1611                          handler.processing();
1612               
1613                          CIMValue *v=((CIMValue*)env->CallIntMethod(jValue,JMPIjvm::jv.CIMValueCInst));
1614               	   handler.deliver(*v);
1615               
1616                          for (int i=0; i<24; i++) {
1617               	      jobject jArg=env->GetObjectArrayElement(jArOut,i);
1618                             JMPIjvm::checkException(env);
1619               	      if (jArg==NULL) break;
1620                             CIMParamValue *p=((CIMParamValue*)env->CallIntMethod(jArg,JMPIjvm::jv.ArgumentCInst));
1621                             JMPIjvm::checkException(env);
1622                             handler.deliverParamValue(*p);
1623                          }
1624                          handler.complete();
1625               	}
1626 schuur   1.1      }
1627                   HandlerCatch(handler);
1628 schuur   1.11 
1629                   if (env) JMPIjvm::detachThread();
1630               
1631 schuur   1.1      PEG_METHOD_EXIT();
1632               
1633 schuur   1.11     return(response);
1634 schuur   1.1  }
1635 schuur   1.12  
1636 schuur   1.1  int LocateIndicationProviderNames(const CIMInstance& pInstance, const CIMInstance& pmInstance,
1637                                                 String& providerName, String& location)
1638               {
1639                   Uint32 pos = pInstance.findProperty(CIMName ("Name"));
1640                   pInstance.getProperty(pos).getValue().get(providerName);
1641               
1642                   pos = pmInstance.findProperty(CIMName ("Location"));
1643                   pmInstance.getProperty(pos).getValue().get(location);
1644                   return 0;
1645               }
1646               
1647               Message * JMPIProviderManager::handleCreateSubscriptionRequest(const Message * message) throw()
1648               {
1649 konrad.r 1.15     PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleCreateSubscriptionRequest");
1650 schuur   1.1  
1651                   HandlerIntroInd(CreateSubscription,message,request,response,
1652                                handler);
1653 schuur   1.12     JNIEnv *env=NULL;
1654 schuur   1.1      try {
1655                       const CIMObjectPath &x=request->subscriptionInstance.getPath();
1656               
1657 schuur   1.12         String providerName,providerLocation;
1658                       CIMInstance req_provider, req_providerModule;
1659                       ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1660                       req_provider = pidc.getProvider();
1661                       req_providerModule = pidc.getModule();
1662                       LocateIndicationProviderNames(req_provider, req_providerModule,providerName,providerLocation);
1663 schuur   1.1  
1664                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1665                           "JMPIProviderManager::handleCreateSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
1666                           System::getHostName(),
1667                           request->nameSpace.getString(),
1668                           providerName);
1669               
1670                       String fileName = resolveFileName(providerLocation);
1671               
1672                       // get cached or load new provider module
1673                       JMPIProvider::OpProviderHolder ph =
1674                           providerManager.getProvider(fileName, providerName, String::EMPTY);
1675               
1676                       indProvRecord *prec=NULL;
1677 schuur   1.12         provTab.lookup(providerName,prec);
1678                       if (prec) prec->count++;
1679 schuur   1.1          else {
1680 schuur   1.12            prec=new indProvRecord();
1681                          provTab.insert(providerName,prec);
1682                       }
1683 schuur   1.1  
1684                       indSelectRecord *srec=new indSelectRecord();
1685                       const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
1686 schuur   1.12         selxTab.insert(sPath.toString(),srec);
1687 schuur   1.1  
1688                       // convert arguments
1689                       OperationContext *context=new OperationContext();
1690               
1691 schuur   1.12 	if (prec->ctx==NULL) {
1692                          prec->ctx=context;
1693               	}
1694               
1695                       context->insert(request->operationContext.get(IdentityContainer::NAME));
1696                       context->insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1697                       context->insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1698                       context->insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
1699                       context->insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
1700                       context->insert(request->operationContext.get(SubscriptionFilterConditionContainer::NAME));
1701 schuur   1.1  
1702                       CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1703               
1704 schuur   1.12         SubscriptionFilterConditionContainer sub_cntr =  request->operationContext.get
1705                               (SubscriptionFilterConditionContainer::NAME);
1706               
1707                       CMPI_SelectExp *eSelx=new CMPI_SelectExp(*context,request->query,
1708                               sub_cntr.getQueryLanguage());
1709                       srec->eSelx=eSelx;
1710 schuur   1.1  
1711 schuur   1.12         JMPIProvider & pr=ph.GetProvider();
1712 schuur   1.1  
1713                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1714                           "Calling provider.createSubscriptionRequest: " + pr.getName());
1715               
1716 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::createSubscriptionRequest"<<endl);
1717 schuur   1.1  
1718                       for(Uint32 i = 0, n = request->classNames.size(); i < n; i++) {
1719                           CIMObjectPath className(
1720                               System::getHostName(),
1721                               request->nameSpace,
1722                               request->classNames[i]);
1723                           eSelx->classNames.append(className);
1724                       }
1725               
1726                       CIMPropertyList propertyList = request->propertyList;
1727 schuur   1.12         if (!propertyList.isNull()) {
1728 schuur   1.1             Array<CIMName> p=propertyList.getPropertyNameArray();
1729                          int pCount=p.size();
1730                          eSelx->props=(const char**)malloc((1+pCount)*sizeof(char*));
1731                          for (int i=0; i<pCount; i++) {
1732                             eSelx->props[i]=strdup(p[i].getString().getCString());
1733               	   }
1734                          eSelx->props[pCount]=NULL;
1735                       }
1736               
1737 schuur   1.12 	JvmVector *jv;
1738                       env=JMPIjvm::attachThread(&jv);
1739               
1740                       jobject jSel=env->NewObject(jv->SelectExpClassRef,
1741               	               jv->SelectExpNewI,(jint)eSelx);
1742               	JMPIjvm::checkException(env);
1743               
1744                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1745               	               jv->CIMObjectPathNewI,(jint)&eSelx->classNames[0]);
1746               	JMPIjvm::checkException(env);
1747               
1748                       jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString());
1749               	JMPIjvm::checkException(env);
1750 schuur   1.1  
1751                       JMPIProvider::pm_service_op_lock op_lock(&pr);
1752               
1753                       STAT_GETSTARTTIME;
1754               
1755 schuur   1.12         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"activateFilter",
1756                          "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
1757               	    "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
1758                       JMPIjvm::checkException(env);
1759               
1760                       env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType,
1761               	   jRef,(jboolean)0);
1762                       JMPIjvm::checkException(env);
1763 schuur   1.1  
1764                      STAT_PMS_PROVIDEREND;
1765               
1766                   }
1767                   HandlerCatch(handler);
1768 schuur   1.12 
1769 schuur   1.1      PEG_METHOD_EXIT();
1770               
1771                   return(response);
1772               }
1773               
1774               Message * JMPIProviderManager::handleDeleteSubscriptionRequest(const Message * message) throw()
1775               {
1776                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDeleteSubscriptionRequest");
1777               
1778                   HandlerIntroInd(DeleteSubscription,message,request,response,
1779                                handler);
1780 schuur   1.12     JNIEnv *env=NULL;
1781 schuur   1.1      try {
1782 schuur   1.12         String providerName,providerLocation;
1783                       CIMInstance req_provider, req_providerModule;
1784                       ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1785                       req_provider = pidc.getProvider();
1786                       req_providerModule = pidc.getModule();
1787 se.gupta 1.9  
1788 schuur   1.12         LocateIndicationProviderNames(req_provider, req_providerModule,
1789                          providerName,providerLocation);
1790 schuur   1.1  
1791                       Logger::put(Logger::STANDARD_LOG, System::CIMSERVER, Logger::TRACE,
1792                           "JMPIProviderManager::handleDeleteSubscriptionRequest - Host name: $0  Name space: $1  Provider name(s): $2",
1793                           System::getHostName(),
1794                           request->nameSpace.getString(),
1795                           providerName);
1796               
1797                       String fileName = resolveFileName(providerLocation);
1798               
1799                       // get cached or load new provider module
1800                       JMPIProvider::OpProviderHolder ph =
1801                           providerManager.getProvider(fileName, providerName, String::EMPTY);
1802               
1803               
1804                       indProvRecord *prec=NULL;
1805 schuur   1.12         provTab.lookup(providerName,prec);
1806                       if (--prec->count<=0) {
1807                          provTab.remove(providerName);
1808                          prec=NULL;
1809                       }
1810 schuur   1.1  
1811                       indSelectRecord *srec=NULL;
1812                       const CIMObjectPath &sPath=request->subscriptionInstance.getPath();
1813 schuur   1.12         String sPathString=sPath.toString();
1814                       selxTab.lookup(sPathString,srec);
1815 schuur   1.1  
1816                       CMPI_SelectExp *eSelx=srec->eSelx;
1817 schuur   1.12         selxTab.remove(sPathString);
1818 schuur   1.1  
1819 schuur   1.12         // convert arguments
1820 schuur   1.1          OperationContext context;
1821               
1822 schuur   1.12         context.insert(request->operationContext.get(IdentityContainer::NAME));
1823                       context.insert(request->operationContext.get(AcceptLanguageListContainer::NAME));
1824                       context.insert(request->operationContext.get(ContentLanguageListContainer::NAME));
1825                       context.insert(request->operationContext.get(SubscriptionInstanceContainer::NAME));
1826                       context.insert(request->operationContext.get(SubscriptionLanguageListContainer::NAME));
1827               
1828 schuur   1.1          CIMObjectPath subscriptionName = request->subscriptionInstance.getPath();
1829               
1830 schuur   1.12         JMPIProvider & pr=ph.GetProvider();
1831 schuur   1.1  
1832                       PEG_TRACE_STRING(TRC_PROVIDERMANAGER, Tracer::LEVEL4,
1833                           "Calling provider.deleteSubscriptionRequest: " + pr.getName());
1834               
1835 kumpf    1.2          DDD(cerr<<"--- JMPIProviderManager::deleteSubscriptionRequest"<<endl);
1836 schuur   1.1  
1837 schuur   1.12 	JvmVector *jv;
1838                       env=JMPIjvm::attachThread(&jv);
1839               
1840                       jobject jSel=env->NewObject(jv->SelectExpClassRef,
1841               	               jv->SelectExpNewI,(jint)eSelx);
1842               	JMPIjvm::checkException(env);
1843               
1844                       jobject jRef=env->NewObject(jv->CIMObjectPathClassRef,
1845               	               jv->CIMObjectPathNewI,(jint)&eSelx->classNames[0]);
1846               	JMPIjvm::checkException(env);
1847               
1848                       jstring jType=env->NewStringUTF(request->nameSpace.getString().getCString());
1849               	JMPIjvm::checkException(env);
1850               
1851 schuur   1.1          JMPIProvider::pm_service_op_lock op_lock(&pr);
1852               
1853                       STAT_GETSTARTTIME;
1854               
1855 schuur   1.12         jmethodID id=env->GetMethodID((jclass)pr.jProviderClass,"deActivateFilter",
1856                          "(Lorg/pegasus/jmpi/SelectExp;Ljava/lang/String;"
1857               	    "Lorg/pegasus/jmpi/CIMObjectPath;Z)V");
1858                       JMPIjvm::checkException(env);
1859 schuur   1.1  
1860 schuur   1.12         env->CallVoidMethod((jobject)pr.jProvider,id,jSel,jType,
1861               	   jRef,(jboolean)(prec==NULL));
1862                       JMPIjvm::checkException(env);
1863 schuur   1.1  
1864                      STAT_PMS_PROVIDEREND;
1865               
1866 schuur   1.12        delete eSelx;
1867               
1868 schuur   1.1      }
1869                   HandlerCatch(handler);
1870 schuur   1.12 
1871 schuur   1.1      PEG_METHOD_EXIT();
1872               
1873                   return(response);
1874               }
1875               
1876               Message * JMPIProviderManager::handleEnableIndicationsRequest(const Message * message) throw()
1877               {
1878                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager:: handleEnableIndicationsRequest");
1879               
1880                   HandlerIntroInd(EnableIndications,message,request,response,
1881                                handler);
1882                   try {
1883                       String providerName,providerLocation;
1884 se.gupta 1.9  		CIMInstance req_provider, req_providerModule;
1885               		ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1886               		req_provider = pidc.getProvider();
1887               		req_providerModule = pidc.getModule();
1888               
1889               	LocateIndicationProviderNames(req_provider, req_providerModule,
1890 schuur   1.1  	   providerName,providerLocation);
1891               
1892                       indProvRecord *provRec;
1893                       if (provTab.lookup(providerName,provRec)) {
1894                          provRec->enabled=true;
1895 kumpf    1.3             provRec->handler=new EnableIndicationsResponseHandler(
1896 schuur   1.12                request, response, req_provider, _indicationCallback);
1897 schuur   1.1          }
1898               
1899                       String fileName = resolveFileName(providerLocation);
1900               
1901                       // get cached or load new provider module
1902                       JMPIProvider::OpProviderHolder ph =
1903                           providerManager.getProvider(fileName, providerName, String::EMPTY);
1904               
1905                   }
1906                   HandlerCatch(handler);
1907 schuur   1.12 
1908 schuur   1.1      PEG_METHOD_EXIT();
1909               
1910                   return(response);
1911               }
1912               
1913               Message * JMPIProviderManager::handleDisableIndicationsRequest(const Message * message) throw()
1914               {
1915                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager:: handleDisableIndicationsRequest");
1916               
1917                   HandlerIntroInd(DisableIndications,message,request,response,
1918                                handler);
1919                   try {
1920                       String providerName,providerLocation;
1921 se.gupta 1.9  		CIMInstance req_provider, req_providerModule;
1922               		ProviderIdContainer pidc = (ProviderIdContainer)request->operationContext.get(ProviderIdContainer::NAME);
1923               
1924               		req_provider = pidc.getProvider();
1925               		req_providerModule = pidc.getModule();
1926               
1927               	LocateIndicationProviderNames(req_provider, req_providerModule,
1928 schuur   1.1  	   providerName,providerLocation);
1929               
1930                       indProvRecord *provRec;
1931                       if (provTab.lookup(providerName,provRec)) {
1932                          provRec->enabled=false;
1933                          if (provRec->handler) delete provRec->handler;
1934               	   provRec->handler=NULL;
1935                       }
1936               
1937                       String fileName = resolveFileName(providerLocation);
1938               
1939                       // get cached or load new provider module
1940                       JMPIProvider::OpProviderHolder ph =
1941                           providerManager.getProvider(fileName, providerName, String::EMPTY);
1942                   }
1943                   HandlerCatch(handler);
1944 schuur   1.12 
1945 schuur   1.1      PEG_METHOD_EXIT();
1946               
1947                   return(response);
1948 schuur   1.12 }
1949 schuur   1.1  
1950               Message * JMPIProviderManager::handleDisableModuleRequest(const Message * message) throw()
1951               {
1952                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleDisableModuleRequest");
1953               
1954                   CIMDisableModuleRequestMessage * request =
1955                       dynamic_cast<CIMDisableModuleRequestMessage *>(const_cast<Message *>(message));
1956               
1957                   PEGASUS_ASSERT(request != 0);
1958               
1959                   // get provider module name
1960                   String moduleName;
1961                   CIMInstance mInstance = request->providerModule;
1962                   Uint32 pos = mInstance.findProperty(CIMName ("Name"));
1963               
1964                   if(pos != PEG_NOT_FOUND)
1965                   {
1966                       mInstance.getProperty(pos).getValue().get(moduleName);
1967                   }
1968               
1969                   Boolean disableProviderOnly = request->disableProviderOnly;
1970 schuur   1.1  
1971                   Array<Uint16> operationalStatus;
1972 kumpf    1.2      // Assume success.
1973 kumpf    1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_STOPPED);
1974 schuur   1.1  
1975 kumpf    1.2      //
1976 schuur   1.1      // Unload providers
1977 kumpf    1.2      //
1978 schuur   1.1      Array<CIMInstance> _pInstances = request->providers;
1979               
1980                   CIMDisableModuleResponseMessage * response =
1981                       new CIMDisableModuleResponseMessage(
1982                       request->messageId,
1983                       CIMException(),
1984                       request->queueIds.copyAndPop(),
1985                       operationalStatus);
1986               
1987                   PEGASUS_ASSERT(response != 0);
1988               
1989                   // preserve message key
1990                   response->setKey(request->getKey());
1991               
1992                   //
1993                   //  Set HTTP method in response from request
1994                   //
1995                   response->setHttpMethod (request->getHttpMethod ());
1996               
1997                   PEG_METHOD_EXIT();
1998               
1999 schuur   1.1      return(response);
2000               }
2001               
2002               Message * JMPIProviderManager::handleEnableModuleRequest(const Message * message) throw()
2003               {
2004                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleEnableModuleRequest");
2005               
2006                   CIMEnableModuleRequestMessage * request =
2007                       dynamic_cast<CIMEnableModuleRequestMessage *>(const_cast<Message *>(message));
2008               
2009                   PEGASUS_ASSERT(request != 0);
2010               
2011                   Array<Uint16> operationalStatus;
2012 kumpf    1.10     operationalStatus.append(CIM_MSE_OPSTATUS_VALUE_OK);
2013 schuur   1.1  
2014                   CIMEnableModuleResponseMessage * response =
2015                       new CIMEnableModuleResponseMessage(
2016                       request->messageId,
2017                       CIMException(),
2018                       request->queueIds.copyAndPop(),
2019                       operationalStatus);
2020               
2021                   PEGASUS_ASSERT(response != 0);
2022               
2023                   // preserve message key
2024                   response->setKey(request->getKey());
2025               
2026                   //  Set HTTP method in response from request
2027                   response->setHttpMethod (request->getHttpMethod ());
2028               
2029                   PEG_METHOD_EXIT();
2030               
2031                   return(response);
2032               }
2033               
2034 schuur   1.1  Message * JMPIProviderManager::handleStopAllProvidersRequest(const Message * message) throw()
2035               {
2036                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleStopAllProvidersRequest");
2037               
2038                   CIMStopAllProvidersRequestMessage * request =
2039                       dynamic_cast<CIMStopAllProvidersRequestMessage *>(const_cast<Message *>(message));
2040               
2041                   PEGASUS_ASSERT(request != 0);
2042               
2043                   CIMStopAllProvidersResponseMessage * response =
2044                       new CIMStopAllProvidersResponseMessage(
2045                       request->messageId,
2046                       CIMException(),
2047                       request->queueIds.copyAndPop());
2048               
2049                   PEGASUS_ASSERT(response != 0);
2050               
2051                   // preserve message key
2052                   response->setKey(request->getKey());
2053               
2054                   //  Set HTTP method in response from request
2055 schuur   1.1      response->setHttpMethod (request->getHttpMethod ());
2056               
2057                   // tell the provider manager to shutdown all the providers
2058                   providerManager.shutdownAllProviders();
2059               
2060                   PEG_METHOD_EXIT();
2061               
2062                   return(response);
2063               }
2064               
2065 kumpf    1.4  Message * JMPIProviderManager::handleInitializeProviderRequest(const Message * message)
2066               {
2067                   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER, "JMPIProviderManager::handleInitializeProviderRequest");
2068               
2069                   HandlerIntroInit(InitializeProvider,message,request,response,handler);
2070               
2071                   try
2072                   {
2073                       // resolve provider name
2074               	ProviderName name = _resolveProviderName(
2075               	    request->operationContext.get(ProviderIdContainer::NAME));
2076               
2077                       // get cached or load new provider module
2078                       JMPIProvider::OpProviderHolder ph =
2079                           providerManager.getProvider(name.getPhysicalName(), 
2080               		name.getLogicalName(), String::EMPTY);
2081               
2082                   }
2083                   HandlerCatch(handler);
2084               
2085                   PEG_METHOD_EXIT();
2086 kumpf    1.4  
2087                   return(response);
2088               }
2089               
2090 schuur   1.1  Message * JMPIProviderManager::handleUnsupportedRequest(const Message * message) throw()
2091               {
2092 konrad.r 1.16   PEG_METHOD_ENTER(TRC_PROVIDERMANAGER,
2093                       "JMPIProviderManager::handleUnsupportedRequest");
2094                   CIMRequestMessage* request =
2095                       dynamic_cast<CIMRequestMessage *>(const_cast<Message *>(message));
2096                   PEGASUS_ASSERT(request != 0 );
2097               
2098                   CIMResponseMessage* response = request->buildResponse();
2099                   response->cimException =
2100                       PEGASUS_CIM_EXCEPTION(CIM_ERR_NOT_SUPPORTED, String::EMPTY);
2101 schuur   1.1  
2102                   PEG_METHOD_EXIT();
2103 konrad.r 1.16     return response;
2104 schuur   1.1  }
2105               
2106 kumpf    1.2  ProviderName JMPIProviderManager::_resolveProviderName(
2107                   const ProviderIdContainer & providerId)
2108 schuur   1.1  {
2109 kumpf    1.2      String providerName;
2110                   String fileName;
2111                   String interfaceName;
2112                   CIMValue genericValue;
2113               
2114                   genericValue = providerId.getProvider().getProperty(
2115                       providerId.getProvider().findProperty("Name")).getValue();
2116                   genericValue.get(providerName);
2117               
2118                   genericValue = providerId.getModule().getProperty(
2119                       providerId.getModule().findProperty("Location")).getValue();
2120                   genericValue.get(fileName);
2121                   fileName = resolveFileName(fileName);
2122               
2123                   // ATTN: This attribute is probably not required
2124                   genericValue = providerId.getModule().getProperty(
2125                       providerId.getModule().findProperty("InterfaceType")).getValue();
2126                   genericValue.get(interfaceName);
2127               
2128                   return ProviderName(providerName, fileName, interfaceName, 0);
2129 schuur   1.1  }
2130               
2131               String JMPIProviderManager::resolveFileName(String fileName)
2132               {
2133                   String name;
2134                   #if defined(PEGASUS_OS_TYPE_WINDOWS)
2135                   name = fileName; // + String(".dll");
2136                   #elif defined(PEGASUS_OS_HPUX) && defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
2137                   name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2138                   name.append(String("/") + fileName); // + String(".sl"));
2139                   #elif defined(PEGASUS_OS_HPUX) && !defined(PEGASUS_PLATFORM_HPUX_PARISC_ACC)
2140                   name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2141                   name.append(String("/") + fileName); // + String(".so"));
2142                   #elif defined(PEGASUS_OS_OS400)
2143                   name = filrName;
2144                   #else
2145                   name = ConfigManager::getHomedPath(ConfigManager::getInstance()->getCurrentValue("providerDir"));
2146                   name.append(String("/") + fileName); // + String(".so"));
2147                   #endif
2148                   return name;
2149               }
2150 schuur   1.1  
2151               PEGASUS_NAMESPACE_END

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2