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;

Reply via email to