Xerces 3 revisions.
[shibboleth/cpp-xmltooling.git] / xmltooling / util / ReloadableXMLFile.cpp
index 5391a94..ad43f6f 100644 (file)
@@ -22,6 +22,7 @@
 \r
 #include "internal.h"\r
 #include "util/NDC.h"\r
+#include "util/PathResolver.h"\r
 #include "util/ReloadableXMLFile.h"\r
 #include "util/XMLConstants.h"\r
 #include "util/XMLHelper.h"\r
@@ -37,6 +38,7 @@
 \r
 using namespace xmltooling::logging;\r
 using namespace xmltooling;\r
+using namespace xercesc;\r
 using namespace std;\r
 \r
 static const XMLCh uri[] =              UNICODE_LITERAL_3(u,r,i);\r
@@ -92,6 +94,8 @@ ReloadableXMLFile::ReloadableXMLFile(const DOMElement* e, Category& log)
         }\r
 \r
         if (m_local) {\r
+            XMLToolingConfig::getConfig().getPathResolver()->resolve(m_source, PathResolver::XMLTOOLING_CFG_FILE);\r
+\r
             flag=e->getAttributeNS(NULL,reloadChanges);\r
             if (!XMLString::equals(flag,xmlconstants::XML_FALSE) && !XMLString::equals(flag,xmlconstants::XML_ZERO)) {\r
 #ifdef WIN32\r
@@ -114,6 +118,7 @@ ReloadableXMLFile::ReloadableXMLFile(const DOMElement* e, Category& log)
             if (source && *source) {\r
                 auto_ptr_char temp2(source);\r
                 m_backing=temp2.get();\r
+                XMLToolingConfig::getConfig().getPathResolver()->resolve(m_backing, PathResolver::XMLTOOLING_RUN_FILE);\r
                 log.debug("backup remote resource with (%s)", m_backing.c_str());\r
             }\r
             source = e->getAttributeNS(NULL,reloadInterval);\r
@@ -188,14 +193,14 @@ pair<bool,DOMElement*> ReloadableXMLFile::load(bool backup)
     }\r
     catch (XMLException& e) {\r
         auto_ptr_char msg(e.getMessage());\r
-        m_log.critStream() << "Xerces error while loading resource (" << (backup ? m_backing : m_source) << "): "\r
+        m_log.errorStream() << "Xerces error while loading resource (" << (backup ? m_backing : m_source) << "): "\r
             << msg.get() << logging::eol;\r
         if (!backup && !m_backing.empty())\r
             return load(true);\r
         throw XMLParserException(msg.get());\r
     }\r
     catch (exception& e) {\r
-        m_log.critStream() << "error while loading configuration from ("\r
+        m_log.errorStream() << "error while loading configuration from ("\r
             << (m_source.empty() ? "inline" : (backup ? m_backing : m_source)) << "): " << e.what() << logging::eol;\r
         if (!backup && !m_backing.empty())\r
             return load(true);\r
@@ -225,10 +230,12 @@ Lockable* ReloadableXMLFile::lock()
             return this;\r
         \r
         // Elevate lock and recheck.\r
+        m_log.debug("timestamp of local resource changed, elevating to a write lock");\r
         m_lock->unlock();\r
         m_lock->wrlock();\r
         if (m_filestamp>=stat_buf.st_mtime) {\r
             // Somebody else handled it, just downgrade.\r
+            m_log.debug("update of local resource handled by another thread, downgrading lock");\r
             m_lock->unlock();\r
             m_lock->rdlock();\r
             return this;\r
@@ -247,10 +254,12 @@ Lockable* ReloadableXMLFile::lock()
             return this;\r
 \r
         // Elevate lock and recheck.\r
+        m_log.debug("reload interval for remote resource elapsed, elevating to a write lock");\r
         m_lock->unlock();\r
         m_lock->wrlock();\r
         if (now - m_filestamp < m_reloadInterval) {\r
             // Somebody else handled it, just downgrade.\r
+            m_log.debug("update of remote resource handled by another thread, downgrading lock");\r
             m_lock->unlock();\r
             m_lock->rdlock();\r
             return this;\r
@@ -272,6 +281,7 @@ Lockable* ReloadableXMLFile::lock()
     }\r
     \r
     // If we made it here, the swap may or may not have worked, but we need to relock.\r
+    m_log.debug("attempt to update resource complete, relocking");\r
     m_lock->rdlock();\r
     return this;\r
 }\r