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 #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL
00037 #include "OW_RemoteAssociatorProvider.hpp"
00038 #include "OW_RemoteProviderUtils.hpp"
00039 #include "OW_Format.hpp"
00040 #include "OW_CIMException.hpp"
00041 #include "OW_CIMObjectPath.hpp"
00042 #include "OW_ProviderEnvironmentIFC.hpp"
00043 #include "OW_Logger.hpp"
00044 #include "OW_ClientCIMOMHandle.hpp"
00045 
00046 namespace OW_NAMESPACE
00047 {
00048 
00049 using namespace WBEMFlags;
00050 
00051 namespace
00052 {
00053    const String COMPONENT_NAME("ow.provider.remote.ifc");
00054 }
00055 
00057 RemoteAssociatorProvider::RemoteAssociatorProvider(const ProviderEnvironmentIFCRef& env, const String& url, const ClientCIMOMHandleConnectionPoolRef& pool,
00058    bool alwaysSendCredentials, bool useConnectionCredentials)
00059    : m_pool(pool)
00060    , m_url(url)
00061    , m_alwaysSendCredentials(alwaysSendCredentials)
00062    , m_useConnectionCredentials(useConnectionCredentials)
00063 {
00064 }
00065 
00067 RemoteAssociatorProvider::~RemoteAssociatorProvider()
00068 {
00069 }
00070 
00072 void
00073 RemoteAssociatorProvider::references(
00074    const ProviderEnvironmentIFCRef &env,
00075    CIMInstanceResultHandlerIFC &result,
00076    const String &ns,
00077    const CIMObjectPath &objectName,
00078    const String &resultClass,
00079    const String &role,
00080    EIncludeQualifiersFlag includeQualifiers,
00081    EIncludeClassOriginFlag includeClassOrigin,
00082    const StringArray *propertyList)
00083 {
00084    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00085    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::references ns = %1, objectName = %2, resultClass = %3, role = %4", ns, objectName, resultClass, role));
00086    String lUrl(m_url);
00087    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00088    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::references got ClientCIMOMHandleRef for url: %1", lUrl));
00089 
00090    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00091 
00092    OW_LOG_DEBUG(lgr, "RemoteAssociatorProvider::references calling remote WBEM server");
00093 
00094    try
00095    {
00096       hdl->references(ns, objectName, result, resultClass, role,
00097          includeQualifiers, includeClassOrigin, propertyList);
00098 
00099    }
00100    catch (CIMException& e)
00101    {
00102       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00103       {
00104          e.setErrNo(CIMException::FAILED); 
00105       }
00106       OW_LOG_INFO(lgr, Format("RemoteAssociatorProvider::references remote WBEM server threw: %1", e));
00107       throw;
00108    }
00109    catch (const Exception& e)
00110    {
00111       String msg = Format("RemoteAssociatorProvider::references failed calling remote WBEM server: %1", e);
00112       OW_LOG_ERROR(lgr, msg);
00113       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00114    }
00115 
00116 }
00117 
00119 void
00120 RemoteAssociatorProvider::associators(const ProviderEnvironmentIFCRef &env, CIMInstanceResultHandlerIFC &result, const String &ns, const CIMObjectPath &objectName,
00121    const String &assocClass, const String &resultClass, const String &role, const String &resultRole, WBEMFlags:: EIncludeQualifiersFlag includeQualifiers,
00122    WBEMFlags:: EIncludeClassOriginFlag includeClassOrigin, const StringArray *propertyList)
00123 {
00124    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00125    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::associators ns = %1, objectName = %2, assocClass = %3, resultClass = %4, role = %5, resultRole = %6",
00126       ns, objectName, assocClass, resultClass, role, resultRole));
00127    String lUrl(m_url);
00128    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00129    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::associators got ClientCIMOMHandleRef for url: %1", lUrl));
00130 
00131    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00132 
00133    OW_LOG_DEBUG(lgr, "RemoteAssociatorProvider::associators calling remote WBEM server");
00134 
00135    try
00136    {
00137       hdl->associators(ns, objectName, result, assocClass, resultClass, role, resultRole,
00138          includeQualifiers, includeClassOrigin, propertyList);
00139 
00140    }
00141    catch (CIMException& e)
00142    {
00143       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00144       {
00145          e.setErrNo(CIMException::FAILED); 
00146       }
00147       OW_LOG_INFO(lgr, Format("RemoteAssociatorProvider::associators remote WBEM server threw: %1", e));
00148       throw;
00149    }
00150    catch (const Exception& e)
00151    {
00152       String msg = Format("RemoteAssociatorProvider::associators failed calling remote WBEM server: %1", e);
00153       OW_LOG_ERROR(lgr, msg);
00154       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00155    }
00156 }
00157 
00159 void
00160 RemoteAssociatorProvider::associatorNames(const ProviderEnvironmentIFCRef &env, CIMObjectPathResultHandlerIFC &result, const String &ns, const CIMObjectPath &objectName,
00161    const String &assocClass, const String &resultClass, const String &role, const String &resultRole)
00162 {
00163    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00164    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::associatorNames ns = %1, objectName = %2, assocClass = %3, resultClass = %4, role = %5, resultRole = %6",
00165       ns, objectName, assocClass, resultClass, role, resultRole));
00166    String lUrl(m_url);
00167    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00168    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::associatorNames got ClientCIMOMHandleRef for url: %1", lUrl));
00169 
00170    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00171 
00172    OW_LOG_DEBUG(lgr, "RemoteAssociatorProvider::associatorNames calling remote WBEM server");
00173 
00174    try
00175    {
00176       hdl->associatorNames(ns, objectName, result, assocClass, resultClass, role, resultRole);
00177 
00178    }
00179    catch (CIMException& e)
00180    {
00181       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00182       {
00183          e.setErrNo(CIMException::FAILED); 
00184       }
00185       OW_LOG_INFO(lgr, Format("RemoteAssociatorProvider::associatorNames remote WBEM server threw: %1", e));
00186       throw;
00187    }
00188    catch (const Exception& e)
00189    {
00190       String msg = Format("RemoteAssociatorProvider::associatorNames failed calling remote WBEM server: %1", e);
00191       OW_LOG_ERROR(lgr, msg);
00192       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00193    }
00194 }
00195 
00197 void
00198 RemoteAssociatorProvider::referenceNames(const ProviderEnvironmentIFCRef &env, CIMObjectPathResultHandlerIFC &result, const String &ns, const CIMObjectPath &objectName,
00199    const String &resultClass, const String &role)
00200 {
00201    LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00202    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::referenceNames ns = %1, objectName = %2, resultClass = %3, role = %4", ns, objectName, resultClass, role));
00203    String lUrl(m_url);
00204    ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00205    OW_LOG_DEBUG(lgr, Format("RemoteAssociatorProvider::referenceNames got ClientCIMOMHandleRef for url: %1", lUrl));
00206 
00207    ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00208 
00209    OW_LOG_DEBUG(lgr, "RemoteAssociatorProvider::referenceNames calling remote WBEM server");
00210 
00211    try
00212    {
00213       hdl->referenceNames(ns, objectName, result, resultClass, role);
00214 
00215    }
00216    catch (CIMException& e)
00217    {
00218       if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00219       {
00220          e.setErrNo(CIMException::FAILED); 
00221       }
00222       OW_LOG_INFO(lgr, Format("RemoteAssociatorProvider::referenceNames remote WBEM server threw: %1", e));
00223       throw;
00224    }
00225    catch (const Exception& e)
00226    {
00227       String msg = Format("RemoteAssociatorProvider::referenceNames failed calling remote WBEM server: %1", e);
00228       OW_LOG_ERROR(lgr, msg);
00229       OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00230    }
00231 
00232 }
00233 
00234 
00235 } 
00236 
00237 
00238 #endif // #ifndef OW_DISABLE_ASSOCIATION_TRAVERSAL