You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ode.apache.org by as...@apache.org on 2006/11/23 01:58:51 UTC

svn commit: r478415 - in /incubator/ode/trunk: bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/ bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/ bpel-obj/src/main/java/org/apache/ode/bpel/o/

Author: assaf
Date: Wed Nov 22 16:58:50 2006
New Revision: 478415

URL: http://svn.apache.org/viewvc?view=rev&rev=478415
Log:
Added atomic attribute to scopes

Modified:
    incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
    incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/CommonCompilationMessages.java
    incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Scope.java
    incubator/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OScope.java

Modified: incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java?view=diff&rev=478415&r1=478414&r2=478415
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java (original)
+++ incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/BpelCompiler.java Wed Nov 22 16:58:50 2006
@@ -128,6 +128,7 @@
             new HashMap<Class,ActivityGenerator>();
 
     private boolean _supressJoinFailure = false;
+    private boolean _atomicScope = false;
 
     /** Syntactic scope stack. */
     private StructureStack _structureStack = new StructureStack();
@@ -967,83 +968,95 @@
 
         oscope.debugInfo = createDebugInfo(src, src.toString());
 
-        compile(oscope, src, new Runnable() {
-            public void run() {
-                for (Variable var : src.getVariables()) {
-                    try {
-                        compile(var);
-                    } catch (CompilationException ce) {
-                        recoveredFromError(var, ce);
+        boolean previousAtomicScope = _atomicScope;
+        if (src.getAtomicScope() != null) {
+            boolean newValue = src.getAtomicScope().booleanValue();
+            if (_atomicScope)
+                throw new CompilationException(__cmsgs.errAtomicScopeNesting(newValue));
+            else
+                oscope.atomicScope = _atomicScope = newValue;
+        }
+        try {
+            compile(oscope, src, new Runnable() {
+                public void run() {
+                    for (Variable var : src.getVariables()) {
+                        try {
+                            compile(var);
+                        } catch (CompilationException ce) {
+                            recoveredFromError(var, ce);
+                        }
                     }
-                }
 
-                for (CorrelationSet cset : src.getCorrelationSetDecls()) {
-                    try {
-                        compile(cset);
-                    } catch (CompilationException ce) {
-                        recoveredFromError(cset, ce);
+                    for (CorrelationSet cset : src.getCorrelationSetDecls()) {
+                        try {
+                            compile(cset);
+                        } catch (CompilationException ce) {
+                            recoveredFromError(cset, ce);
+                        }
                     }
-                }
 
-                for (PartnerLink plink : src.getPartnerLinks()) {
-                    try {
-                        compile(plink);
-                    } catch (CompilationException ce) {
-                        recoveredFromError(plink, ce);
+                    for (PartnerLink plink : src.getPartnerLinks()) {
+                        try {
+                            compile(plink);
+                        } catch (CompilationException ce) {
+                            recoveredFromError(plink, ce);
+                        }
                     }
-                }
 
 
-                if (!src.getEvents().isEmpty() || !src.getAlarms().isEmpty()) {
-                    oscope.eventHandler = new OEventHandler(_oprocess);
-                    oscope.eventHandler.debugInfo = createDebugInfo(src,"Event Handler for " + src);
-                }
+                    if (!src.getEvents().isEmpty() || !src.getAlarms().isEmpty()) {
+                        oscope.eventHandler = new OEventHandler(_oprocess);
+                        oscope.eventHandler.debugInfo = createDebugInfo(src,"Event Handler for " + src);
+                    }
 
 
-                for (OnEvent onEvent : src.getEvents()) {
-                    try {
-                        compile(onEvent);
-                    } catch (CompilationException ce) {
-                        recoveredFromError(src, ce);
+                    for (OnEvent onEvent : src.getEvents()) {
+                        try {
+                            compile(onEvent);
+                        } catch (CompilationException ce) {
+                            recoveredFromError(src, ce);
+                        }
                     }
-                }
 
-                for (OnAlarm onAlarm : src.getAlarms()) {
-                    try {
-                        compile(onAlarm);
-                    } catch (CompilationException ce) {
-                        recoveredFromError(src, ce);
+                    for (OnAlarm onAlarm : src.getAlarms()) {
+                        try {
+                            compile(onAlarm);
+                        } catch (CompilationException ce) {
+                            recoveredFromError(src, ce);
+                        }
+
                     }
 
-                }
+                    if (init != null)
+                        try {
+                            init.run();
+                        } catch (CompilationException ce) {
+                            recoveredFromError(src,ce);
+                        }
+
 
-                if (init != null)
                     try {
-                        init.run();
-                    } catch (CompilationException ce) {
-                        recoveredFromError(src,ce);
+                        compile(src.getCompensationHandler());
+                    } catch (CompilationException bce) {
+                        recoveredFromError(src.getCompensationHandler(), bce);
                     }
 
+                    try {
+                        compile(src.getTerminationHandler());
+                    } catch (CompilationException bce) {
+                        recoveredFromError(src.getTerminationHandler(), bce);
+                    }
 
-                try {
-                    compile(src.getCompensationHandler());
-                } catch (CompilationException bce) {
-                    recoveredFromError(src.getCompensationHandler(), bce);
-                }
-
-                try {
-                    compile(src.getTerminationHandler());
-                } catch (CompilationException bce) {
-                    recoveredFromError(src.getTerminationHandler(), bce);
-                }
-
-                try {
-                    compile(src.getFaultHandler());
-                } catch (CompilationException bce) {
-                    recoveredFromError(src.getFaultHandler(), bce);
+                    try {
+                        compile(src.getFaultHandler());
+                    } catch (CompilationException bce) {
+                        recoveredFromError(src.getFaultHandler(), bce);
+                    }
                 }
-            }
-        });
+            });
+        } finally {
+            _atomicScope = previousAtomicScope;
+        }
 
         return oscope;
     }

Modified: incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/CommonCompilationMessages.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/CommonCompilationMessages.java?view=diff&rev=478415&r1=478414&r2=478415
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/CommonCompilationMessages.java (original)
+++ incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/CommonCompilationMessages.java Wed Nov 22 16:58:50 2006
@@ -418,4 +418,11 @@
     public CompilationMessage errInvalidRetryDelayValue(String message) {
         return this.formatCompilationMessage("The retryDelay attribute must be a positive integer, found {0}", message);
     }
+
+    public CompilationMessage errAtomicScopeNesting(boolean atomic) {
+        if (atomic)
+            return this.formatCompilationMessage("Cannot nest atomic scopes inside each other.");
+        else
+            return this.formatCompilationMessage("A scope enclosed inside an atomic scope cannot declare itself as not atomic");
+    }
 }

Modified: incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Scope.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Scope.java?view=diff&rev=478415&r1=478414&r2=478415
==============================================================================
--- incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Scope.java (original)
+++ incubator/ode/trunk/bpel-compiler/src/main/java/org/apache/ode/bpel/compiler/bom/Scope.java Wed Nov 22 16:58:50 2006
@@ -151,6 +151,16 @@
         return false;
     }
 
+
+    public Boolean getAtomicScope() {
+        String value = getAttribute("atomic", null);
+        if ("yes".equals(value))
+            return Boolean.TRUE;
+        if ("no".equals(value))
+            return Boolean.FALSE;
+        return null;
+    }
+
     /**
      * Get a partnerLink declared in this scope.
      * 

Modified: incubator/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OScope.java
URL: http://svn.apache.org/viewvc/incubator/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OScope.java?view=diff&rev=478415&r1=478414&r2=478415
==============================================================================
--- incubator/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OScope.java (original)
+++ incubator/ode/trunk/bpel-obj/src/main/java/org/apache/ode/bpel/o/OScope.java Wed Nov 22 16:58:50 2006
@@ -60,6 +60,8 @@
 
     public boolean implicitScope;
 
+    public boolean atomicScope;
+
     public OScope(OProcess owner, OActivity parent) {
         super(owner, parent);
     }
@@ -124,6 +126,16 @@
 
     public void addCorrelationSet(CorrelationSet ocset) {
         correlationSets.put(ocset.name, ocset);
+    }
+
+    public boolean isInAtomicScope() {
+        OActivity current = this;
+        while (current != null) {
+            if (current instanceof OScope && ((OScope)current).atomicScope)
+                return true;
+            current = current.getParent();
+        }
+        return false;
     }
 
     public String toString() {