Author: bdaniel
Date: Fri Jun 17 21:22:24 2011
New Revision: 1137033
URL: http://svn.apache.org/viewvc?rev=1137033&view=rev
Log:
Only create tx impl interceptors for valid policies
Modified:
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
Modified:
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java?rev=1137033&r1=1137032&r2=1137033&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/core-spi/src/main/java/org/apache/tuscany/sca/provider/BasePolicyProvider.java
Fri Jun 17 21:22:24 2011
@@ -30,6 +30,7 @@ import org.apache.tuscany.sca.assembly.E
import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.invocation.InvocationChain;
import org.apache.tuscany.sca.invocation.PhasedInterceptor;
+import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicyContainer;
import org.apache.tuscany.sca.policy.PolicyExpression;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -52,9 +53,29 @@ public abstract class BasePolicyProvider
this.subject = subject;
}
+ protected List<T> findPoliciesWithProvidedIntents(List<Intent> intents) {
+ List<PolicySet> applicablePolicySets = new ArrayList<PolicySet>();
+ List<PolicySet> policySets = subject.getPolicySets();
+ for ( PolicySet ps : policySets ) {
+ List<Intent> provided = ps.getProvidedIntents();
+ for ( Intent intent : intents ) {
+ if ( provided.contains(intent) ) {
+ applicablePolicySets.add(ps);
+ continue;
+ }
+
+ }
+ }
+ return findPolicies(applicablePolicySets);
+ }
+
protected List<T> findPolicies() {
+ return findPolicies(subject.getPolicySets());
+ }
+
+ private List<T> findPolicies(List<PolicySet> policySets) {
List<T> policies = new ArrayList<T>();
- List<PolicySet> policySets = subject.getPolicySets();
+
for (PolicySet ps : policySets) {
for (Object p : ps.getPolicies()) {
if (policyType.isInstance(p)) {
Modified:
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
URL:
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java?rev=1137033&r1=1137032&r2=1137033&view=diff
==============================================================================
---
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
(original)
+++
tuscany/sca-java-2.x/trunk/modules/policy-transaction-runtime/src/main/java/org/apache/tuscany/sca/policy/transaction/runtime/TransactionImplementationPolicyProvider.java
Fri Jun 17 21:22:24 2011
@@ -40,7 +40,8 @@ public class TransactionImplementationPo
}
public PhasedInterceptor createInterceptor(Operation operation) {
- List<TransactionPolicy> policies = findPolicies();
+ // Only create an interceptor for the policy that matches the required
intent.
+ List<TransactionPolicy> policies =
findPoliciesWithProvidedIntents(subject.getRequiredIntents());
return policies.isEmpty() ? null : new TransactionInterceptor(helper,
false, null, policies.get(0), getPhase());
}