--- nfo/perl/libs/Data/Storage/Container.pm 2002/12/01 22:18:28 1.3 +++ nfo/perl/libs/Data/Storage/Container.pm 2003/01/30 21:44:00 1.6 @@ -1,8 +1,18 @@ ################################################ # -# $Id: Container.pm,v 1.3 2002/12/01 22:18:28 joko Exp $ +# $Id: Container.pm,v 1.6 2003/01/30 21:44:00 joko Exp $ # # $Log: Container.pm,v $ +# Revision 1.6 2003/01/30 21:44:00 joko +# + temporary fix: (FIXME) now connecting to storage on storagehandle-instantiation +# +# Revision 1.5 2003/01/19 02:39:57 joko +# + moved 'deep_copy' from module 'libp' to module 'Data::Transform::Deep' +# + preserved order for hashes '$self->{config}' and '$self->{locator}' by using Tie::IxHash +# +# Revision 1.4 2002/12/04 07:38:07 jonen +# + deep copy +# # Revision 1.3 2002/12/01 22:18:28 joko # - no interactive implicit deploy # + only test integrity if storage available @@ -28,8 +38,12 @@ # get logger instance my $logger = Log::Dispatch::Config->instance; -use libp qw( deep_copy ); + +# - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - main +use Tie::IxHash; use Data::Dumper; + +use Data::Transform::Deep qw( deep_copy ); use Data::Storage; #use Data::Storage::Locator; @@ -43,7 +57,14 @@ $logger->debug( __PACKAGE__ . "->new( @args )" ); my $self = { @_ }; - return bless $self, $class; + bless $self, $class; + + # preserve order of configuration variables + #$self->{config} = {}; + tie %{$self->{config}}, 'Tie::IxHash'; + tie %{$self->{locator}}, 'Tie::IxHash'; + + return $self; } sub addConfig { @@ -91,8 +112,9 @@ $cfg_locator->{name} = $name; # merge in specific settings - foreach (keys %$db_config) { - $cfg_locator->{$_} = $db_config->{$_}; + my $specific = deep_copy($db_config); + foreach (keys %$specific) { + $cfg_locator->{$_} = $specific->{$_}; } # HACK: transfer dsn from main to dbi settings @@ -112,6 +134,7 @@ sub initLocators { my $self = shift; foreach (keys %{$self->{config}}) { + #print $_, "\n"; $self->initLocator($_, $self->{config}->{$_}) if !/^_/; } #print "locs: ", Dumper($self->{locator}); @@ -131,6 +154,9 @@ $logger->info( __PACKAGE__ . " is booting storage declared by locator \"$name\"" ); my $storage = Data::Storage->new($locator); + + # TODO: do below (after 'testAvailability' and 'testIntegrity') again!!! + $storage->connect(); my $log_prefix = __PACKAGE__ . "->initStorage: "; $log_prefix .= "dsn=\"$self->{locator}->{$name}->{dsn}\"" if $self->{locator}->{$name}->{dsn}; @@ -158,7 +184,7 @@ # don't connect right here, do an implicit connect on (later) usage # maybe set ->{meta}->{connectmethod} = "connect" here #return unless $storage->connect(); - $storage->connect() if $locator->{status}->{integrity}; + #$storage->connect() if $locator->{status}->{integrity}; # should we check emptyness? if ($locator->{status}->{availability} && $locator->{test_emptyness}) { @@ -198,6 +224,7 @@ sub initStorages { my $self = shift; foreach (keys %{$self->{locator}}) { + #print $_, "\n"; $self->initStorage($_); } }