|
ru.perl- RU.PERL ---------------------------------------------------------------------- From : Artem Chuprina 2:5020/400 13 Jun 2003 10:44:02 To : Mikhail Polykovsky Subject : Re: BEGIN - DESTROY -------------------------------------------------------------------------------- Хмутро. MP> Здравствуйте. MP> Допустим, есть класс, все экземпляры которого пользуются коннектом к MP> базе (одним на все экземпляры). MP> package My; MP> use DBI; MP> my $dbh; MP> sub BEGIN{ MP> $dbh = connect_to_database(); MP> } MP> sub new{ MP> # tru-la-la MP> $self->{'handle'} = $dbh; MP> } MP> Вопрос в том, как мне организовать DESTROY? Если отключаться от базы в MP> нем, тогда скрипт отключится при первом удалении объекта, остальные не MP> смогут работать с базой. А если вообще ни один экземпляр не MP> создавался, DESTROY не будет вызван, и коннект повиснет. Как MP> поступить? MP> З.Ы. Вопрос не про конкретное подключение, а вообще про подобные MP> реализации. Если ты инициализируешь $dbh в BEGIN, то по смыслу он у тебя живет все время работы процесса, и отцепляться надо посредством END { undef $dbh; } Впрочем, тоже не обязательно - само сдохнет по завершении процесса. То есть смысл это имеет только если тебе по умолчанию надо commit сделать: END { $dbh->commit; } А "вообще" надо сначала определиться, когда коннект становится нужен, а когда - уже нет. От этого зависит и то, как делать. Если надо, например, класть коннект по сдыханию последнего пользователя, то его и создавать надо по созданию первого. Тогда можно, например, завести счетчик ссылок (в случае с DBI::db его можно прямо в объекте держать), перловый не годится из-за лишней ссылки, и в DESTROY проверять, сколько там осталось пользователей. В конструкторе, соответственно, $dbh ||= connect_to_database(); $dbh->{private_my_link_count}++; -- Artem Chuprina RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/122.256, ICQ: 13038757 --- ifmail v.2.15dev5 * Origin: Leninsky 45 home network (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.perl/1147709fdca5d.html, оценка из 5, голосов 10
|