Author: spadkins
Date: Tue Sep 11 11:04:57 2007
New Revision: 9935
Modified:
p5ee/trunk/App-Context/lib/App/Context.pm
p5ee/trunk/App-Context/t/Context.t
Log:
added better support for temporary services (i.e. 'stateless session bean')
Modified: p5ee/trunk/App-Context/lib/App/Context.pm
==============================================================================
--- p5ee/trunk/App-Context/lib/App/Context.pm (original)
+++ p5ee/trunk/App-Context/lib/App/Context.pm Tue Sep 11 11:04:57 2007
@@ -461,7 +461,7 @@
$service = $session->{cache}{$type}{$name}; # check the cache
$conf = $self->{conf};
$service_conf = $conf->{$type}{$name};
- my $temporary = $args->{temporary};
+ my $temporary = ($name eq "temporary") || $args->{temporary};
my $service_initialized = ($service && ref($service) ne "HASH");
##############################################################
@@ -532,6 +532,10 @@
$service->{context} = $self;
$service_store = $session->{store}{$type}{$name};
+ if ($temporary) {
+ $service_store = undef;
+ $service->{temporary} = 1;
+ }
if ($App::DEBUG && $self->dbg(6)) {
$self->dbgprint("Context->service(): new service. conf=$conf
svc=$service sconf=$service_conf sstore=$service_store");
Modified: p5ee/trunk/App-Context/t/Context.t
==============================================================================
--- p5ee/trunk/App-Context/t/Context.t (original)
+++ p5ee/trunk/App-Context/t/Context.t Tue Sep 11 11:04:57 2007
@@ -53,6 +53,20 @@
is($results->{returnval}, "hello", "send_async_event() got right
returnval [hello]");
is($results->{errmsg}, "", "send_async_event() got right errmsg
[]");
is($results->{errnum}, 0, "send_async_event() got right errnum
[0]");
+
+ my $so1 = $context->session_object("temporary");
+ my $so2 = $context->session_object("temporary");
+ $so1->{foo} = "bar";
+ ok(! defined $so2->{foo}, "temporary session_objects (name=temporary)
don't share data");
+ ok(! defined $context->{session}{store}{SessionObject}{temporary},
"temporary session_objects (name=temporary) don't go in the store");
+ ok(! defined $context->{session}{cache}{SessionObject}{temporary},
"temporary session_objects (name=temporary) don't go in the cache");
+
+ $so1 = $context->session_object("foo", temporary => 1);
+ $so2 = $context->session_object("foo", temporary => 1);
+ $so1->{foo} = "bar";
+ ok(! defined $so2->{foo}, "temporary session_objects (temporary arg) don't
share data");
+ ok(! defined $context->{session}{store}{SessionObject}{temporary},
"temporary session_objects (temporary arg) don't go in the store");
+ ok(! defined $context->{session}{cache}{SessionObject}{temporary},
"temporary session_objects (temporary arg) don't go in the cache");
}
exit 0;