Index: trunk/Nebulous/lib/Nebulous/Server.pm
===================================================================
--- trunk/Nebulous/lib/Nebulous/Server.pm	(revision 10451)
+++ trunk/Nebulous/lib/Nebulous/Server.pm	(revision 10546)
@@ -1,5 +1,5 @@
 # Copyright (c) 2004  Joshua Hoblitt
 #
-# $Id: Server.pm,v 1.19 2005-12-03 02:32:56 jhoblitt Exp $
+# $Id: Server.pm,v 1.20 2006-12-08 03:29:19 jhoblitt Exp $
 
 package Nebulous::Server;
@@ -8,5 +8,7 @@
 use warnings FATAL => qw( all );
 
-our $VERSION = '0.02';
+our $VERSION = '0.03';
+
+use base qw( Class::Accessor::Fast );
 
 use DBI;
@@ -18,10 +20,8 @@
 use Params::Validate qw( validate_pos SCALAR );
 
-my $log;
-my $sql;
-my $db;
-
-sub init {
-    my $self = shift;
+__PACKAGE__->mk_accessors(qw( log sql db ));
+
+sub new {
+    my $class = shift;
 
     # let Nebulous::Server::Config validate our params
@@ -31,9 +31,10 @@
     Nebulous::Server::Log->init;
 
-    $log = Log::Log4perl::get_logger( "Nebulous::Server" );
-    $sql = Nebulous::Server::SQL->new;
-
-    $log->debug( "entered - @_" );
-
+    my $log = Log::Log4perl::get_logger( "Nebulous::Server" );
+    my $sql = Nebulous::Server::SQL->new;
+
+    $log->debug( "entered - @_" );
+
+    my $db;
     eval {
         $db = DBI->connect(
@@ -61,5 +62,10 @@
     $log->debug( "leaving" );
 
-    return 1;
+    my $self = bless {}, ref $class || $class;
+    $self->log($log);
+    $self->sql($sql);
+    $self->db($db);
+
+    return $self;
 }
 
@@ -76,5 +82,5 @@
                 'is + integer' => sub { $_[0] =~ /^\d+$/ },
                 # check that the class requested is valid
-                'is valid class id' => sub { _is_valid_class_id( $_[0] ) },
+                'is valid class id' => sub { $self->_is_valid_class_id( $_[0] ) },
             },
             default     => 0,
@@ -84,5 +90,5 @@
             callbacks   => {
                 # check that the volume requested is valid
-                'is valid volume name' => sub { _is_valid_volume_name($_[0]) },
+                'is valid volume name' => sub { $self->_is_valid_volume_name($_[0]) },
             },
             optional    => 1,
@@ -98,9 +104,13 @@
     );
 
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     $log->debug( "entered - @_" );
 
     # TODO do some intelligent volume allocated 
     # add hooks to make this decision based on avaiable space
-    $volume = _get_storage_volume( $volume );
+    $volume = $self->_get_storage_volume( $volume );
 
     my $uri;
@@ -194,8 +204,12 @@
     );
 
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     $log->debug( "entered - @_" );
 
     # TODO
-    $volume = _get_storage_volume();
+    $volume = $self->_get_storage_volume();
 
     my $path;
@@ -277,4 +291,8 @@
         },
     );
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
 
     $log->debug( "entered - @_" );
@@ -393,4 +411,8 @@
     );
 
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     $log->debug( "entered - @_" );
 
@@ -514,4 +536,8 @@
     );
 
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     $log->debug( "entered - @_" );
 
@@ -548,4 +574,8 @@
         },
     );
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
 
     $log->debug( "entered - @_" );
@@ -622,4 +652,8 @@
     );
 
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     $log->debug( "entered - @_" );
 
@@ -649,4 +683,10 @@
 
 sub _get_storage_volume {
+    my $self = shift;
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
     no warnings qw( uninitialized );
     $log->debug( "entered - @_" );
@@ -690,5 +730,9 @@
 
 sub _is_valid_class_id {
-    my $class_id = shift;
+    my ($self, $class_id) = @_;
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  = $self->db;
 
     my $class;
@@ -709,9 +753,13 @@
 
 sub _is_valid_volume_name  {
-    my $vol_name = shift;
+    my ($self, $vol_name) = @_;
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
 
     my $volume;
     eval {
-        my $query = $db->prepare_cached( $sql->get_volume_by_name  ); 
+        my $query = $db->prepare_cached( $sql->get_volume_by_name ); 
         $query->execute( $vol_name );
         ( $volume ) = $query->fetchrow_array;
@@ -727,4 +775,20 @@
 }
 
+sub DESTROY {
+    my $self = shift;
+
+    my $log = $self->log;
+    my $sql = $self->sql;
+    my $db  =$self->db;
+
+    $log->debug( "entered" );
+
+    $self->db->disconnect;        
+
+    $log->debug( "disconnected from database: ", sub { $db->data_sources; } );
+
+    $log->debug( "leaving" );
+}
+
 1;
 
