You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lenya.apache.org by an...@apache.org on 2005/04/12 23:16:09 UTC

svn commit: r161122 - lenya/trunk/src/webapp/lenya/usecases/usecases.js

Author: andreas
Date: Tue Apr 12 14:16:09 2005
New Revision: 161122

URL: http://svn.apache.org/viewcvs?view=rev&rev=161122
Log:
usecases.js: allow usecase to rollback the transition if an exception was thrown in the flowscript

Modified:
    lenya/trunk/src/webapp/lenya/usecases/usecases.js

Modified: lenya/trunk/src/webapp/lenya/usecases/usecases.js
URL: http://svn.apache.org/viewcvs/lenya/trunk/src/webapp/lenya/usecases/usecases.js?view=diff&r1=161121&r2=161122
==============================================================================
--- lenya/trunk/src/webapp/lenya/usecases/usecases.js (original)
+++ lenya/trunk/src/webapp/lenya/usecases/usecases.js Tue Apr 12 14:16:09 2005
@@ -117,16 +117,33 @@
         var ready = false;
         while (!ready) {
 
-            var viewUri = "view/" + menu + "/" + view.getTemplateURI();
-            if (cocoon.log.isDebugEnabled())
-               cocoon.log.debug("usecases.js::executeUsecase() in usecase " + usecaseName + ", creating view, calling Cocoon with viewUri = [" + viewUri + "]");
+            try {
+                var viewUri = "view/" + menu + "/" + view.getTemplateURI();
+                if (cocoon.log.isDebugEnabled())
+                    cocoon.log.debug("usecases.js::executeUsecase() in usecase " + usecaseName + ", creating view, calling Cocoon with viewUri = [" + viewUri + "]");
         
-            cocoon.sendPageAndWait(viewUri, {
-                "usecase" : proxy
-            });
+                cocoon.sendPageAndWait(viewUri, {
+                    "usecase" : proxy
+                });
+            }
+            catch (exception) {
+                /* if an exception was thrown by the view, allow the usecase to rollback the transition */
+                try {
+                    usecaseResolver = cocoon.getComponent("org.apache.lenya.cms.usecase.UsecaseResolver");
+                    usecase = usecaseResolver.resolve(usecaseName);
+                    proxy.setup(usecase);
+                    usecase.cancel();
+                    throw exception;
+                }
+                finally {
+                    usecaseResolver.release(usecase);
+                    usecase = undefined;
+                    cocoon.releaseComponent(usecaseResolver);
+                }
+            }
             
             if (cocoon.log.isDebugEnabled())
-               cocoon.log.debug("usecases.js::executeUsecase() in usecase " + usecaseName + ", after view, now advancing in usecase");
+                cocoon.log.debug("usecases.js::executeUsecase() in usecase " + usecaseName + ", after view, now advancing in usecase");
         
             try {
                 usecaseResolver = cocoon.getComponent("org.apache.lenya.cms.usecase.UsecaseResolver");
@@ -156,6 +173,11 @@
                 proxy = new Packages.org.apache.lenya.cms.usecase.UsecaseProxy(usecase);
                 targetUrl = usecase.getTargetURL(success);
             }
+            catch (exception) {
+                /* allow usecase to rollback the transition */
+                usecase.cancel();
+                throw exception;
+            }
             finally {
                 usecaseResolver.release(usecase);
                 usecase = undefined;
@@ -177,6 +199,11 @@
                 }
             }
             targetUrl = usecase.getTargetURL(success);
+        }
+        catch (exception) {
+            /* allow usecase to rollback the transition */
+            usecase.cancel();
+            throw exception;
         }
         finally {
             usecaseResolver.release(usecase);



---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@lenya.apache.org
For additional commands, e-mail: commits-help@lenya.apache.org