00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 
00029 
00030 
00035 #include "OW_config.h"
00036 #include "OW_RemoteInstanceProvider.hpp"
00037 #include "OW_RemoteProviderUtils.hpp"
00038 #include "OW_CIMInstance.hpp"
00039 #include "OW_CIMObjectPath.hpp"
00040 #include "OW_Format.hpp"
00041 #include "OW_CIMException.hpp"
00042 #include "OW_Logger.hpp"
00043 #include "OW_ProviderEnvironmentIFC.hpp"
00044 #include "OW_ClientCIMOMHandle.hpp"
00045 
00046 namespace OW_NAMESPACE
00047 {
00048 
00049 namespace
00050 {
00051    const String COMPONENT_NAME("ow.provider.remote.ifc");
00052 }
00053 
00055 RemoteInstanceProvider::RemoteInstanceProvider(const ProviderEnvironmentIFCRef& env, const String& url, const ClientCIMOMHandleConnectionPoolRef& pool,
00056    bool alwaysSendCredentials, bool useConnectionCredentials)
00057    : m_pool(pool)
00058    , m_url(url)
00059    , m_alwaysSendCredentials(alwaysSendCredentials)
00060    , m_useConnectionCredentials(useConnectionCredentials)
00061 {
00062 }
00063 
00065 RemoteInstanceProvider::~RemoteInstanceProvider()
00066 {
00067 }
00068    
00070 void
00071 RemoteInstanceProvider::enumInstanceNames(
00072       const ProviderEnvironmentIFCRef& env,
00073       const String& ns,
00074       const String& className,
00075       CIMObjectPathResultHandlerIFC& result,
00076       const CIMClass& cimClass )
00077 {
00078    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00079    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::enumInstanceNames ns = %1, className = %2", ns, className));
00080    String lUrl(m_url);
00081    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00082    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::enumInstanceNames got ClientCIMOMHandleRef for url: %1", lUrl));
00083 
00084    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00085 
00086    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::enumInstanceNames calling remote WBEM server");
00087 
00088    try
00089    {
00090       hdl->enumInstanceNames(ns, className, result);
00091    }
00092    catch (CIMException& e)
00093    {
00094       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00095       {
00096          e.setErrNo(CIMException::FAILED); 
00097       }
00098       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::enumInstanceNames remote WBEM server threw: %1", e));
00099       throw;
00100    }
00101    catch (const Exception& e)
00102    {
00103       String msg = Format("RemoteInstanceProvider::enumInstanceNames failed calling remote WBEM server: %1", e);
00104       OW_LOG_ERROR(lgr, msg);
00105       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00106    }
00107 }
00108 
00110 void
00111 RemoteInstanceProvider::enumInstances(
00112       const ProviderEnvironmentIFCRef& env,
00113       const String& ns,
00114       const String& className,
00115       CIMInstanceResultHandlerIFC& result,
00116       WBEMFlags::ELocalOnlyFlag localOnly,
00117       WBEMFlags::EDeepFlag deep,
00118       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00119       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00120       const StringArray* propertyList,
00121       const CIMClass& requestedClass,
00122       const CIMClass& cimClass )
00123 {
00124    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00125    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::enumInstances ns = %1, className = %2", ns, className));
00126    String lUrl(m_url);
00127    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00128    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::enumInstances got ClientCIMOMHandleRef for url: %1", lUrl));
00129 
00130    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00131 
00132    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::enumInstances calling remote WBEM server");
00133 
00134    try
00135    {
00136       hdl->enumInstances(ns, className, result, deep, localOnly, includeQualifiers, includeClassOrigin, propertyList);
00137    }
00138    catch (CIMException& e)
00139    {
00140       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00141       {
00142          e.setErrNo(CIMException::FAILED); 
00143       }
00144       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::enumInstances remote WBEM server threw: %1", e));
00145       throw;
00146    }
00147    catch (const Exception& e)
00148    {
00149       String msg = Format("RemoteInstanceProvider::enumInstances failed calling remote WBEM server: %1", e);
00150       OW_LOG_ERROR(lgr, msg);
00151       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00152    }
00153 }
00154 
00156 CIMInstance
00157 RemoteInstanceProvider::getInstance(
00158       const ProviderEnvironmentIFCRef& env,
00159       const String& ns,
00160       const CIMObjectPath& instanceName,
00161       WBEMFlags::ELocalOnlyFlag localOnly,
00162       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00163       WBEMFlags::EIncludeClassOriginFlag includeClassOrigin,
00164       const StringArray* propertyList,
00165       const CIMClass& cimClass )
00166 {
00167    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00168    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::getInstance ns = %1, instanceName = %2", ns, instanceName));
00169    String lUrl(m_url);
00170    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00171    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::getInstance got ClientCIMOMHandleRef for url: %1", lUrl));
00172 
00173    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00174 
00175    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::getInstance calling remote WBEM server");
00176 
00177    CIMInstance rval(CIMNULL);
00178    try
00179    {
00180       rval = hdl->getInstance(ns, instanceName, localOnly, includeQualifiers, includeClassOrigin, propertyList);
00181    }
00182    catch (CIMException& e)
00183    {
00184       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00185       {
00186          e.setErrNo(CIMException::FAILED); 
00187       }
00188       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::getInstance remote WBEM server threw: %1", e));
00189       throw;
00190    }
00191    catch (const Exception& e)
00192    {
00193       String msg = Format("RemoteInstanceProvider::getInstance failed calling remote WBEM server: %1", e);
00194       OW_LOG_ERROR(lgr, msg);
00195       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00196    }
00197    return rval;
00198 }
00199 
00200 #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00201 
00202 CIMObjectPath
00203 RemoteInstanceProvider::createInstance(
00204       const ProviderEnvironmentIFCRef& env,
00205       const String& ns,
00206       const CIMInstance& cimInstance )
00207 {
00208    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00209    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::createInstance ns = %1", ns));
00210    String lUrl(m_url);
00211    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00212    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::createInstance got ClientCIMOMHandleRef for url: %1", lUrl));
00213 
00214    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00215 
00216    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::createInstance calling remote WBEM server");
00217 
00218    CIMObjectPath rval(CIMNULL);
00219    try
00220    {
00221       rval = hdl->createInstance(ns, cimInstance);
00222    }
00223    catch (CIMException& e)
00224    {
00225       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00226       {
00227          e.setErrNo(CIMException::FAILED); 
00228       }
00229       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::createInstance remote WBEM server threw: %1", e));
00230       throw;
00231    }
00232    catch (const Exception& e)
00233    {
00234       String msg = Format("RemoteInstanceProvider::createInstance failed calling remote WBEM server: %1", e);
00235       OW_LOG_ERROR(lgr, msg);
00236       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00237    }
00238    return rval;
00239 }
00240 
00242 void
00243 RemoteInstanceProvider::modifyInstance(
00244       const ProviderEnvironmentIFCRef& env,
00245       const String& ns,
00246       const CIMInstance& modifiedInstance,
00247       const CIMInstance& previousInstance,
00248       WBEMFlags::EIncludeQualifiersFlag includeQualifiers,
00249       const StringArray* propertyList,
00250       const CIMClass& theClass)
00251 {
00252    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00253    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::modifyInstance ns = %1", ns));
00254    String lUrl(m_url);
00255    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00256    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::modifyInstance got ClientCIMOMHandleRef for url: %1", lUrl));
00257 
00258    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00259 
00260    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::modifyInstance calling remote WBEM server");
00261 
00262    try
00263    {
00264       hdl->modifyInstance(ns, modifiedInstance, includeQualifiers, propertyList);
00265    }
00266    catch (CIMException& e)
00267    {
00268       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00269       {
00270          e.setErrNo(CIMException::FAILED); 
00271       }
00272       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::modifyInstance remote WBEM server threw: %1", e));
00273       throw;
00274    }
00275    catch (const Exception& e)
00276    {
00277       String msg = Format("RemoteInstanceProvider::modifyInstance failed calling remote WBEM server: %1", e);
00278       OW_LOG_ERROR(lgr, msg);
00279       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00280    }
00281 }
00282 
00284 void
00285 RemoteInstanceProvider::deleteInstance(
00286       const ProviderEnvironmentIFCRef& env,
00287       const String& ns,
00288       const CIMObjectPath& cop)
00289 {
00290    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00291    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::deleteInstance ns = %1, cop = %2", ns, cop));
00292    String lUrl(m_url);
00293    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00294    OW_LOG_DEBUG(lgr, Format("RemoteInstanceProvider::deleteInstance got ClientCIMOMHandleRef for url: %1", lUrl));
00295 
00296    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00297 
00298    OW_LOG_DEBUG(lgr, "RemoteInstanceProvider::deleteInstance calling remote WBEM server");
00299 
00300    try
00301    {
00302       hdl->deleteInstance(ns, cop);
00303    }
00304    catch (CIMException& e)
00305    {
00306       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00307       {
00308          e.setErrNo(CIMException::FAILED); 
00309       }
00310       OW_LOG_INFO(lgr, Format("RemoteInstanceProvider::deleteInstance remote WBEM server threw: %1", e));
00311       throw;
00312    }
00313    catch (const Exception& e)
00314    {
00315       String msg = Format("RemoteInstanceProvider::deleteInstance failed calling remote WBEM server: %1", e);
00316       OW_LOG_ERROR(lgr, msg);
00317       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00318    }
00319 }
00320 
00321 #endif // #ifndef OW_DISABLE_INSTANCE_MANIPULATION
00322 
00323 
00324 
00325 } 
00326 
00327 
00328