return $self;
}
+sub DESTROY {
+ my $self = shift;
+ $self->reset;
+ return undef;
+}
sub app {
my( $self, $app ) = @_;
# -----------------------------------------------------------------------------
sub rollback {
my $self = shift;
- $self->xact_rollback;
- $self->disconnect;
+ my $err;
+ my $ret;
+ try {
+ $self->xact_rollback;
+ } catch Error with {
+ $err = shift
+ } finally {
+ $ret = $self->disconnect
+ };
+ throw $err if ($err);
+ return $ret;
}
sub disconnect {
my $self = shift;
- $self->session->disconnect if $self->{session};
+ $self->session->disconnect if
+ $self->{session} and
+ $self->{session}->state == OpenSRF::AppSession::CONNECTED();
delete $self->{session};
}
# -----------------------------------------------------------------------------
sub finish {
my $self = shift;
- $self->commit;
- $self->reset;
+ my $err;
+ my $ret;
+ try {
+ $self->commit;
+ } catch Error with {
+ $err = shift
+ } finally {
+ $ret = $self->reset
+ };
+ throw $err if ($err);
+ return $ret;
}