00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #ifndef RESOURCEPOOL_ORACLE_FACTORY_HH
00025 #define RESOURCEPOOL_ORACLE_FACTORY_HH
00026
00027 #ifndef RESOURCEPOOL_ORACLE_RESOURCEFWD_HH
00028 #include "ResourceFwd.hh"
00029 #endif
00030
00031 #ifndef RESOURCEPOOL_ORACLE_OCIENVHANDLEFWD_HH
00032 #include "OCIEnvHandleFwd.hh"
00033 #endif
00034
00035 #ifndef INCLUDED_GC_PTR_HH
00036 #include "mm/gc_ptr.hh"
00037 #endif
00038
00039 #include "ResourcePool/SQL/SQLFactoryInterface.hh"
00040 #include "ResourcePool/ResourcePoolStreamLogger.hh"
00041
00042 #include <string>
00043 #include <memory>
00044
00045 namespace fatalmind {
00046
00071 template<class TM
00072 , template<class> class SLMDC = oracle::SelectListMetaDataCache
00073
00074 > class oracleFactory : public SQL::SQLFactoryInterface {
00075 typedef SQL::SQLFactoryInterface super;
00076 public:
00086 oracleFactory(const std::string& service_name
00087 , const std::string& user
00088 , const std::string& pass
00089 , ResourcePoolEventObserver& e = ResourcePoolStreamLogger::defaultLogger
00090 );
00096 oracleFactory(const std::string& logon, ResourcePoolEventObserver& e = ResourcePoolStreamLogger::defaultLogger);
00097 oracleFactory(const oracleFactory<TM,SLMDC>&);
00098 ~oracleFactory();
00099
00100 oracleResource<TM>* create_resource() const;
00101
00102 using super::databaseType_t;
00103 databaseType_t getDatabaseType() const {
00104 return OCI;
00105 };
00106
00107 protected:
00108 virtual Clone* DoClone() const;
00109
00110 private:
00111 std::string _service_name;
00112 std::string _user;
00113 std::string _pass;
00114
00115 const unsigned int _mode;
00116 mutable std::auto_ptr<oracle::OCIEnvHandle> _env;
00117 gc_ptr<typename oracle::SelectListMetaDataCacheInterface<TM>::type, TM> _slmdc;
00118 };
00119
00120 }
00121 #endif
00122