Author: bdaniel
Date: Mon Jul 26 04:41:54 2010
New Revision: 979158
URL: http://svn.apache.org/viewvc?rev=979158&view=rev
Log:
Add transaction intent validation
Modified:
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/CompositePolicyBuilderImpl.java
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=979158&r1=979157&r2=979158&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 04:41:54 2010
@@ -37,7 +37,9 @@ import org.apache.tuscany.sca.assembly.b
import org.apache.tuscany.sca.assembly.builder.CompositeBuilder;
import org.apache.tuscany.sca.assembly.builder.CompositeBuilderException;
import org.apache.tuscany.sca.assembly.builder.PolicyBuilder;
+import org.apache.tuscany.sca.assembly.xml.Constants;
import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.Operation;
import org.apache.tuscany.sca.monitor.Monitor;
import org.apache.tuscany.sca.policy.Intent;
import org.apache.tuscany.sca.policy.PolicySet;
@@ -105,14 +107,14 @@ public class CompositePolicyBuilderImpl
for (Endpoint ep :
componentService.getEndpoints()) {
if (componentService.getInterfaceContract() !=
null) {
// Inherit from the
component.service.interface
- inherit(ep, Intent.Type.interaction, true,
componentService.getInterfaceContract().getInterface());
+ inherit(ep, null, true,
componentService.getInterfaceContract().getInterface());
}
// Inherit from binding
- inherit(ep, Intent.Type.interaction, true,
ep.getBinding());
+ inherit(ep, null, true, ep.getBinding());
// Inherit from composite/component/service
- inherit(ep, Intent.Type.interaction, true,
ep.getService(), ep.getComponent(), composite );
+ inherit(ep, null, true, ep.getService(),
ep.getComponent(), composite );
@@ -160,14 +162,14 @@ public class CompositePolicyBuilderImpl
// Inherit from the
component.reference.interface
if (componentReference.getInterfaceContract()
!= null) {
- inherit(epr, Intent.Type.interaction,
true, componentReference.getInterfaceContract().getInterface());
+ inherit(epr, null, true,
componentReference.getInterfaceContract().getInterface());
}
// Inherit from binding
- inherit(epr, Intent.Type.interaction, true,
epr.getBinding());
+ inherit(epr, null, true, epr.getBinding());
// Inherit from composite/component/reference
- inherit(epr, Intent.Type.interaction, true,
epr.getReference(), epr.getComponent(), composite);
+ inherit(epr, null, true, epr.getReference(),
epr.getComponent(), composite);
@@ -203,6 +205,7 @@ public class CompositePolicyBuilderImpl
implementation.getPolicySets().clear();
}
+ resolveAndCheck(implementation, context);
inherit(implementation, Intent.Type.implementation,
true, component, composite);
computePolicies((Composite)implementation, context);
expandDefaultIntents(implementation,context);
@@ -228,12 +231,89 @@ public class CompositePolicyBuilderImpl
monitor.popContext();
}
}
+ removeConstrainedIntents(composite, context);
} finally {
monitor.popContext();
}
}
-
- private void checkForNoListenerIntent(Endpoint ep, BuilderContext context)
{
+
+ private void validateTransactionIntents(Composite composite,
BuilderContext context) {
+
+ for ( Component component : composite.getComponents() ) {
+ if ( component.getImplementation() != null ) {
+ if ( component.getImplementation() instanceof Composite
)
+ validateTransactionIntents((Composite)
component.getImplementation(), context);
+
+ for ( Intent implIntent :
component.getImplementation().getRequiredIntents() ) {
+ if (
Constants.MANAGED_TRANSACTION_LOCAL_INTENT.equals(implIntent.getName() ) ) {
+ for ( ComponentReference reference :
component.getReferences() ) {
+ for ( EndpointReference epr :
reference.getEndpointReferences() ) {
+ for ( Intent eprIntent
: epr.getRequiredIntents() ) {
+ if (
Constants.TRANSACTED_ONE_WAY_INTENT.equals(eprIntent.getName())) {
+
error(context.getMonitor(),
+
"TransactedOneWayWithManagedTransactionLocal",
+ this,
+
epr.getComponent().getName(),
+
epr.getReference().getName());
+ }
+ }
+ }
+ }
+ } else if (
Constants.NO_MANAGED_TRANSACTION_INTENT.equals(implIntent.getName())) {
+ for ( ComponentService service :
component.getServices() ) {
+ for ( Endpoint ep :
service.getEndpoints() ) {
+ for ( Intent epIntent :
ep.getRequiredIntents() ) {
+ if (
Constants.PROPAGATES_TRANSACTION_INTENT.equals(epIntent.getName())) {
+
error(context.getMonitor(),
+
"PropagatesTransactionWithNoManagedTran",
+ this,
+
ep.getComponent().getName(),
+
ep.getService().getName());
+ }
+ }
+ }
+ }
+ }
+ }
+
+
+ for ( ComponentReference reference :
component.getReferences()) {
+ for ( EndpointReference epr :
reference.getEndpointReferences() ) {
+ for ( Intent eprIntent :
epr.getRequiredIntents() ) {
+ if (
Constants.TRANSACTED_ONE_WAY_INTENT.equals(eprIntent.getName()) ) {
+ for ( Operation o :
epr.getComponentReferenceInterfaceContract().getInterface().getOperations() ) {
+ if (
!o.isNonBlocking() ) {
+
error(context.getMonitor(),
+
"TransactedOneWayWithTwoWayOp",
+
this,
+
reference.getName(),
+
o.getName());
+ }
+
+ }
+ } else if (
Constants.IMMEDIATE_ONE_WAY_INTENT.equals(eprIntent.getName())) {
+ for ( Operation o :
epr.getComponentReferenceInterfaceContract().getInterface().getOperations() ) {
+ if (
!o.isNonBlocking() ) {
+
error(context.getMonitor(),
+
"ImmediateOneWayWithTwoWayOp",
+
this,
+
reference.getName(),
+
o.getName());
+ }
+
+ }
+ }
+ }
+
+ }
+ }
+ }
+ }
+ }
+
+
+
+ private void checkForNoListenerIntent(Endpoint ep, BuilderContext
context) {
PolicyHelper helper = new PolicyHelper();
if ( helper.getIntent(ep, NOLISTENER_INTENT) != null ) {
error(context.getMonitor(),
@@ -272,6 +352,7 @@ public class CompositePolicyBuilderImpl
*/
protected void checkPolicies(Composite composite, BuilderContext context)
throws CompositeBuilderException{
policyAppliesToBuilder.build(composite, context);
+ validateTransactionIntents(composite, context);
}
protected void buildPolicies(Composite composite, BuilderContext context) {