Go to the documentation of this file.00001 <?php
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00017 final class DBPool extends Singleton implements Instantiatable
00018 {
00019 private $default = null;
00020
00021 private $pool = array();
00022
00026 public static function me()
00027 {
00028 return Singleton::getInstance(__CLASS__);
00029 }
00030
00034 public static function getByDao(GenericDAO $dao)
00035 {
00036 return self::me()->getLink($dao->getLinkName());
00037 }
00038
00042 public function setDefault(DB $db)
00043 {
00044 $this->default = $db;
00045
00046 return $this;
00047 }
00048
00052 public function dropDefault()
00053 {
00054 $this->default = null;
00055
00056 return $this;
00057 }
00058
00063 public function addLink($name, DB $db)
00064 {
00065 if (isset($this->pool[$name]))
00066 throw new WrongArgumentException(
00067 "already have '{$name}' link"
00068 );
00069
00070 $this->pool[$name] = $db;
00071
00072 return $this;
00073 }
00074
00079 public function dropLink($name)
00080 {
00081 if (!isset($this->pool[$name]))
00082 throw new MissingElementException(
00083 "link '{$name}' not found"
00084 );
00085
00086 unset($this->pool[$name]);
00087
00088 return $this;
00089 }
00090
00095 public function getLink($name = null)
00096 {
00097 $link = null;
00098
00099
00100 if (!$name) {
00101 if (!$this->default)
00102 throw new MissingElementException(
00103 'i have no default link and requested link name is null'
00104 );
00105
00106 $link = $this->default;
00107 } elseif (isset($this->pool[$name]))
00108 $link = $this->pool[$name];
00109
00110 if ($link) {
00111 if (!$link->isConnected())
00112 $link->connect();
00113
00114 return $link;
00115 }
00116
00117 throw new MissingElementException(
00118 "can't find link with '{$name}' name"
00119 );
00120 }
00121
00125 public function shutdown()
00126 {
00127 $this->disconnect();
00128
00129 $this->default = null;
00130 $this->pool = array();
00131
00132 return $this;
00133 }
00134
00138 public function disconnect()
00139 {
00140 if ($this->default)
00141 $this->default->disconnect();
00142
00143 foreach ($this->pool as $db)
00144 $db->disconnect();
00145
00146 return $this;
00147 }
00148 }
00149 ?>