You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by bd...@apache.org on 2010/07/26 16:29:35 UTC

svn commit: r979307 - in /tuscany/sca-java-2.x/trunk/modules/builder/src/main: java/org/apache/tuscany/sca/builder/impl/ resources/org/apache/tuscany/sca/builder/

Author: bdaniel
Date: Mon Jul 26 14:29:34 2010
New Revision: 979307

URL: http://svn.apache.org/viewvc?rev=979307&view=rev
Log:
Add more intent validation and fix up inner composite policy set processing

Modified:
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAttachmentBuilderImpl.java
    tuscany/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java?rev=979307&r1=979306&r2=979307&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java Mon Jul 26 14:29:34 2010
@@ -33,7 +33,6 @@ import org.apache.tuscany.sca.assembly.B
 import org.apache.tuscany.sca.assembly.Component;
 import org.apache.tuscany.sca.assembly.ComponentReference;
 import org.apache.tuscany.sca.assembly.ComponentService;
-import org.apache.tuscany.sca.assembly.Composite;
 import org.apache.tuscany.sca.assembly.CompositeReference;
 import org.apache.tuscany.sca.assembly.CompositeService;
 import org.apache.tuscany.sca.assembly.Contract;
@@ -43,7 +42,6 @@ import org.apache.tuscany.sca.assembly.S
 import org.apache.tuscany.sca.assembly.builder.BuilderContext;
 import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
 import org.apache.tuscany.sca.assembly.builder.Messages;
-import org.apache.tuscany.sca.assembly.xml.Constants;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.definitions.Definitions;
 import org.apache.tuscany.sca.monitor.Monitor;
@@ -465,23 +463,10 @@ public class ComponentPolicyBuilderImpl 
     
     protected void removeConstrainedIntents(PolicySubject subject, BuilderContext context) {
         List<Intent> intents = subject.getRequiredIntents();
-        QName baseType = null;
-        QName type = null;
         
         // Remove the intents whose @contrains do not include the current element
         ExtensionType extensionType = subject.getExtensionType();
-        
-        // Need to check elements that don't have an extension type, like Composites
-        // References don't have an extension type, but they're checked at wiring time
-        if ( extensionType == null ) {
-        	if ( subject instanceof Composite ) 
-        		type = Constants.COMPOSITE_QNAME;
-        } else {
-        	type = extensionType.getType();
-        	baseType = extensionType.getBaseType();
-        }
-        
-        if(type != null){
+        if(extensionType != null){
             List<Intent> copy = new ArrayList<Intent>(intents);
             for (Intent i : copy) {
             	List<ExtensionType> constrainedTypes = i.getConstrainedTypes();
@@ -491,8 +476,8 @@ public class ComponentPolicyBuilderImpl 
                 if (constrainedTypes.size() > 0){
                     boolean constraintFound = false;
                     for (ExtensionType constrainedType : i.getConstrainedTypes()){
-                        if (constrainedType.getType().equals(type) ||
-                            constrainedType.getType().equals(baseType)){
+                        if (constrainedType.getType().equals(extensionType.getType()) ||
+                            constrainedType.getType().equals(extensionType.getBaseType())){
                             constraintFound = true;
                             break;
                         }

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java?rev=979307&r1=979306&r2=979307&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java Mon Jul 26 14:29:34 2010
@@ -197,18 +197,10 @@ public class CompositePolicyBuilderImpl 
                         }
                     }
 
-                    if (implementation instanceof Composite) {
-                    	
-                    	// POL-4009 componentType attached policySets are ignored when policySets are 
-                    	// attached to the using component definition.
-                    	if ( !component.getPolicySets().isEmpty() || !composite.getPolicySets().isEmpty() ) {
-                    		implementation.getPolicySets().clear();
-                    	}
-                    		
+                    if (implementation instanceof Composite) {                    	                     		
                     	resolveAndCheck(implementation, context);
                         inherit(implementation, Intent.Type.implementation, true, component, composite);                                             
                         computePolicies((Composite)implementation, context);
-                        removeConstrainedIntents(implementation, context);
                         expandDefaultIntents(implementation,context);
                         checkIntentsResolved(implementation,context);
                     } else {
@@ -254,12 +246,41 @@ public class CompositePolicyBuilderImpl 
     									error(context.getMonitor(), 
     										"TransactedOneWayWithManagedTransactionLocal", 
     		    			    			this,
+    		    			    			"reference",
     		    			    			epr.getComponent().getName(),
     		    			    			epr.getReference().getName());
+    								} else if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(eprIntent.getName())) {
+    									error(context.getMonitor(),
+    											"PropagatesTransactionWithLocalTran",
+    											this,
+    											"reference",
+    											epr.getComponent().getName(),
+    											epr.getReference().getName());
+    								}
+    							}
+    						}
+    					}    	
+    					for ( ComponentService service : component.getServices() ) {
+    						for ( Endpoint ep : service.getEndpoints() ) {
+    							for ( Intent epIntent : ep.getRequiredIntents() ) {
+    								if ( Constants.TRANSACTED_ONE_WAY_INTENT.equals(epIntent.getName())) {
+    									error(context.getMonitor(),
+    											"TransactedOneWayWithManagedTransactionLocal",
+    											this,
+    											"service",
+    											ep.getComponent().getName(),
+    											ep.getService().getName());
+    								} else if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(epIntent.getName())) {
+    									error(context.getMonitor(),
+    											"PropagatesTransactionWithLocalTran",
+    											this,
+    											"service",
+    											ep.getComponent().getName(),
+    											ep.getService().getName());
     								}
     							}
     						}
-    					}    			
+    					}
     				} else if ( Constants.NO_MANAGED_TRANSACTION_INTENT.equals(implIntent.getName())) {
     					for ( ComponentService service : component.getServices() ) {
     						for ( Endpoint ep : service.getEndpoints() ) {
@@ -268,12 +289,27 @@ public class CompositePolicyBuilderImpl 
     									error(context.getMonitor(), 
     										"PropagatesTransactionWithNoManagedTran", 
     		    			    			this,
+    		    			    			"service",
     		    			    			ep.getComponent().getName(),
     		    			    			ep.getService().getName());
     								}
     							}
     						}
     					}
