[Catalyst] Accessing DB from external model

Mike Raynham catalyst at mikeraynham.co.uk
Fri Nov 5 12:04:31 GMT 2010


On 05/11/10 11:43, Hernan Lopes wrote:
> Mike,
>
> also, if you havent already, take a look on Catalyst::Tutorial , in my
> opinion its by far the best documentation to begin with catalyst.
>
> http://search.cpan.org/~zarquon/Catalyst-Manual-5.8005/lib/Catalyst/Manual/Tutorial/01_Intro.pod
>
>
>
> On 11/5/10, Mike Raynham<catalyst at mikeraynham.co.uk>  wrote:
>> On 05/11/10 10:10, Octavian Rasnita wrote:
>>> From: "Mike Raynham"<catalyst at mikeraynham.co.uk>
>>>> Hi,
>>>>
>>>> I am fairly new to all things Perl and Catalyst, and would like to
>>>> know if what I am attempting to do is correct.
>>>>
>>>> I've recently finished reading 'The Definitive Guide to Catalyst',
>>>> which has been very helpful, but I am still a little confused about
>>>> separating my business logic from my Catalyst application, and
>>>> accessing the database connection from my non-Catalyst application.
>>>>
>>>> At the moment, I have my external class in the lib/MyApp directory. It
>>>> uses the connection info found in MyApp::Model::DB, like so:
>>>>
>>>> ---
>>>>
>>>> # lib/MyApp/MyExternalClass.pm
>>>> MyApp::MyExternalClass
>>>>
>>>> use MyApp::Model::DB;
>>>> use MyApp::Schema;
>>>>
>>>> my $connect_info = MyApp::Model::DB->config->{connect_info};
>>>> my $schema = MyApp::Schema->connect( $connect_info );
>>>>
>>>> # Do stuff with $schema...
>>>>
>>>> ---
>>>>
>>>> That works, and I can connect to the database. However, I have
>>>> searched this mailing list, and found this:
>>>>
>>>> http://www.mail-archive.com/catalyst@lists.scsys.co.uk/msg00817.html
>>>>
>>>> Here, the connection information is moved from MyApp::Model::DB to
>>>> MyApp::DB, and then Catalyst::Model::Adaptor is used to glue
>>>> MyApp::Model::DB to MyApp::DB. Is it a good idea? MyApp::Model::DB
>>>> appears to be part of the Catalyst application, so if I want to access
>>>> the database from an external model, it makes sense to me to move the
>>>> connection code outside of the Catalyst application.
>>>>
>>>>
>>>> Regards,
>>>>
>>>> Mike
>>>
>>>
>>> The best idea would be to put the connection information in the
>>> application's config file like in the example below. (This example uses
>>> a Perl data structure, but you can use any configuration type accepted
>>> by Config::Any).
>>>
>>> 'Model::DB' =>  {
>>> schema_class =>  'MyApp::Schema',
>>> connect_info =>  {
>>> dsn =>  'dbi:Oracle:host=10.10.10.10;port=1521;sid=ora8',
>>> user =>  'user',
>>> password =>  "password",
>>> #name_sep =>  '.',
>>> LongReadLen =>  100*1024*1024,
>>> LongTruncOk =>  1,
>>> on_connect_call =>  'datetime_setup',
>>> on_connect_do =>  [
>>> "alter session set NLS_COMP='LINGUISTIC'",
>>> "alter session set NLS_SORT='BINARY_AI'",
>>> ],
>>> },
>>> },
>>>
>>> The model will access the connection information directly if it is
>>> defined in the config file, and you can use the data from this config
>>> file in any other external program.
>>> You can use the module Config::JFDI for using the Catalyst config file
>>> easier.
>>>
>>> Octavian
>>
>> Hi,
>>
>> Thanks for the speedy response.  When you put it like like, it all seems
>> so simple and obvious :-)
>>
>> Config::JFDI looks handy - I'll take a look at that.
>>
>>
>> Regards,
>>
>> Mike
>>
>> _______________________________________________
>> List: Catalyst at lists.scsys.co.uk
>> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
>> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
>> Dev site: http://dev.catalyst.perl.org/
>>
>
> _______________________________________________
> List: Catalyst at lists.scsys.co.uk
> Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst
> Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/
> Dev site: http://dev.catalyst.perl.org/


Hi,

Thanks.  That's where I started my venture into Perl and Catalyst, and 
it too was very helpful.  With this question of separating my model from 
the Catalyst app, I had just overlooked the obvious.


Regards,

Mike



More information about the Catalyst mailing list