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

No CVS admin address has been configured
Powered by
ViewCVS 0.9.2