Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyBuilder.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyBuilder.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyBuilder.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyBuilder.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,28 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.tuscany.core.builder; + +import org.apache.tuscany.core.wire.WireSourceConfiguration; +import org.apache.tuscany.model.assembly.ConfiguredReference; + +import java.util.List; + +/** + * @version $$Rev$$ $$Date$$ + */ +public interface SourcePolicyBuilder extends PolicyBuilder { + + public void build(ConfiguredReference reference, List<WireSourceConfiguration> configurations) throws BuilderException; + +}
Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyOrderer.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyOrderer.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyOrderer.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/SourcePolicyOrderer.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,15 @@ +package org.apache.tuscany.core.builder; + +import org.apache.tuscany.core.wire.WireSourceConfiguration; + +/** + * Implementations order the set of builders that contribute policy to a wire + * + * @version $$Rev$$ $$Date$$ + */ +public interface SourcePolicyOrderer { + + public void order(WireSourceConfiguration configuration); + + +} Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyBuilder.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyBuilder.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyBuilder.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyBuilder.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,26 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.tuscany.core.builder; + +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.core.wire.WireTargetConfiguration; + +/** + * @version $$Rev$$ $$Date$$ + */ +public interface TargetPolicyBuilder extends PolicyBuilder{ + + public void build(ConfiguredService service, WireTargetConfiguration configuration) throws BuilderException; + +} Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyOrderer.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyOrderer.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyOrderer.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/TargetPolicyOrderer.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,27 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.tuscany.core.builder; + +import org.apache.tuscany.core.wire.WireTargetConfiguration; + +/** + * Implementations order the set of builders that contribute policy to a wire + * @version $$Rev$$ $$Date$$ + */ +public interface TargetPolicyOrderer { + + public void order(WireTargetConfiguration configuration); + + +} Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java?rev=396083&r1=396082&r2=396083&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/impl/ContextFactoryBuilderRegistryImpl.java Fri Apr 21 23:49:22 2006 @@ -26,7 +26,8 @@ * @version $Rev$ $Date$ */ public class ContextFactoryBuilderRegistryImpl implements ContextFactoryBuilderRegistry { - private final List<ContextFactoryBuilder> builders = new ArrayList(); + + private final List<ContextFactoryBuilder> builders = new ArrayList<ContextFactoryBuilder>(); public void register(ContextFactoryBuilder builder) { builders.add(builder); Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/DefaultPolicyBuilderRegistry.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/DefaultPolicyBuilderRegistry.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/DefaultPolicyBuilderRegistry.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/DefaultPolicyBuilderRegistry.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,101 @@ +/** + * + * Copyright 2005 The Apache Software Foundation or its licensors, as applicable. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on + * an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the + * specific language governing permissions and limitations under the License. + */ +package org.apache.tuscany.core.builder.system; + +import org.apache.tuscany.core.builder.TargetPolicyOrderer; +import org.apache.tuscany.core.builder.BuilderException; +import org.apache.tuscany.core.builder.SourcePolicyBuilder; +import org.apache.tuscany.core.builder.TargetPolicyBuilder; +import org.apache.tuscany.core.builder.SourcePolicyOrderer; +import org.apache.tuscany.core.system.annotation.Autowire; +import org.apache.tuscany.core.wire.WireSourceConfiguration; +import org.apache.tuscany.core.wire.WireTargetConfiguration; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.osoa.sca.annotations.Scope; +import org.osoa.sca.annotations.Service; + +import java.util.List; +import java.util.ArrayList; + +/** + * @version $$Rev$$ $$Date$$ + */ + [EMAIL PROTECTED]("MODULE") [EMAIL PROTECTED](interfaces = {PolicyBuilderRegistry.class}) +public class DefaultPolicyBuilderRegistry implements PolicyBuilderRegistry{ + + private final List<SourcePolicyBuilder> sourceBuilders = new ArrayList<SourcePolicyBuilder>(); + private final List<TargetPolicyBuilder> targetBuilders = new ArrayList<TargetPolicyBuilder>(); + + private TargetPolicyOrderer targetOrderer; + + private SourcePolicyOrderer sourceOrderer; + + @Autowire + public void setTargetOrderer(TargetPolicyOrderer orderer) { + this.targetOrderer = orderer; + } + + @Autowire + public void setSourceOrderer(SourcePolicyOrderer orderer) { + this.sourceOrderer = orderer; + } + + public void registerTargetBuilder(TargetPolicyBuilder builder) { + targetBuilders.add(builder); + } + + public void unregisterTargetBuilder(TargetPolicyBuilder builder) { + targetBuilders.remove(builder); + } + + public void registerSourceBuilder(SourcePolicyBuilder builder) { + sourceBuilders.add(builder); + } + + public void unregisterSourceBuilder(SourcePolicyBuilder builder) { + sourceBuilders.remove(builder); + } + + public List<TargetPolicyBuilder> getTargetBuilders() { + return targetBuilders; + } + + public List<SourcePolicyBuilder> getSourceBuilders() { + return sourceBuilders; + } + + public void build(ConfiguredReference reference, List<WireSourceConfiguration> configurations) throws BuilderException { + for (SourcePolicyBuilder builder : sourceBuilders) { + builder.build(reference,configurations); + } + + if (sourceOrderer != null){ + for (WireSourceConfiguration configuration : configurations) { + sourceOrderer.order(configuration); + } + } + } + + public void build(ConfiguredService service, WireTargetConfiguration configuration) throws BuilderException { + for (TargetPolicyBuilder builder : targetBuilders) { + builder.build(service,configuration); + } + if (targetOrderer != null){ + targetOrderer.order(configuration); + } + } +} Added: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/PolicyBuilderRegistry.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/PolicyBuilderRegistry.java?rev=396083&view=auto ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/PolicyBuilderRegistry.java (added) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/builder/system/PolicyBuilderRegistry.java Fri Apr 21 23:49:22 2006 @@ -0,0 +1,50 @@ +package org.apache.tuscany.core.builder.system; + +import org.apache.tuscany.core.builder.BuilderException; +import org.apache.tuscany.core.builder.SourcePolicyBuilder; +import org.apache.tuscany.core.builder.TargetPolicyBuilder; +import org.apache.tuscany.core.wire.WireSourceConfiguration; +import org.apache.tuscany.core.wire.WireTargetConfiguration; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; + +import java.util.List; + +/** + * System wide registry for ContextFactoryBuilder implementations that attach builders to wires + * + * @version $Rev$ $Date$ + */ +public interface PolicyBuilderRegistry { + + /** + * Register a builder. Called by extensions to register their builders. + * + * @param builder the builder to register + */ + public void registerTargetBuilder(TargetPolicyBuilder builder); + + /** + * Register a builder. Called by extensions to register their builders. + * + * @param builder the builder to register + */ + public void unregisterTargetBuilder(TargetPolicyBuilder builder); + + public void registerSourceBuilder(SourcePolicyBuilder builder); + + /** + * Register a builder. Called by extensions to register their builders. + * + * @param builder the builder to register + */ + public void unregisterSourceBuilder(SourcePolicyBuilder builder); + + public List<TargetPolicyBuilder> getTargetBuilders(); + + public List<SourcePolicyBuilder> getSourceBuilders(); + + public void build(ConfiguredReference reference, List<WireSourceConfiguration> configurations) throws BuilderException; + + public void build(ConfiguredService service, WireTargetConfiguration configuration) throws BuilderException; +} Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/DefaultWireFactoryService.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/DefaultWireFactoryService.java?rev=396083&r1=396082&r2=396083&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/DefaultWireFactoryService.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/DefaultWireFactoryService.java Fri Apr 21 23:49:22 2006 @@ -25,6 +25,10 @@ import org.apache.tuscany.core.wire.TargetWireFactory; import org.apache.tuscany.core.wire.WireSourceConfiguration; import org.apache.tuscany.core.wire.WireTargetConfiguration; +import org.apache.tuscany.core.wire.impl.InvokerInterceptor; +import org.apache.tuscany.core.builder.system.PolicyBuilderRegistry; +import org.apache.tuscany.model.assembly.ConfiguredService; +import org.apache.tuscany.model.assembly.ConfiguredReference; import org.osoa.sca.annotations.Init; import org.osoa.sca.annotations.Scope; import org.osoa.sca.annotations.Service; @@ -33,6 +37,8 @@ import java.util.HashMap; import java.util.Map; import java.util.Set; +import java.util.List; +import java.util.ArrayList; /** * The default implementation of the <code>WireFactoryService</code> in the runtime @@ -45,13 +51,14 @@ private MessageFactory messageFactory; - public DefaultWireFactoryService(){ + public DefaultWireFactoryService() { } - public DefaultWireFactoryService(MessageFactory messageFactory,ProxyFactoryFactory proxyFactory){ + public DefaultWireFactoryService(MessageFactory messageFactory, ProxyFactoryFactory proxyFactory, PolicyBuilderRegistry registry) { this.messageFactory = messageFactory; this.proxyFactory = proxyFactory; + this.policyRegistry = registry; } @Autowire @@ -66,11 +73,52 @@ this.proxyFactory = proxyFactory; } + private PolicyBuilderRegistry policyRegistry; + + @Autowire + public void setPolicyRegistry(PolicyBuilderRegistry policyRegistry) { + this.policyRegistry = policyRegistry; + } + @Init(eager = true) public void init() { } - public SourceWireFactory createSourceFactory(String referenceName, QualifiedName targetName, Class interfaze) { + public List<SourceWireFactory> createSourceFactory(ConfiguredReference configuredReference){ //String referenceName, QualifiedName targetName, Class interfaze) { + String referenceName = configuredReference.getPort().getName(); + Class interfaze = configuredReference.getPort().getServiceContract().getInterface(); + List<SourceWireFactory> wireFactories = new ArrayList<SourceWireFactory>(); + List<WireSourceConfiguration> wireConfigurations = new ArrayList<WireSourceConfiguration>(); + for (ConfiguredService configuredService : configuredReference.getTargetConfiguredServices()) { + String targetCompName = configuredService.getPart().getName(); + String targetSerivceName = configuredService.getPort().getName(); + QualifiedName targetName = new QualifiedName(targetCompName + QualifiedName.NAME_SEPARATOR + targetSerivceName); + SourceWireFactory wireFactory = proxyFactory.createSourceWireFactory(); + Map<Method, SourceInvocationConfiguration> iConfigMap = new HashMap<Method, SourceInvocationConfiguration>(); + Set<Method> javaMethods = JavaIntrospectionHelper.getAllUniqueMethods(interfaze); + for (Method method : javaMethods) { + SourceInvocationConfiguration iConfig = new SourceInvocationConfiguration(method); + iConfigMap.put(method, iConfig); + } + WireSourceConfiguration wireConfiguration = new WireSourceConfiguration(referenceName, targetName, iConfigMap, interfaze.getClassLoader(), + messageFactory); + wireConfigurations.add(wireConfiguration); + wireFactory.setBusinessInterface(interfaze); + wireFactory.setConfiguration(wireConfiguration); + wireFactories.add(wireFactory); + } + if (policyRegistry != null) { + // invoke policy builders + policyRegistry.build(configuredReference, wireConfigurations); + } + return wireFactories; + + } + + //FIXME remove + public SourceWireFactory createSourceFactory(QualifiedName targetName,ConfiguredService configuredService) { + org.apache.tuscany.model.assembly.Service service = configuredService.getPort(); + Class interfaze = service.getServiceContract().getInterface(); SourceWireFactory wireFactory = proxyFactory.createSourceWireFactory(); Map<Method, SourceInvocationConfiguration> iConfigMap = new HashMap<Method, SourceInvocationConfiguration>(); Set<Method> javaMethods = JavaIntrospectionHelper.getAllUniqueMethods(interfaze); @@ -78,14 +126,24 @@ SourceInvocationConfiguration iConfig = new SourceInvocationConfiguration(method); iConfigMap.put(method, iConfig); } - WireSourceConfiguration pConfiguration = new WireSourceConfiguration(referenceName, targetName, iConfigMap, interfaze.getClassLoader(), + WireSourceConfiguration wireConfiguration = new WireSourceConfiguration(targetName, iConfigMap, interfaze.getClassLoader(), messageFactory); wireFactory.setBusinessInterface(interfaze); - wireFactory.setConfiguration(pConfiguration); + wireFactory.setConfiguration(wireConfiguration); + //TODO policy builders are not invoked since this method should be removed if possible +// if (policyRegistry != null) { +// // invoke policy builders +// policyRegistry.build(configuredService, wireConfiguration); +// } return wireFactory; } - public TargetWireFactory createTargetFactory(QualifiedName targetName, Class interfaze) { + public TargetWireFactory createTargetFactory(ConfiguredService configuredService) { + org.apache.tuscany.model.assembly.Service service = configuredService.getPort(); + Class interfaze = service.getServiceContract().getInterface(); + QualifiedName targetName = new QualifiedName(configuredService.getPart().getName() + QualifiedName.NAME_SEPARATOR + + service.getName()); + Map<Method, TargetInvocationConfiguration> iConfigMap = new MethodHashMap<TargetInvocationConfiguration>(); TargetWireFactory wireFactory = proxyFactory.createTargetWireFactory(); Set<Method> javaMethods = JavaIntrospectionHelper.getAllUniqueMethods(interfaze); @@ -96,6 +154,14 @@ WireTargetConfiguration wireConfiguration = new WireTargetConfiguration(targetName, iConfigMap, interfaze.getClassLoader(), messageFactory); wireFactory.setBusinessInterface(interfaze); wireFactory.setConfiguration(wireConfiguration); + if (policyRegistry != null) { + // invoke policy builders + policyRegistry.build(configuredService, wireConfiguration); + } + // add tail interceptor + for (TargetInvocationConfiguration iConfig : wireFactory.getConfiguration().getInvocationConfigurations().values()) { + iConfig.addInterceptor(new InvokerInterceptor()); + } return wireFactory; } Modified: incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/WireFactoryService.java URL: http://svn.apache.org/viewcvs/incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/WireFactoryService.java?rev=396083&r1=396082&r2=396083&view=diff ============================================================================== --- incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/WireFactoryService.java (original) +++ incubator/tuscany/java/sca/core/src/main/java/org/apache/tuscany/core/wire/service/WireFactoryService.java Fri Apr 21 23:49:22 2006 @@ -13,10 +13,13 @@ */ package org.apache.tuscany.core.wire.service; -import org.apache.tuscany.core.context.QualifiedName; import org.apache.tuscany.core.wire.SourceWireFactory; import org.apache.tuscany.core.wire.TargetWireFactory; -import org.osoa.sca.annotations.Service; +import org.apache.tuscany.core.context.QualifiedName; +import org.apache.tuscany.model.assembly.ConfiguredReference; +import org.apache.tuscany.model.assembly.ConfiguredService; + +import java.util.List; /** * Implementations are responsible for providing a system service that creates [EMAIL PROTECTED] org.apache.tuscany.core.wire.SourceWireFactory}s @@ -26,23 +29,15 @@ */ public interface WireFactoryService { - /** - * Creates a source-side wire factory for the given reference - * - * @param referenceName the name of the reference the wire is associated with - * @param targetName the qualified name of the target service - * @param interfaze the business interface used in constructing wire proxies - * @return the source-side wire factory - */ - public SourceWireFactory createSourceFactory(String referenceName, QualifiedName targetName, Class interfaze); + public List<SourceWireFactory> createSourceFactory(ConfiguredReference configuredReference); + + public SourceWireFactory createSourceFactory(QualifiedName qName, ConfiguredService configuredService); /** * Creates a target-side wire factory for a service implementing a given interface * - * @param targetName the qualified name of the wire target - * @param interfaze the interface used to represent the service offered by the wire target - * @return the target-side wire factory + * @param configuredService the configured service to create the wire factory for */ - public TargetWireFactory createTargetFactory(QualifiedName targetName, Class interfaze); + public TargetWireFactory createTargetFactory(ConfiguredService configuredService); }
