version 1.17, 2006/08/08 18:03:04
|
version 1.18, 2006/08/09 19:30:32
|
|
|
// | // |
//============================================================================== | //============================================================================== |
// | // |
// Author: Chip Vincent (cvincent@us.ibm.com) |
|
// |
|
// Modified By: |
|
// Nag Boranna, Hewlett-Packard Company (nagaraja_boranna@hp.com) |
|
// Yi Zhou, Hewlett-Packard Company (yi_zhou@hp.com) |
|
// Mike Day, IBM (mdday@us.ibm.com) |
|
// Adrian Schuur, IBM (schuur@de.ibm.com) |
|
// Josephine Eskaline Joyce (jojustin@in.ibm.com) for PEP#101 |
|
// Sean Keenan, Hewlett-Packard Company <sean.keenan@hp.com> |
|
// Roger Kumpf, Hewlett-Packard Company <roger_kumpf@hp.com> |
|
// Aruran, IBM (ashanmug@in.ibm.com) for Bug#4585 |
|
// |
|
//%///////////////////////////////////////////////////////////////////////////// | //%///////////////////////////////////////////////////////////////////////////// |
| |
#include "ProviderModule.h" | #include "ProviderModule.h" |
|
|
PEGASUS_NAMESPACE_BEGIN | PEGASUS_NAMESPACE_BEGIN |
| |
ProviderModule::ProviderModule(const String& fileName) | ProviderModule::ProviderModule(const String& fileName) |
: _refCount(0), |
: _library(fileName) |
_library(fileName) |
|
{ | { |
} | } |
| |
|
|
CIMProvider* ProviderModule::load(const String& providerName) | CIMProvider* ProviderModule::load(const String& providerName) |
{ | { |
// dynamically load the provider library | // dynamically load the provider library |
if (!_library.isLoaded()) |
|
{ |
|
if (!_library.load()) | if (!_library.load()) |
{ | { |
throw Exception(MessageLoaderParms( | throw Exception(MessageLoaderParms( |
|
|
providerName, | providerName, |
_library.getLoadErrorMessage())); | _library.getLoadErrorMessage())); |
} | } |
} |
|
| |
// find library entry point | // find library entry point |
CIMProvider * (*createProvider)(const String &) = | CIMProvider * (*createProvider)(const String &) = |
|
|
| |
if (createProvider == 0) | if (createProvider == 0) |
{ | { |
|
_library.unload(); |
throw Exception(MessageLoaderParms( | throw Exception(MessageLoaderParms( |
"ProviderManager.ProviderModule.ENTRY_POINT_NOT_FOUND", | "ProviderManager.ProviderModule.ENTRY_POINT_NOT_FOUND", |
"ProviderLoadFailure ($0:$1):entry point not found.", | "ProviderLoadFailure ($0:$1):entry point not found.", |
|
|
// test for the appropriate interface | // test for the appropriate interface |
if (dynamic_cast<CIMProvider *>(provider) == 0) | if (dynamic_cast<CIMProvider *>(provider) == 0) |
{ | { |
|
_library.unload(); |
throw Exception(MessageLoaderParms( | throw Exception(MessageLoaderParms( |
"ProviderManager.ProviderModule.PROVIDER_IS_NOT_A", | "ProviderManager.ProviderModule.PROVIDER_IS_NOT_A", |
"ProviderLoadFailure ($0:$1):provider is not a CIMProvider.", | "ProviderLoadFailure ($0:$1):provider is not a CIMProvider.", |
|
|
providerName)); | providerName)); |
} | } |
| |
_refCount++; |
|
|
|
return(provider); | return(provider); |
} | } |
| |
void ProviderModule::unloadModule() | void ProviderModule::unloadModule() |
{ | { |
if (_refCount.decAndTestIfZero()) |
|
{ |
|
if (_library.isLoaded()) |
|
{ |
|
_library.unload(); | _library.unload(); |
} | } |
} |
|
} |
|
| |
PEGASUS_NAMESPACE_END | PEGASUS_NAMESPACE_END |