1 package Catalyst::Model::DBIC::Schema::Role::Replicated;
5 use Carp::Clan '^Catalyst::Model::DBIC::Schema';
7 use Catalyst::Model::DBIC::Schema::Types 'ConnectInfos';
9 use namespace::clean -except => 'meta';
13 Catalyst::Model::DBIC::Schema::Role::Replicated - Replicated storage support for
14 L<Catalyst::Model::DBIC::Schema>
19 roles => ['Replicated']
21 ['dbi:mysql:master', 'user', 'pass'],
23 ['dbi:mysql:slave1', 'user', 'pass'],
24 ['dbi:mysql:slave2', 'user', 'pass'],
25 ['dbi:mysql:slave3', 'user', 'pass'],
31 B<DOES NOT WORK YET> -- requires some DBIC changes
33 Sets your storage_type to L<DBIx::Class::Storage::DBI::Replicated> and connects
34 replicants provided in config. See that module for supported resultset
37 =head1 CONFIG PARAMETERS
41 Array of connect_info settings for every replicant.
46 is => 'ro', isa => ConnectInfos, coerce => 1, required => 1
52 # check storage_type compatibility (if configured)
53 if (my $storage_type = $self->storage_type) {
54 my $class = $storage_type =~ /^::/ ?
55 "DBIx::Class::Storage$storage_type"
58 croak "This storage_type cannot be used with replication"
59 unless $class->isa('DBIx::Class::Storage::DBI::Replicated');
61 $self->storage_type('::DBI::Replicated');
65 after finalize => sub {
68 $self->storage->connect_replicants($self->replicants->flatten);
73 L<Catalyst::Model::DBIC::Schema>, L<DBIx::Class>,
74 L<DBIx::Class::Storage::DBI::Replicated>,
75 L<Cache::FastMmap>, L<DBIx::Class::Cursor::Cached>
79 Rafael Kitover, C<rkitover@cpan.org>
83 This program is free software, you can redistribute it and/or modify it
84 under the same terms as Perl itself.