私は、Perlで記述され、WebインターフェイスにMasonを使用するRequestTrackerをハッキングしています。オートハンドラー、htmlページを含み、他のコンプにいくつかのメソッドを取り込む、カスタマイズされたページを作成しようとしています。インターフェイスの自分の部分に必要ないくつかのものを追跡するために使用したい単純なクラスがあります。現在、追跡するのはデータベースハンドルだけです。
package RTx::FooBar::Web;
use strict;
use warnings;
use RTx::FooBar::Handle;
sub new
{
my $proto = shift;
$RT::Logger->debug("creating new");
my $class = ref($proto) || $proto;
my $self = {};
bless( $self, $class);
my $handle = RTx::FooBar::Handle->new();
$handle->Connect();
$self->{cfHandle} = $handle;
return $self;
}
sub DESTROY {
my $self = shift;
$RT::Logger->debug("destroy");
delete $self->{cfHandle};
}
sub CFHandle
{
my $self = shift;
return $self->{cfHandle};
}
1;
それをセッションに貼り付けて、Webインターフェイスの必要な場所で使用できるようにしました。だから私はそれを1つのWebページで使用しようとします-オートハンドラーは次のことを行います:
% $m->call_next;
<%INIT>
$RT::Logger->debug("my autohandler");
use RTx::FooBar::Web;
$session{cfWeb} ||= RTx::FooBar::Web->new();
</%INIT>
現在私を悩ませているのは(機能していないという事実を除いて)、「new」メソッドでのロギングは1回出力されますが、DESTROYメソッドでのロギングは56回出力されることです。また、毎回、RTx :: FooBar :: Handle-> DESTROYのデバッグも出力され、$self->{cfHandle}が削除されなかったことを示します。なぜこれが起こっているのか誰かが提案できますか?セッションがタイドハッシュだからですか?
*更新* $sessionを使用しなくなりましたが、一度作成した後も56回ハンドルが破壊されています。