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_RemoteMethodProvider.hpp"
00037 #include "OW_RemoteProviderUtils.hpp"
00038 #include "OW_CIMValue.hpp"
00039 #include "OW_Format.hpp"
00040 #include "OW_CIMException.hpp"
00041 #include "OW_CIMObjectPath.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 RemoteMethodProvider::RemoteMethodProvider(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 RemoteMethodProvider::~RemoteMethodProvider()
00066 {
00067 }
00068
00070 CIMValue RemoteMethodProvider::invokeMethod(
00071 const ProviderEnvironmentIFCRef& env,
00072 const String& ns,
00073 const CIMObjectPath& path,
00074 const String& methodName,
00075 const CIMParamValueArray& in,
00076 CIMParamValueArray& out )
00077 {
00078 LoggerRef lgr = env->getLogger(COMPONENT_NAME);
00079 OW_LOG_DEBUG(lgr, Format("RemoteMethodProvider::invokeMethod ns = %1, path = %2, methodName = %3", ns, path, methodName));
00080 String lUrl(m_url);
00081 ClientCIMOMHandleRef hdl = RemoteProviderUtils::getRemoteClientCIMOMHandle(lUrl, m_useConnectionCredentials, env, m_pool, m_alwaysSendCredentials);
00082 OW_LOG_DEBUG(lgr, Format("RemoteMethodProvider::invokeMethod got ClientCIMOMHandleRef for url: %1", lUrl));
00083
00084 ClientCIMOMHandleConnectionPool::HandleReturner returner(hdl, m_pool, lUrl);
00085
00086 OW_LOG_DEBUG(lgr, "RemoteMethodProvider::invokeMethod calling remote WBEM server");
00087
00088 CIMValue rval(CIMNULL);
00089 try
00090 {
00091 rval = hdl->invokeMethod(ns, path, methodName, in, out);
00092 }
00093 catch (CIMException& e)
00094 {
00095 if (e.getErrNo() == CIMException::NOT_SUPPORTED)
00096 {
00097 e.setErrNo(CIMException::FAILED);
00098 }
00099 OW_LOG_INFO(lgr, Format("RemoteMethodProvider::invokeMethod remote WBEM server threw: %1", e));
00100 throw;
00101 }
00102 catch (const Exception& e)
00103 {
00104 String msg = Format("RemoteMethodProvider::invokeMethod failed calling remote WBEM server: %1", e);
00105 OW_LOG_ERROR(lgr, msg);
00106 OW_THROWCIMMSG_SUBEX(CIMException::FAILED, msg.c_str(), e);
00107 }
00108 return rval;
00109 }
00110
00111
00112
00113 }
00114
00115