On 1/10/08 5:30 PM, James Masters wrote: > Looking into this, I seem to simply be doing the following in a "for" loop > more than 100 times: > > my $shipobj = MGORD::Shipment->new(shipid => $shipid)->load(with =>['items', > 'costs', 'problems', 'predictedcosts', 'toaddress', 'fromaddress']); > > So the implication is that each one of these is opening a new client > connection and not closing it. > > I know I can just increase the default connections limit from 100 to say 200 > to fix the problem. But is Rose really supposed to be creating all these > client connections or have I written something wrongly?
When an RDBO-derived object needs a database connection, it calls its db() method: http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object.pm#db If a db object does not yet exist, the init_db() method is called to create one: http://search.cpan.org/dist/Rose-DB-Object/lib/Rose/DB/Object.pm#init_db The default implementation of init_db() returns a new Rose::DB object, which in turn will create its own DBI database connection. If you'd like one or more objects to share a single Rose::DB-derived object (and therefore a single database connection), a straightforward way to do it is to explicitly code the sharing: my $db = My::DB->new; # share this among all objects created below for(...) { my $shipobj = MGORD::Shipment->new(db => $db, ...)->load(...); } If you'd rather not do this explicitly, or if you simply want another default policy, then you should override the init_db() method, either in your common base class or in each individual RDBO-derived class, depending on the policy you want. For example, if you want all objects of or derived from a given class to share a single database connection by default, you could use the new_or_cached() Rose::DB method: http://search.cpan.org/dist/Rose-DB/lib/Rose/DB.pm#new_or_cached writing an init_db() method like this: sub init_db { My::DB->new_or_cached } Remember that no matter what policy you implement in init_db(), you can always explicitly create and pass a Rose::DB-derived object as that value of a "db" parameter to any individual object or Manager call. -John ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://ad.doubleclick.net/clk;164216239;13503038;w?http://sf.net/marketplace _______________________________________________ Rose-db-object mailing list Rose-db-object@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/rose-db-object