The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Apache::Singleton - Singleton class for mod_perl

SYNOPSIS

  package Printer;
  use base qw(Apache::Singleton);

  # same: default is per Request
  package Printer::PerRequest;
  use base qw(Apache::Singleton::Request);

  package Printer::PerProcess;
  use base qw(Apache::Singleton::Process);

  package Printer::PerServer;
  use base qw(Apache::Singleton::Server);

DESCRIPTION

Apache::Singleton works the same as Class::Singleton, but with various object lifetime (scope). See Class::Singleton first.

OBJECT LIFETIME

By iniheriting one of the following sublasses of Apache::Singleton, you can change the scope of your object.

Request
  use base qw(Apache::Singleton::Request);

One instance for one request. Apache::Singleton will remove intstance on each request. Implemented using mod_perl pnotes API. This is the default scope, so inheriting from Apache::Singleton would do the same effect.

Process
  use base qw(Apache::Singleton::Process);

One instance for one httpd process. Implemented using package global. Notice this is the same beaviour with Class::Singleton ;)

Server
  use base qw(Apache::Singleton::Server);

One instance for one server (across all httpd processes). Implemented using Cache::SharedMemoryCache (IPC).

Note that multiple process cannot share blessed reference without serialization, so One instance for one server is just an idea. What it means is, one instance for one process, and multiple instances with shared data across one server. See t/05_server.t in this module distribution for what it exactly means.

AUTHOR

Original idea by Matt Sergeant <matt@sergeant.org> and Perrin Harkins <perrin@elem.com>.

Code by Tatsuhiko Miyagawa <miyagawa@bulknews.net>

This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

SEE ALSO

Apache::Singleton::Request, Apache::Singleton::Process, Apache::Singleton::Server, Class::Singleton, Cache::SharedMemoryCache