+    					for ( ComponentReference reference : component.getReferences() ) {
+    						for ( EndpointReference epr : reference.getEndpointReferences() ) {
+    							for ( Intent eprIntent : epr.getRequiredIntents() ) {
+    								if ( Constants.PROPAGATES_TRANSACTION_INTENT.equals(eprIntent.getName())) {
+    									error(context.getMonitor(),
+    											"PropagatesTransactionWithNoManagedTran",
+    											this,
+    											"reference",
+    											epr.getComponent().getName(),
+    											epr.getReference().getName());
+    								}
+    							}
+    						}
+    					}
     				}
     			}
     			     		

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAttachmentBuilderImpl.java
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAttachmentBuilderImpl.java?rev=979307&r1=979306&r2=979307&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAttachmentBuilderImpl.java (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/PolicyAttachmentBuilderImpl.java Mon Jul 26 14:29:34 2010
@@ -112,16 +112,7 @@ public class PolicyAttachmentBuilderImpl
             if (definitions == null || (definitions.getPolicySets().isEmpty() && definitions.getExternalAttachments().isEmpty()) ) {
                 return composite;
             }
-            // Recursively apply the xpath against the composites referenced by <implementation.composite>
-            for (Component component : composite.getComponents()) {
-                Implementation impl = component.getImplementation();
-                if (impl instanceof Composite) {
-                    Composite patched = applyXPath((Composite)impl, definitions, monitor);
-                    if (patched != impl) {
-                        component.setImplementation(patched);
-                    }
-                }
-            }
+     
             
             Document document = null;
     
@@ -149,6 +140,23 @@ public class PolicyAttachmentBuilderImpl
             	}
             }
             
+            // Recursively apply the xpath against the composites referenced by <implementation.composite>
+            // If the composite or component has policy sets attached, we have to ignore policy sets
+            // attached to the inner composite. 
+            if ( composite.getPolicySets().isEmpty() ) {
+            	for (Component component : composite.getComponents()) {
+            		if ( component.getPolicySets().isEmpty() ) {
+            			Implementation impl = component.getImplementation();
+            			if (impl instanceof Composite) {                	               
+            				Composite patched = applyXPath((Composite)impl, definitions, monitor);                                       
+            				if (patched != impl) {                    	                    	                    	                    	
+            					component.setImplementation(patched);
+            				}
+            			}
+            		}
+            	}
+            }
+            
             return composite;
         } finally {
             monitor.popContext();

Modified: tuscany/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
URL: http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties?rev=979307&r1=979306&r2=979307&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties (original)
+++ tuscany/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties Mon Jul 26 14:29:34 2010
@@ -32,8 +32,8 @@ IntentNotSatisfiedAtBuild  = The intent 
 MutuallyExclusiveIntentsAtBuild = [POL40009,ASM60009,ASM60010,JCA70001,JCA70003] Intent {0} and {1} are mutually exclusive
 IntentNotFoundAtBuild = Intent {0} is not defined in SCA definitions
 NoListenerIntentSpecifiedOnService = The noListener intent may only be specified on a reference.
-TransactedOneWayWithManagedTransactionLocal = The Component Reference {1} can not require transactedOneWay because the implementation for Component {0} requires managedTransaction.local
-PropagatesTransactionWithNoManagedTran = The component service {1} can not require propagatesTransaction because the implementation for component {0} requires noManagedTransaction
+TransactedOneWayWithManagedTransactionLocal = The Component {0} {2} can not require transactedOneWay because the implementation for Component {1} requires managedTransaction.local
+PropagatesTransactionWithNoManagedTran = The component {0} {2} can not require propagatesTransaction because the implementation for component {1} requires noManagedTransaction
 TransactedOneWayWithTwoWayOp = The component reference {0} can not require transactedOneWay because the operation {1} is a two way operation
 ImmediateOneWayWithTwoWayOp = The component reference {0} can not require immediateOneWay because the operation {1} is a two way operation
-
+PropagatesTransactionWithLocalTran = The component {0} {2} can not require propagatesTransaction because the implementation for component {1} requires managedTransaction.local