que no tienen ninguna experiencia con DBIx :: Conexión, pero yo uso DBIx::Connector (esencialmente lo DBIx :: Clase utiliza internamente, pero en línea) y es maravilloso ...
que estas conexiones piscina con un envoltorio objeto alces que da vuelta instancias de objetos existentes, si los parámetros de conexión son idénticos (esto funcionaría de la misma para cualquier objeto que subyace DB):
package MyApp::Factory::DatabaseConnection;
use strict;
use warnings;
use Moose;
# table of database name -> connection objects
has connection_pool => (
is => 'ro', isa => 'HashRef[DBIx::Connector]',
traits => ['Hash'],
handles => {
has_pooled_connection => 'exists',
get_pooled_connection => 'get',
save_pooled_connection => 'set',
},
default => sub { {} },
);
sub get_connection
{
my ($self, %options) = @_;
# some application-specific parsing of %options here...
my $obj;
if ($options{reuse})
{
# extract the last-allocated connection for this database and pass it
# back, if there is one.
$obj = $self->get_pooled_connection($options{database});
}
if (not $obj or not $obj->connected)
{
# look up connection info based on requested database name
my ($dsn, $username, $password) = $self->get_connection_info($options{database});
$obj = DBIx::Connector->new($dsn, $username, $password);
return unless $obj;
# Save this connection for later reuse, possibly replacing an earlier
# saved connection (this latest one has the highest chance of being in
# the same pid as a subsequent request).
$self->save_pooled_connection($options{database}, $obj) unless $options{nosave};
}
return $obj;
}
Uso DBIx :: Connector (qué DBIx :: Class se usa internamente) y es maravilloso ... Inmovilizo estas conexiones con un contenedor de objetos Moose que devuelve las instancias de objetos existentes si los parámetros de conexión son idénticos. No es difícil hacer el tuyo. – Ether
@Ether - vale la pena una respuesta, en mi humilde opinión – DVK
@DVK: vale, amplié esto con una respuesta ... – Ether