<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -1,3 +1,5 @@
+require 'set'
+
 class Object
   
   module Pooling
@@ -20,8 +22,8 @@ class Object
     end
     
     def release
-      self.class.release(self)
-    end      
+      @__pool.release(self)
+    end 
     
     class Pools
       
@@ -29,7 +31,7 @@ class Object
       
       def initialize(type)
         @type = type
-        @pools = Hash.new { |h,k| h[k] = Pool.new(@type) }
+        @pools = Hash.new { |h,k| h[k] = Pool.new(@type, k) }
       end
       
       def flush!
@@ -49,11 +51,12 @@ class Object
       
         attr_reader :type, :available, :reserved
       
-        def initialize(type)
+        def initialize(type, initializer)
           @type = type
-          @mutex = Mutex.new
+          @initializer = initializer
+          @lock = Mutex.new
           @available = []
-          @reserved = []
+          @reserved = Set.new
         end
       
         def flush!
@@ -66,32 +69,32 @@ class Object
           end
           
           @available = []
-          @reserved = []
+          @reserved = Set.new
         end
         
-        def self.acquire(connection_uri)
-          conn = nil
-          connection_string = connection_uri.to_s
+        def new
+          instance = nil
 
-          @connection_lock.synchronize do          
-            unless @available_connections[connection_string].empty?
-              conn = @available_connections[connection_string].pop
+          @lock.synchronize do          
+            unless @available.empty?
+              instance = @available.pop
             else
-              conn = allocate
-              conn.send(:initialize, connection_uri)
-              at_exit { conn.real_close }
+              instance = @type.allocate
+              instance.send(:initialize, *@initializer)
+              at_exit { instance.dispose }
+              instance.instance_variable_set(&quot;@__pool&quot;, self)
             end
 
-            @reserved_connections &lt;&lt; conn
+            @reserved &lt;&lt; instance
           end
 
-          return conn
+          return instance
         end
 
-        def self.release(connection)
-          @connection_lock.synchronize do
-            if @reserved_connections.delete?(connection)
-              @available_connections[connection.to_s] &lt;&lt; connection
+        def release(instance)
+          @lock.synchronize do
+            if @reserved.delete?(instance)
+              @available &lt;&lt; instance
             end
           end
           return nil
@@ -110,6 +113,7 @@ class Object
           raise MustImplementDisposeError.new(&quot;#{self.name} must implement a `dispose' instance-method.&quot;)
         end
         
+        pools[*args].new
         # uri = uri.is_a?(String) ? Addressable::URI::parse(uri) : uri
         # DataObjects.const_get(uri.scheme.capitalize)::Connection.acquire(uri)
       end</diff>
      <filename>data_objects/lib/data_objects/support/pooling.rb</filename>
    </modified>
    <modified>
      <diff>@@ -37,9 +37,7 @@ describe &quot;Object::Pooling&quot; do
     end.should raise_error(Object::Pooling::MustImplementDisposeError)
   end
   
-  it &quot;should be able to aquire an object&quot; do
-    pending
-    
+  it &quot;should be able to aquire an object&quot; do    
     bob = Thing.new(&quot;bob&quot;)
     bob.name.should == 'bob'
     </diff>
      <filename>data_objects/spec/support/pooling_spec.rb</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>e1e2ea0c75a3b9ab114ccd658354fbcdc3117522</id>
    </parent>
  </parents>
  <author>
    <name>Sam Smoot</name>
    <email>ssmoot@gmail.com</email>
  </author>
  <url>http://github.com/sam/do/commit/66a29ece66ba5e6a2869982f8e34d014dcc94ede</url>
  <id>66a29ece66ba5e6a2869982f8e34d014dcc94ede</id>
  <committed-date>2008-05-07T15:47:37-07:00</committed-date>
  <authored-date>2008-05-07T15:47:37-07:00</authored-date>
  <message>More pooling work!</message>
  <tree>dbe0c9f3de2f9cfc01f27ba1f399b0e5a98212ce</tree>
  <committer>
    <name>Sam Smoot</name>
    <email>ssmoot@gmail.com</email>
  </committer>
</commit>
