ok. a few hours of testing, and I've tracked all the issues down to
prime_caches and modperl
since I'm managing connections externally, and passing rose a DB
handle for every action, i had this:
__PACKAGE__->default_domain('NULL');
__PACKAGE__->default_type('NULL');
__PACKAGE__->register_db(
domain => 'NULL',
type => 'NULL',
driver => 'Pg',
database => 'NULL',
host => 'localhost',
username => 'NULL',
password => 'NULL',
);
which caused every class to be mindlessly stupid as they could not
prime correctly
i've since replaced that with the correct paramters for my 'config'
handle, and then run a cleanup at the end of my startup.pl
sub _clear_db {
__PACKAGE__->unregister_db(
domain => 'config',
type => 'config',
);
__PACKAGE__->default_domain('config');
__PACKAGE__->default_type('config');
__PACKAGE__->register_db(
domain => 'config',
type => 'config',
driver => 'Pg',
database => 'NULL',
host => 'localhost',
username => 'NULL',
password => 'NULL',
);
}
originally i registered the new domain as NULL/NULL, but that just
created 2 sets of internal rose caches per object class. i found it
odd how a lot of the data was cached as a per-db stash, the bulk of
it seemed redundant. i imagine there are some edge cases where
different DBs interact with the data in other ways.
in any event this is probably/possibly an error, as unregister_db
does not seem to clear the internal rose data for the domain/type. I
was unsure of how to alter any options of a registered db post-
config. this works, so i'm using it.
i couldn't catch how the prime_caches exactly operates though (in
terms of where its originally triggered). so i'm going to ask these
questions:
a- currently, does this happen in a single connect, or is this on a
per connect/disconnect basis
b- if it is on a per connect-disconnect basis... would it be
possible to push this into a single connection
c- i know that its just SELECT arguments, but would it be possible
to 'play it safe' and have an option to run the cache primes in begin/
rollback blocks?
d- also, would it be possible to rework prime_all /prime to accept a
rose db object? (suggestion below )
e- fyi, if you unregister a db, the object classes still retain the
per-db info. they should probably discard it.
the reason why i'd like to do prime_all and a connect-disconnect is
that i have a config db handle in modperl already that i do some
class overloading to , in efforts to make sure I disconnect
( sometimes I change code around and Apache::DBI gets called in too
soon. ) i'd love to just bool off cache priming, then run the
whole cache priming with my dbh , and be able to make sure it
disconnects.
lame illustration:
====
sub prime_all_caches
{
my($class) = shift;
my ( %args )= @_
my $db = $args{'db'} || undef;
foreach my $obj_class ($class->registered_classes)
{
$obj_class->meta->prime_caches( db=> $db );
}
}
sub prime_caches
{
my($self) = shift;
my ( %args )= @_
my @methods =
qw(column_names num_columns nonlazy_column_names lazy_column_names
column_rw_method_names column_accessor_method_names
nonlazy_column_accessor_method_names column_mutator_method_names
nonlazy_column_mutator_method_names
nonlazy_column_db_value_hash_keys
primary_key_column_db_value_hash_keys column_db_value_hash_keys
column_accessor_method_names column_mutator_method_names
column_rw_method_names);
foreach my $method (@methods)
{
$self->$method();
}
my $db = $args{'db'} ? $args{'db'} || $self->class->init_db;
$self->method_column('nonesuch');
$self->fq_primary_key_sequence_names(db => $db);
// Jonathan Vanasco
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
| FindMeOn.com - The cure for Multiple Web Personality Disorder
| Web Identity Management and 3D Social Networking
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
| RoadSound.com - Tools For Bands, Stuff For Fans
| Collaborative Online Management And Syndication Tools
| - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - -
-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
Rose-db-object mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/rose-db-object