[Catalyst] Catalyst::Component/Model Instances and Attributes per Request

Tomas Doran bobtfish at bobtfish.net
Fri Jul 16 07:32:56 GMT 2010


On 15 Jul 2010, at 21:37, Alejandro Imass wrote:

> On Mon, Jul 12, 2010 at 3:08 PM, Tomas Doran  
> <bobtfish at bobtfish.net> wrote:
>> Each process is in a separate memory space if you're using FCGI or  
>> mod_perl
>> or something, but it's not entirely certain (if you use
>> Catalyst::Engine::PSGI and Corona (for example) then multiple  
>> requests can
>> be in-flight and sharing the same logicial memory space  
>> application (they
>> just have different instances of the request context).
>>
>
> So we can assume mod_worker would certainly mix this data. The initial
> quetion wasn't so stupid after all ;-)

I believe from perl space it'll all still look like different  
processes, so no..

>> However doing what you suggest above will work for FCGI/mod_perl (or
>> generally anything forked), although it's a bit icky - the  
>> instance of your
>> Model lasts forever, and so bashing some of the instance data in each
>> request works..
>>
>
> Yes. I think for this particular case it's better for me to use a
> class rather than an instance for this model.

Wrong.

> I'm suspecting that
> instances are really to take advantage of caching DB connections and
> things like that which I don't need or want for my particular model.

Wrong.

You want an instance. Always.

If you just had a class for your then it would be impossible to load  
two copies of the same class into the same process space at any time.  
And you wouldn't _ever_ want to connect to the same database schema  
on two different servers at the same time...

Oh, no, wait - you would :)

But that's fine, just inheriting from Catalyst::Model means that you  
have a COMPONENT method which will generate an instance... Although  
it's probably better to use ::Model::Adaptor or something, so that  
the COMPONENT instance creation logic and the actual implementation  
class aren't the same thing (and the actual class is decoupled from  
any Catalyst related logic).

Cheers
t0m





More information about the Catalyst mailing list