version 1.30, 2004/03/23 15:51:32
|
version 1.37, 2004/05/05 13:02:05
|
|
|
// Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators. | // Karl Schopmeyer(k.schopmeyer@opengroup.org) - Fix associators. |
// Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) | // Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
// Adrian Schuur, IBM (schuur@de.ibm.com) | // Adrian Schuur, IBM (schuur@de.ibm.com) |
// Dan Gorey, djgorey@us.ibm.com |
// Amit K Arora (amita@in.ibm.com) for PEP-101 |
// | // |
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
|
|
#include <Pegasus/Common/CIMMessage.h> | #include <Pegasus/Common/CIMMessage.h> |
#include <Pegasus/Common/Tracer.h> | #include <Pegasus/Common/Tracer.h> |
#include <Pegasus/Common/Logger.h> | #include <Pegasus/Common/Logger.h> |
#include <Pegasus/Common/Destroyer.h> |
#include <Pegasus/Common/AutoPtr.h> |
#include <Pegasus/ProviderManager2/OperationResponseHandler.h> | #include <Pegasus/ProviderManager2/OperationResponseHandler.h> |
| |
#include <Pegasus/Config/ConfigManager.h> | #include <Pegasus/Config/ConfigManager.h> |
|
|
new ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI")); | new ProviderManagerContainer("CMPIProviderManager", "CMPI", "CMPI")); |
#endif | #endif |
#endif | #endif |
|
|
|
#if defined(ENABLE_JMPI_PROVIDER_MANAGER) |
|
#if defined(PEGASUS_OS_OS400) |
|
_providerManagers.append( |
|
new ProviderManagerContainer("QSYS/QYCMJMPIPM", "JMPI", "JMPI")); |
|
#else |
|
_providerManagers.append( |
|
new ProviderManagerContainer("JMPIProviderManager", "JMPI", "JMPI")); |
|
#endif |
|
#endif |
|
|
// END TEMP SECTION | // END TEMP SECTION |
} | } |
| |
|
|
| |
_incomingQueue.enqueue(request->op); | _incomingQueue.enqueue(request->op); |
| |
_thread_pool->allocate_and_awaken((void *)this, ProviderManagerService::handleCimOperation); |
while (!_thread_pool->allocate_and_awaken( |
|
(void *)this, ProviderManagerService::handleCimOperation)) |
|
{ |
|
pegasus_yield(); |
|
} |
} | } |
else | else |
{ | { |
|
|
| |
if(_isSupportedRequestType(legacy)) | if(_isSupportedRequestType(legacy)) |
{ | { |
Destroyer<Message> xmessage(legacy); |
AutoPtr<Message> xmessage(legacy); |
| |
// Set the client's requested language into this service thread. | // Set the client's requested language into this service thread. |
// This will allow functions in this service to return messages | // This will allow functions in this service to return messages |
|
|
// get the responsible provider Manager | // get the responsible provider Manager |
ProviderManager * pm = locateProviderManager(message,ifc); | ProviderManager * pm = locateProviderManager(message,ifc); |
if (pm) { | if (pm) { |
response = pm->processMessage(request,providerManagerName); |
response = pm->processMessage(request); |
} | } |
| |
else for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { | else for (Uint32 i = 0, n = _providerManagers.size(); i < n; i++) { |
|
|
dynamic_cast<CIMEnableModuleRequestMessage*>(const_cast<Message*>(message)); | dynamic_cast<CIMEnableModuleRequestMessage*>(const_cast<Message*>(message)); |
if (request->providerModule.getProperty(request->providerModule.findProperty | if (request->providerModule.getProperty(request->providerModule.findProperty |
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) | ("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
response=pmc->getProviderManager()->processMessage(request,providerManagerName); |
response=pmc->getProviderManager()->processMessage(request); |
} | } |
break; | break; |
case CIM_DISABLE_MODULE_REQUEST_MESSAGE: { | case CIM_DISABLE_MODULE_REQUEST_MESSAGE: { |
|
|
dynamic_cast<CIMDisableModuleRequestMessage*>(const_cast<Message*>(message)); | dynamic_cast<CIMDisableModuleRequestMessage*>(const_cast<Message*>(message)); |
if (request->providerModule.getProperty(request->providerModule.findProperty | if (request->providerModule.getProperty(request->providerModule.findProperty |
("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) | ("InterfaceType")).getValue().toString()==pmc->getInterfaceName()) |
response=pmc->getProviderManager()->processMessage(request,providerManagerName); |
response=pmc->getProviderManager()->processMessage(request); |
} | } |
break; | break; |
case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: { | case CIM_STOP_ALL_PROVIDERS_REQUEST_MESSAGE: { |
Message *resp=pmc->getProviderManager()->processMessage(request,providerManagerName); |
Message *resp=pmc->getProviderManager()->processMessage(request); |
if (resp) response=resp; } | if (resp) response=resp; } |
break; | break; |
default: | default: |
|
|
| |
// find provider manager | // find provider manager |
name = ProviderRegistrar().findProvider(name,false); | name = ProviderRegistrar().findProvider(name,false); |
providerManagerName = name; |
|
it=name.getInterfaceName(); | it=name.getInterfaceName(); |
} | } |
| |
|
|
| |
void ProviderManagerService::unload_idle_providers(void) | void ProviderManagerService::unload_idle_providers(void) |
{ | { |
|
for(Uint32 i = 0, n = _providerManagers.size(); i < n; i++) |
|
{ |
|
ProviderManagerContainer *pmc=_providerManagers[i]; |
|
pmc->getProviderManager()->unload_idle_providers(); |
|
} |
} | } |
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |
|
|