summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/builder/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/builder/src/main')
-rw-r--r--sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java104
-rw-r--r--sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java90
-rw-r--r--sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties6
3 files changed, 148 insertions, 52 deletions
diff --git a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
index 182e0abfd6..c916c5450e 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
+++ b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentPolicyBuilderImpl.java
@@ -19,6 +19,7 @@
package org.apache.tuscany.sca.builder.impl;
+import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
@@ -43,6 +44,7 @@ import org.apache.tuscany.sca.assembly.builder.Messages;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.definitions.Definitions;
import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.policy.ExtensionType;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.IntentMap;
import org.apache.tuscany.sca.policy.PolicyExpression;
@@ -74,7 +76,7 @@ public class ComponentPolicyBuilderImpl {
* @param model
*/
protected void warning(Monitor monitor, String message, Object model, Object... messageParameters) {
- Monitor.warning(monitor, this, Messages.ASSEMBLY_VALIDATION, message, messageParameters);
+ Monitor.warning(monitor, this, Messages.BUILDER_VALIDATION_BUNDLE, message, messageParameters);
}
/**
@@ -86,7 +88,7 @@ public class ComponentPolicyBuilderImpl {
* @param model
*/
protected void error(Monitor monitor, String message, Object model, Object... messageParameters) {
- Monitor.error(monitor, this, Messages.ASSEMBLY_VALIDATION, message, messageParameters);
+ Monitor.error(monitor, this, Messages.BUILDER_VALIDATION_BUNDLE, message, messageParameters);
}
@@ -145,7 +147,11 @@ public class ComponentPolicyBuilderImpl {
//becomes twice
//[{http://docs.oasis-open.org/ns/opencsa/sca/200912}managedTransaction.local,
//{http://docs.oasis-open.org/ns/opencsa/sca/200912}managedTransaction.local]
- policySubject.getPolicySets().addAll(subject.getPolicySets());
+ for (PolicySet policySet : subject.getPolicySets()){
+ if (!policySubject.getPolicySets().contains(policySet)){
+ policySubject.getPolicySets().add(policySet);
+ }
+ }
}
}
}
@@ -179,8 +185,9 @@ public class ComponentPolicyBuilderImpl {
}
for (Binding binding : componentContract.getBindings()) {
Binding componentTypeBinding = componentTypeContractBindings.get(binding.getName());
- if (binding instanceof PolicySubject) {
- inherit((PolicySubject)binding, null, false, componentTypeBinding, context);
+ if (binding instanceof PolicySubject &&
+ componentTypeBinding instanceof PolicySubject) {
+ configure((PolicySubject)binding, (PolicySubject)componentTypeBinding, Intent.Type.interaction, context);
}
}
}
@@ -204,19 +211,39 @@ public class ComponentPolicyBuilderImpl {
}
public void configure(Component component, BuilderContext context) {
+ Monitor monitor = context.getMonitor();
+
// fix up the component type by copying all implementation level
// interaction intents to *all* the component type services
for (ComponentService componentService : component.getServices()) {
- configure(componentService, component.getImplementation(), Intent.Type.interaction, context);
+ monitor.pushContext("Service: " + componentService.getName());
+ try {
+ configure(componentService, component.getImplementation(), Intent.Type.interaction, context);
+ removeConstrainedIntents(componentService, context);
+ } finally {
+ monitor.popContext();
+ }
}
// Inherit the intents and policySets from the componentType
for (ComponentReference componentReference : component.getReferences()) {
- configure(componentReference, context);
+ monitor.pushContext("Reference: " + componentReference.getName());
+ try {
+ configure(componentReference, context);
+ removeConstrainedIntents(componentReference, context);
+ } finally {
+ monitor.popContext();
+ }
}
for (ComponentService componentService : component.getServices()) {
- configure(componentService, context);
+ monitor.pushContext("Service: " + componentService.getName());
+ try {
+ configure(componentService, context);
+ removeConstrainedIntents(componentService, context);
+ } finally {
+ monitor.popContext();
+ }
}
}
@@ -263,7 +290,7 @@ public class ComponentPolicyBuilderImpl {
i2.getExcludedIntents().contains(i1) ||
checkQualifiedMutualExclusion(i1.getExcludedIntents(), i2) ||
checkQualifiedMutualExclusion(i2.getExcludedIntents(), i1))) {
- error(context.getMonitor(), "MutuallyExclusiveIntents", this, i1, i2);
+ error(context.getMonitor(), "MutuallyExclusiveIntentsAtBuild", this, i1, i2);
return true;
}
@@ -317,6 +344,10 @@ public class ComponentPolicyBuilderImpl {
}
// FIXME: [rfeng] Should we resolve the intents during the "build" phase?
resolveAndNormalize(subject, context);
+
+ checkMutualExclusion(subject, context);
+
+/*
List<Intent> intents = subject.getRequiredIntents();
int size = intents.size();
for (int i = 0; i < size; i++) {
@@ -328,6 +359,7 @@ public class ComponentPolicyBuilderImpl {
}
}
}
+*/
return false;
}
@@ -371,7 +403,7 @@ public class ComponentPolicyBuilderImpl {
if (resolved != null) {
intents.add(resolved);
} else {
- error(context.getMonitor(), "IntentNotFound", subject, i);
+ error(context.getMonitor(), "IntentNotFoundAtBuild", subject, i);
// Intent cannot be resolved
}
}
@@ -393,14 +425,14 @@ public class ComponentPolicyBuilderImpl {
break;
}
}
-
- // Remove the intents whose @contraints do not include the current element
+
// Replace unqualified intents if there is a qualified intent in the list
Set<Intent> copy = new HashSet<Intent>(intents);
for (Intent i : copy) {
if (i.getQualifiableIntent() != null) {
intents.remove(i.getQualifiableIntent());
}
+
}
// Replace qualifiable intents with the default qualified intent
@@ -415,6 +447,8 @@ public class ComponentPolicyBuilderImpl {
subject.getRequiredIntents().clear();
subject.getRequiredIntents().addAll(intents);
+ // TUSCANY-3503 - policy sets now only applied through direct
+ // or external attachement
// resolve policy set names that have been specified for the
// policy subject against the real policy sets from the
// definitions files
@@ -426,11 +460,41 @@ public class ComponentPolicyBuilderImpl {
policySets.add(definitions.getPolicySets().get(index));
} else {
// PolicySet cannot be resolved
- warning(context.getMonitor(), "PolicySetNotFound", subject, policySet);
+ warning(context.getMonitor(), "PolicySetNotFoundAtBuild", subject, policySet);
}
}
}
-
+
+ subject.getPolicySets().clear();
+ subject.getPolicySets().addAll(policySets);
+ }
+
+ protected void removeConstrainedIntents(PolicySubject subject, BuilderContext context) {
+ List<Intent> intents = subject.getRequiredIntents();
+
+ // Remove the intents whose @contrains do not include the current element
+ ExtensionType extensionType = subject.getExtensionType();
+ if(extensionType != null){
+ List<Intent> copy = new ArrayList<Intent>(intents);
+ for (Intent i : copy) {
+ if (i.getConstrainedTypes().size() > 0){
+ boolean constraintFound = false;
+ for (ExtensionType constrainedType : i.getConstrainedTypes()){
+ if (constrainedType.getType().equals(extensionType.getType()) ||
+ constrainedType.getType().equals(extensionType.getBaseType())){
+ constraintFound = true;
+ break;
+ }
+ }
+ if(!constraintFound){
+ intents.remove(i);
+ }
+ }
+ }
+ }
+ }
+
+ protected void checkIntentsResolved(PolicySubject subject, BuilderContext context) {
// find the policy sets that satisfy the intents that are now
// attached to the policy subject. From the OASIS policy
// spec CD02 rev7:
@@ -442,18 +506,16 @@ public class ComponentPolicyBuilderImpl {
for (Intent intent : subject.getRequiredIntents()) {
boolean intentMatched = false;
- loop: for (PolicySet ps : definitions.getPolicySets()) {
+ loop: for (PolicySet ps : subject.getPolicySets()) {
// FIXME: We will have to check the policy references and intentMap too
// as well as the appliesTo
if (ps.getProvidedIntents().contains(intent)) {
- policySets.add(ps);
intentMatched = true;
break;
}
for (Intent psProvidedIntent : ps.getProvidedIntents()){
if (isQualifiedBy(psProvidedIntent, intent)){
- policySets.add(ps);
intentMatched = true;
break loop;
}
@@ -462,7 +524,6 @@ public class ComponentPolicyBuilderImpl {
for (IntentMap map : ps.getIntentMaps()) {
for (Qualifier q : map.getQualifiers()) {
if (intent.equals(q.getIntent())) {
- policySets.add(ps);
intentMatched = true;
break loop;
}
@@ -476,12 +537,13 @@ public class ComponentPolicyBuilderImpl {
// TODO - this could be because the intent is provided by and extension
// and hence there is no explicit policy set. Need and extra piece
// of processing to walk through the extension models.
- warning(context.getMonitor(), "IntentNotSatisfied", subject, intent.getName(), subject.toString());
+ warning(context.getMonitor(), "IntentNotSatisfiedAtBuild", subject, intent.getName(), subject.toString());
}
}
- subject.getPolicySets().clear();
- subject.getPolicySets().addAll(policySets);
+
+ //subject.getPolicySets().clear();
+ //subject.getPolicySets().addAll(policySets);
}
diff --git a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
index c8cd50f11e..ea459bf2fa 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
+++ b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
@@ -36,6 +36,7 @@ import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
import org.apache.tuscany.sca.monitor.Monitor;
+import org.apache.tuscany.sca.policy.Intent;
/**
* A composite builder that computes policy sets based on attached intents and policy sets.
@@ -45,10 +46,13 @@ import org.apache.tuscany.sca.monitor.Monitor;
* @version $Rev$ $Date$
*/
public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl implements CompositeBuilder {
- private static final String BUILDER_VALIDATION_BUNDLE = "org.apache.tuscany.sca.builder.builder-validation-messages";
+ private CompositeBuilder policyAppliesToBuilder = null;
+
public CompositePolicyBuilderImpl(ExtensionPointRegistry registry) {
super(registry);
+
+ policyAppliesToBuilder = new PolicyAppliesToBuilderImpl(registry);
}
public String getID() {
@@ -57,6 +61,7 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
public Composite build(Composite composite, BuilderContext context) throws CompositeBuilderException {
computePolicies(composite, context);
+ checkPolicies(composite, context);
buildPolicies(composite, context);
return composite;
}
@@ -94,20 +99,25 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
for (Endpoint ep : componentService.getEndpoints()) {
if (componentService.getInterfaceContract() != null) {
// Inherit from the component.service.interface
- inherit(ep, null, true, componentService.getInterfaceContract().getInterface());
+ inherit(ep, Intent.Type.interaction, true, componentService.getInterfaceContract().getInterface());
}
// Inherit from composite/component/service
- inherit(ep, null, true, composite, ep.getComponent(), ep.getService());
+ inherit(ep, Intent.Type.interaction, true, composite, ep.getComponent(), ep.getService());
// Inherit from binding
- inherit(ep, null, true, ep.getBinding());
+ inherit(ep, Intent.Type.interaction, true, ep.getBinding());
// Replace profile intents with their required intents
- // Remove the intents whose @contraints do not include the current element
// Replace unqualified intents if there is a qualified intent in the list
// Replace qualifiable intents with the default qualied intent
resolveAndNormalize(ep, context);
+
+ // Remove the intents whose @contraints do not include the current element
+ removeConstrainedIntents(ep, context);
+
+ // check that all intents are resolved
+ checkIntentsResolved(ep, context);
// check that the resulting endpoint has no mutually exclusive intents
checkMutualExclusion(ep, context);
@@ -133,20 +143,25 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
// Inherit from the component.reference.interface
if (componentReference.getInterfaceContract() != null) {
- inherit(epr, null, true, componentReference.getInterfaceContract().getInterface());
+ inherit(epr, Intent.Type.interaction, true, componentReference.getInterfaceContract().getInterface());
}
// Inherit from composite/component/reference
- inherit(epr, null, true, composite, epr.getComponent(), epr.getReference());
+ inherit(epr, Intent.Type.interaction, true, composite, epr.getComponent(), epr.getReference());
// Inherit from binding
- inherit(epr, null, true, epr.getBinding());
+ inherit(epr, Intent.Type.interaction, true, epr.getBinding());
// Replace profile intents with their required intents
- // Remove the intents whose @contraints do not include the current element
// Replace unqualified intents if there is a qualified intent in the list
- // Replace qualifiable intents with the default qualied intent
+ // Replace qualifiable intents with the default qualified intent
resolveAndNormalize(epr, context);
+
+ // Remove the intents whose @contraints do not include the current element
+ removeConstrainedIntents(epr, context);
+
+ // check that all intents are resolved
+ checkIntentsResolved(epr, context);
// check that the resulting endpoint reference has no mutually exclusive intents
checkMutualExclusion(epr, context);
@@ -157,12 +172,19 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
}
if (implementation instanceof Composite) {
- inherit(implementation, null, true, component, composite);
+ inherit(implementation, Intent.Type.implementation, true, component, composite);
+ checkIntentsResolved(implementation, context);
computePolicies((Composite)implementation, context);
} else {
resolveAndCheck(implementation, context);
if (implementation != null) {
- inherit(implementation, null, true, component, composite);
+ inherit(implementation, Intent.Type.implementation, true, component, composite);
+
+ // Remove the intents whose @contraints do not include the current element
+ removeConstrainedIntents(implementation, context);
+
+ // check that all intents are resolved
+ checkIntentsResolved(implementation, context);
}
}
} finally {
@@ -173,6 +195,17 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
monitor.popContext();
}
}
+
+ /**
+ * This is mainly about removing policies that don't "applyTo" the element where
+ * they have ended up after all the attachment and inheritance processing
+ *
+ * @param composite
+ * @param context
+ */
+ protected void checkPolicies(Composite composite, BuilderContext context) throws CompositeBuilderException{
+ policyAppliesToBuilder.build(composite, context);
+ }
protected void buildPolicies(Composite composite, BuilderContext context) {
@@ -192,12 +225,11 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
// check that only one policy language is present in the endpoint's policy sets
if (policyNames.size() > 1){
- Monitor.error(context.getMonitor(),
- this,
- BUILDER_VALIDATION_BUNDLE,
- "MultiplePolicyLanguagesInEP",
- ep.toString(),
- policyNames.toString());
+ error(context.getMonitor(),
+ "MultiplePolicyLanguagesInEP",
+ this,
+ ep.toString(),
+ policyNames.toString());
} else {
for (QName policyType : policyNames) {
PolicyBuilder builder = builders.getPolicyBuilder(policyType);
@@ -215,12 +247,11 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
// check that only one policy language is present in the endpoint references's policy sets
if (policyNames.size() > 1){
- Monitor.error(context.getMonitor(),
- this,
- BUILDER_VALIDATION_BUNDLE,
- "MultiplePolicyLanguagesInEPR",
- epr.toString(),
- policyNames.toString());
+ error(context.getMonitor(),
+ "MultiplePolicyLanguagesInEPR",
+ this,
+ epr.toString(),
+ policyNames.toString());
} else {
for (QName policyType : policyNames) {
PolicyBuilder builder = builders.getPolicyBuilder(policyType);
@@ -238,12 +269,11 @@ public class CompositePolicyBuilderImpl extends ComponentPolicyBuilderImpl imple
// check that only one policy language is present in the implementations's policy sets
if (policyNames.size() > 1){
- Monitor.error(context.getMonitor(),
- this,
- BUILDER_VALIDATION_BUNDLE,
- "MultiplePolicyLanguagesInImplementation",
- component.toString(),
- policyNames.toString());
+ error(context.getMonitor(),
+ "MultiplePolicyLanguagesInImplementation",
+ this,
+ component.toString(),
+ policyNames.toString());
} else {
for (QName policyType : policyNames) {
PolicyBuilder builder = builders.getPolicyBuilder(policyType);
diff --git a/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties b/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
index 93bc9e8ee3..f16b24f0dc 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
+++ b/sca-java-2.x/trunk/modules/builder/src/main/resources/org/apache/tuscany/sca/builder/builder-validation-messages.properties
@@ -26,4 +26,8 @@ PolicyDOMModelMissmatch = The DOM node which has been found as a result of evalu
MultiplePolicyLanguagesInEP = The policy sets for endpoint {0} contain policies specified in more than one language {1}
MultiplePolicyLanguagesInEPR = The policy sets for endpoint reference {0} contain policies specified in more than one language {1}
MultiplePolicyLanguagesInImpl = The policy sets for component {0} implementation contain policies specified in more than one language {1}
-JaxWSClientAsyncMethodsNotAllowed = [JCA100006] JAX-WS client-side asynchronous pooling and callback methods are not allowed in service interfaces
+JaxWSClientAsyncMethodsNotAllowed = [CA100006] JAX-WS client-side asynchronous pooling and callback methods are not allowed in service interfaces
+PolicySetNotFoundAtBuild = PolicySet {0} is not defined in SCA definitions
+IntentNotSatisfiedAtBuild = The intent {0} associated with policy subject {1} has no matching policy set
+MutuallyExclusiveIntentsAtBuild = [POL40009,ASM60009,ASM60010] Intent {0} and {1} are mutually exclusive
+IntentNotFoundAtBuild = = Intent {0} is not defined in SCA definitions