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

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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2