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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2