#include <xmltooling/logging.h>
#include <xmltooling/Lockable.h>
-#include <xmltooling/util/Threads.h>
#include <ctime>
#include <string>
namespace xmltooling {
+ class XMLTOOL_API RWLock;
+
/**
* Base class for file-based XML configuration.
*/
class XMLTOOL_API ReloadableXMLFile : protected virtual Lockable
{
- MAKE_NONCOPYABLE(ReloadableXMLFile);
-
+ MAKE_NONCOPYABLE(ReloadableXMLFile);
protected:
/**
* Constructor taking a DOM element supporting the following content:
*/
ReloadableXMLFile(const xercesc::DOMElement* e, logging::Category& log);
- virtual ~ReloadableXMLFile() {
- delete m_lock;
- }
+ virtual ~ReloadableXMLFile();
/**
* Loads configuration material.
* @return a pair consisting of a flag indicating whether to take ownership of
* the document, and the root element of the tree to load
*/
- virtual std::pair<bool,xercesc::DOMElement*> load() {
- return load(false);
- }
+ virtual std::pair<bool,xercesc::DOMElement*> load();
/** Root of the original DOM element passed into constructor. */
const xercesc::DOMElement* m_root;
/** Resource location, may be a local path or a URI. */
std::string m_source;
- /** Path to backup copy for remote resources. */
+ /** Path to backup copy for remote resource. */
std::string m_backing;
/** Last modification of local resource or reload of remote resource. */
/** Time in seconds to wait before trying for new copy of remote resource. */
time_t m_reloadInterval;
+ /** Caching tag associated with remote resource. */
+ std::string m_cacheTag;
+
/** Shared lock for guarding reloads. */
RWLock* m_lock;
public:
Lockable* lock();
-
- void unlock() {
- if (m_lock)
- m_lock->unlock();
- }
+ void unlock();
private:
std::pair<bool,xercesc::DOMElement*> load(bool backup);