You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2007/07/18 23:58:04 UTC

svn commit: r557408 - in /incubator/tuscany/java/sca/modules: core-spi/src/main/java/org/apache/tuscany/sca/context/ core/src/main/java/org/apache/tuscany/sca/core/component/ host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ implem...

Author: rfeng
Date: Wed Jul 18 14:58:03 2007
New Revision: 557408

URL: http://svn.apache.org/viewvc?view=rev&rev=557408
Log:
Add ContextFactoryExtensionPoint, ComponentContextFactor and RequestContextFactory for pluggability

Added:
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java   (with props)
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java   (with props)
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java   (with props)
    incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
    incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
    incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactory.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentInfo.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProviderFactory.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/module/JavaRuntimeModuleActivator.java
    incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactoryTestCase.java

Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java?view=auto&rev=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java Wed Jul 18 14:58:03 2007
@@ -0,0 +1,38 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.context;
+
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.osoa.sca.ComponentContext;
+
+/**
+ * Interface implemented by the provider of the ComponentContext.
+ * 
+ * @version $Rev$ $Date$
+ */
+public interface ComponentContextFactory {
+    /**
+     * Create an instance of ComponentContext
+     * 
+     * @param component The runtime component
+     * @param requestContextFactory The factory to create RequestContext
+     * @return An instance of ComponentContext for the component
+     */
+    ComponentContext createComponentContext(RuntimeComponent component, RequestContextFactory requestContextFactory);
+}

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ComponentContextFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java?view=auto&rev=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java Wed Jul 18 14:58:03 2007
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.context;
+
+/**
+ * An extension point for model factories. Model factories are provided to 
+ * abstract the classes that represent artifacts in the assembly model away
+ * from their creation mechanism. When the runtime needs to extend the model
+ * as it reads in contributed artifacts it looks up the factory for the 
+ * artifact required in this registry
+ *
+ * @version $Rev$ $Date$
+ */
+public interface ContextFactoryExtensionPoint {
+    
+    /**
+     * Add a model factory extension.
+     * 
+     * @param factory The factory to add
+     */
+    void addFactory(Object factory);
+    
+    /**
+     * Remove a model factory extension.
+     *  
+     * @param factory The factory to remove
+     */
+    void removeFactory(Object factory); 
+    
+    /**
+     * Get a factory implementing the given interface.
+     * @param factoryInterface the lookup key (factory interface)
+     * @return The factory
+     */
+    <T> T getFactory(Class<T> factoryInterface);
+
+}

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/ContextFactoryExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java?view=auto&rev=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java Wed Jul 18 14:58:03 2007
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.context;
+
+import java.util.HashMap;
+
+/**
+ * Default implementation of a model factory extension point.
+ *
+ * @version $Rev$ $Date$
+ */
+public class DefaultContextFactoryExtensionPoint implements ContextFactoryExtensionPoint {
+    
+    private HashMap<Class<?>, Object> factories = new HashMap<Class<?>, Object>();
+
+    /**
+     * Add a model factory extension.
+     * 
+     * @param factory The factory to add
+     */
+    public void addFactory(Object factory) {
+        Class[] interfaces = factory.getClass().getInterfaces();
+        for (int i = 0; i<interfaces.length; i++) {
+            factories.put(interfaces[i], factory);
+        }
+    }
+
+    /**
+     * Remove a model factory extension.
+     *  
+     * @param factory The factory to remove
+     */
+    public void removeFactory(Object factory) {
+        Class[] interfaces = factory.getClass().getInterfaces();
+        for (int i = 0; i<interfaces.length; i++) {
+            factories.remove(interfaces[i]);
+        }
+    }
+    
+    /**
+     * Get a factory implementing the given interface.
+     * @param factoryInterface The lookup key (factory interface)
+     * @return The factory
+     */    
+    public <T> T getFactory(Class<T> factoryInterface) {
+        Object factory = factories.get(factoryInterface);
+        return factoryInterface.cast(factory);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/DefaultContextFactoryExtensionPoint.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java?view=auto&rev=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java (added)
+++ incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java Wed Jul 18 14:58:03 2007
@@ -0,0 +1,33 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you 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.sca.context;
+
+import org.osoa.sca.RequestContext;
+
+/**
+ * Interface implemented by the provider of the RequestContext.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface RequestContextFactory {
+    /**
+     * @return An instance of RequestContext for the current invocation
+     */
+    RequestContext createRequestContext();
+}

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/core-spi/src/main/java/org/apache/tuscany/sca/context/RequestContextFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/ComponentContextImpl.java Wed Jul 18 14:58:03 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.sca.core.component;
 
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.osoa.sca.CallableReference;
 import org.osoa.sca.ComponentContext;
 import org.osoa.sca.RequestContext;
@@ -31,9 +32,11 @@
  */
 public class ComponentContextImpl implements ComponentContext {
     private final ComponentContextProvider component;
+    private final RequestContextFactory requestContextFactory;
 
-    public ComponentContextImpl(ComponentContextProvider component) {
+    public ComponentContextImpl(ComponentContextProvider component, RequestContextFactory requestContextFactory) {
         this.component = component;
+        this.requestContextFactory = requestContextFactory;
     }
 
     public String getURI() {
@@ -88,6 +91,10 @@
     }
 
     public RequestContext getRequestContext() {
-        return null;
+        if (requestContextFactory != null) {
+            return requestContextFactory.createRequestContext();
+        } else {
+            return new RequestContextImpl();
+        }
     }
 }

Modified: incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java (original)
+++ incubator/tuscany/java/sca/modules/core/src/main/java/org/apache/tuscany/sca/core/component/RequestContextImpl.java Wed Jul 18 14:58:03 2007
@@ -20,6 +20,12 @@
 
 import javax.security.auth.Subject;
 
+import org.apache.tuscany.sca.core.invocation.ThreadMessageContext;
+import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
+import org.apache.tuscany.sca.runtime.EndpointReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
 import org.osoa.sca.CallableReference;
 import org.osoa.sca.RequestContext;
 import org.osoa.sca.ServiceReference;
@@ -37,18 +43,30 @@
     }
 
     public String getServiceName() {
-        throw new UnsupportedOperationException();
+        return ThreadMessageContext.getMessageContext().getTo().getContract().getName();
     }
 
     public <B> ServiceReference<B> getServiceReference() {
-        throw new UnsupportedOperationException();
+        EndpointReference to = ThreadMessageContext.getMessageContext().getTo();
+        RuntimeComponentService service = (RuntimeComponentService) to.getContract();
+        RuntimeComponent component = (RuntimeComponent) to.getComponent();
+        JavaInterface javaInterface = (JavaInterface) service.getInterfaceContract().getInterface();
+        return (ServiceReference<B>) component.createSelfReference(javaInterface.getJavaClass(), service.getName());
     }
 
     public <CB> CB getCallback() {
-        throw new UnsupportedOperationException();
+        return (CB) getCallbackReference().getService();
     }
 
     public <CB> CallableReference<CB> getCallbackReference() {
-        throw new UnsupportedOperationException();
+        EndpointReference from = ThreadMessageContext.getMessageContext().getFrom();
+        RuntimeComponentReference service = (RuntimeComponentReference) from.getContract();
+        RuntimeComponent component = (RuntimeComponent) from.getComponent();
+        JavaInterface javaInterface = (JavaInterface) service.getInterfaceContract().getCallbackInterface();
+        if(javaInterface==null) {
+            return null;
+        }
+        // FIXME: Creating a self-ref is probably not right
+        return (CallableReference<CB>) component.createSelfReference(javaInterface.getCallbackClass());
     }
 }

Modified: incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java (original)
+++ incubator/tuscany/java/sca/modules/host-embedded/src/main/java/org/apache/tuscany/sca/host/embedded/impl/ReallySmallRuntime.java Wed Jul 18 14:58:03 2007
@@ -31,6 +31,8 @@
 import org.apache.tuscany.sca.assembly.DefaultSCABindingFactory;
 import org.apache.tuscany.sca.assembly.SCABindingFactory;
 import org.apache.tuscany.sca.assembly.xml.Constants;
+import org.apache.tuscany.sca.context.ContextFactoryExtensionPoint;
+import org.apache.tuscany.sca.context.DefaultContextFactoryExtensionPoint;
 import org.apache.tuscany.sca.contribution.ContributionFactory;
 import org.apache.tuscany.sca.contribution.impl.ContributionFactoryImpl;
 import org.apache.tuscany.sca.contribution.processor.ArtifactProcessor;
@@ -91,6 +93,10 @@
         // Create factory extension point
         ModelFactoryExtensionPoint factories = new DefaultModelFactoryExtensionPoint();
         registry.addExtensionPoint(factories);
+        
+        // Create context factory extension point
+        ContextFactoryExtensionPoint contextFactories = new DefaultContextFactoryExtensionPoint();
+        registry.addExtensionPoint(contextFactories);
         
         // Create Message factory
         MessageFactory messageFactory = new MessageFactoryImpl();

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactory.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactory.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactory.java Wed Jul 18 14:58:03 2007
@@ -18,23 +18,31 @@
  */
 package org.apache.tuscany.sca.implementation.java.injection;
 
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.apache.tuscany.sca.core.component.RequestContextImpl;
 import org.apache.tuscany.sca.factory.ObjectCreationException;
 import org.apache.tuscany.sca.factory.ObjectFactory;
 import org.osoa.sca.RequestContext;
 
 /**
- * Creates instances of {@link org.apache.tuscany.sca.core.component.RequestContextImpl} for injection on
- * component implementation instances
- *
+ * Creates instances of
+ * {@link org.apache.tuscany.sca.core.component.RequestContextImpl} for
+ * injection on component implementation instances
+ * 
  * @version $Rev$ $Date$
  */
 public class RequestContextObjectFactory implements ObjectFactory<RequestContext> {
+    private RequestContextFactory factory;
 
-    public RequestContextObjectFactory() {
+    public RequestContextObjectFactory(RequestContextFactory factory) {
+        this.factory = factory;
     }
 
     public RequestContext getInstance() throws ObjectCreationException {
-        return new RequestContextImpl();
+        if (factory != null) {
+            return factory.createRequestContext();
+        } else {
+            return new RequestContextImpl();
+        }
     }
 }

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentInfo.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentInfo.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentInfo.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaComponentInfo.java Wed Jul 18 14:58:03 2007
@@ -34,6 +34,8 @@
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Multiplicity;
 import org.apache.tuscany.sca.assembly.Reference;
+import org.apache.tuscany.sca.context.ComponentContextFactory;
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.apache.tuscany.sca.core.component.ComponentContextImpl;
 import org.apache.tuscany.sca.core.component.ComponentContextProvider;
 import org.apache.tuscany.sca.core.component.ServiceReferenceImpl;
@@ -81,7 +83,9 @@
 public class JavaComponentInfo implements ComponentContextProvider {
     private JavaPropertyValueObjectFactory propertyValueFactory;
     private DataBindingExtensionPoint dataBindingRegistry;
-
+    private ComponentContextFactory componentContextFactory;
+    private RequestContextFactory requestContextFactory;
+    
     protected RuntimeComponent component;
     protected PojoConfiguration<?> configuration;
     protected Scope scope;
@@ -90,17 +94,26 @@
 
     private final ComponentContext componentContext;
 
-    public JavaComponentInfo(RuntimeComponent component, PojoConfiguration configuration, 
+    public JavaComponentInfo(RuntimeComponent component,
+                             PojoConfiguration configuration,
                              DataBindingExtensionPoint dataBindingExtensionPoint,
-                             JavaPropertyValueObjectFactory propertyValueObjectFactory) {
+                             JavaPropertyValueObjectFactory propertyValueObjectFactory,
+                             ComponentContextFactory componentContextFactory,
+                             RequestContextFactory requestContextFactory) {
         super();
         this.configuration = configuration;
-        componentContext = new ComponentContextImpl(this);
+        if (componentContextFactory != null) {
+            this.componentContext = componentContextFactory.createComponentContext(component, requestContextFactory);
+        } else {
+            this.componentContext = new ComponentContextImpl(this, requestContextFactory);
+        }
         this.groupId = configuration.getGroupId();
         this.component = component;
         this.proxyService = configuration.getProxyFactory();
         this.dataBindingRegistry = dataBindingExtensionPoint;
         this.propertyValueFactory = propertyValueObjectFactory;
+        this.componentContextFactory = componentContextFactory;
+        this.requestContextFactory = requestContextFactory;
     }
   
     public void destroy(Object instance) throws TargetDestructionException {

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProvider.java Wed Jul 18 14:58:03 2007
@@ -23,12 +23,15 @@
 
 import org.apache.tuscany.sca.assembly.ComponentService;
 import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.context.ComponentContextFactory;
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.apache.tuscany.sca.core.invocation.ProxyFactory;
 import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.sca.factory.ObjectFactory;
 import org.apache.tuscany.sca.implementation.java.JavaImplementation;
 import org.apache.tuscany.sca.implementation.java.context.JavaPropertyValueObjectFactory;
 import org.apache.tuscany.sca.implementation.java.impl.JavaResourceImpl;
+import org.apache.tuscany.sca.implementation.java.injection.RequestContextObjectFactory;
 import org.apache.tuscany.sca.implementation.java.injection.ResourceHost;
 import org.apache.tuscany.sca.implementation.java.injection.ResourceObjectFactory;
 import org.apache.tuscany.sca.interfacedef.Operation;
@@ -40,30 +43,36 @@
 import org.apache.tuscany.sca.scope.ScopedImplementationProvider;
 import org.apache.tuscany.sca.scope.TargetInvokerCreationException;
 import org.osoa.sca.ComponentContext;
+import org.osoa.sca.RequestContext;
 
 /**
  * @version $Rev$ $Date$
  */
 public class JavaImplementationProvider implements ScopedImplementationProvider {
     private JavaImplementation implementation;
-    private JavaComponentInfo atomicComponent;
-
-    public JavaImplementationProvider(
-                                      RuntimeComponent component,
+    private JavaComponentInfo componentInfo;
+    private ComponentContextFactory componentContextFactory;
+    private RequestContextFactory requestContextFactory;
+    
+    public JavaImplementationProvider(RuntimeComponent component,
                                       JavaImplementation implementation,
                                       ProxyFactory proxyService,
                                       DataBindingExtensionPoint dataBindingRegistry,
-                                      JavaPropertyValueObjectFactory propertyValueObjectFactory) {
+                                      JavaPropertyValueObjectFactory propertyValueObjectFactory,
+                                      ComponentContextFactory componentContextFactory,
+                                      RequestContextFactory requestContextFactory) {
         super();
         this.implementation = implementation;
-
+        this.componentContextFactory = componentContextFactory;
+        this.requestContextFactory = requestContextFactory;
         try {
             PojoConfiguration configuration = new PojoConfiguration(implementation);
             configuration.setProxyFactory(proxyService);
             // FIXME: Group id to be removed
             configuration.setGroupId(URI.create("/"));
-            atomicComponent = new JavaComponentInfo(component, configuration, dataBindingRegistry,
-                                                                      propertyValueObjectFactory);
+            componentInfo =
+                new JavaComponentInfo(component, configuration, dataBindingRegistry, propertyValueObjectFactory,
+                                      componentContextFactory, requestContextFactory);
 
             Scope scope = getScope();
 
@@ -87,36 +96,38 @@
             }
 
             if (implementation.getConversationIDMember() != null) {
-                atomicComponent.addConversationIDFactory(implementation.getConversationIDMember());
+                componentInfo.addConversationIDFactory(implementation.getConversationIDMember());
             }
 
-            atomicComponent.configureProperties(component.getProperties());
-            handleResources(implementation, atomicComponent);
+            componentInfo.configureProperties(component.getProperties());
+            handleResources(implementation);
         } catch (Exception e) {
             throw new IllegalStateException(e);
         }
 
     }
 
-    private void handleResources(JavaImplementation componentType, JavaComponentInfo component) {
+    private void handleResources(JavaImplementation componentType) {
         for (JavaResourceImpl resource : componentType.getResources().values()) {
             String name = resource.getName();
 
-            ObjectFactory<?> objectFactory = (ObjectFactory<?>)component.getConfiguration().getFactories().get(resource
-                .getElement());
+            ObjectFactory<?> objectFactory =
+                (ObjectFactory<?>)componentInfo.getConfiguration().getFactories().get(resource.getElement());
             if (objectFactory == null) {
                 Class<?> type = resource.getElement().getType();
                 if (ComponentContext.class.equals(type)) {
-                    objectFactory = new PojoComponentContextFactory(component);
+                    objectFactory = new PojoComponentContextFactory(componentInfo);
+                } else if (RequestContext.class.equals(type)) {
+                    objectFactory = new RequestContextObjectFactory(requestContextFactory);
                 } else if (String.class.equals(type)) {
-                    objectFactory = new PojoComponentNameFactory(component);
+                    objectFactory = new PojoComponentNameFactory(componentInfo);
                 } else {
                     boolean optional = resource.isOptional();
                     String mappedName = resource.getMappedName();
                     objectFactory = createResourceObjectFactory(type, mappedName, optional, null);
                 }
             }
-            component.addResourceFactory(name, objectFactory);
+            componentInfo.addResourceFactory(name, objectFactory);
         }
     }
 
@@ -128,12 +139,12 @@
     }
 
     public Object createInstance(RuntimeComponent component, ComponentService service) {
-        return atomicComponent.createInstance();
+        return componentInfo.createInstance();
     }
 
     public Invoker createInvoker(RuntimeComponentService service, Operation operation) {
         try {
-            return new TargetInvokerInvoker(atomicComponent.createTargetInvoker(operation));
+            return new TargetInvokerInvoker(componentInfo.createTargetInvoker(operation));
         } catch (TargetInvokerCreationException e) {
             throw new IllegalArgumentException(e);
         }
@@ -141,7 +152,7 @@
 
     public Invoker createCallbackInvoker(Operation operation) {
         try {
-            return new TargetInvokerInvoker(atomicComponent.createTargetInvoker(operation));
+            return new TargetInvokerInvoker(componentInfo.createTargetInvoker(operation));
         } catch (TargetInvokerCreationException e) {
             throw new IllegalArgumentException(e);
         }
@@ -152,15 +163,15 @@
     }
 
     public void start() {
-        atomicComponent.start();
+        componentInfo.start();
     }
 
     public void stop() {
-        atomicComponent.stop();
+        componentInfo.stop();
     }
 
     public InstanceWrapper createInstanceWrapper() {
-        return atomicComponent.createInstanceWrapper();
+        return componentInfo.createInstanceWrapper();
     }
 
     public boolean isEagerInit() {

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProviderFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProviderFactory.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProviderFactory.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/invocation/JavaImplementationProviderFactory.java Wed Jul 18 14:58:03 2007
@@ -19,6 +19,8 @@
 
 package org.apache.tuscany.sca.implementation.java.invocation;
 
+import org.apache.tuscany.sca.context.ComponentContextFactory;
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.apache.tuscany.sca.core.invocation.ProxyFactory;
 import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.sca.implementation.java.JavaImplementation;
@@ -34,20 +36,26 @@
     private JavaPropertyValueObjectFactory propertyValueObjectFactory;
     private DataBindingExtensionPoint dataBindingRegistry;
     private ProxyFactory proxyService;
+    private ComponentContextFactory componentContextFactory;
+    private RequestContextFactory requestContextFactory;
 
     public JavaImplementationProviderFactory(ProxyFactory proxyService,
                                              DataBindingExtensionPoint dataBindingRegistry,
-                                             JavaPropertyValueObjectFactory propertyValueObjectFactory) {
+                                             JavaPropertyValueObjectFactory propertyValueObjectFactory,
+                                             ComponentContextFactory componentContextFactory,
+                                             RequestContextFactory requestContextFactory) {
         super();
         this.proxyService = proxyService;
         this.dataBindingRegistry = dataBindingRegistry;
         this.propertyValueObjectFactory = propertyValueObjectFactory;
+        this.componentContextFactory = componentContextFactory;
+        this.requestContextFactory = requestContextFactory;
     }
 
     public ImplementationProvider createImplementationProvider(RuntimeComponent component,
                                                                JavaImplementation implementation) {
         return new JavaImplementationProvider(component, implementation, proxyService, dataBindingRegistry,
-                                              propertyValueObjectFactory);
+                                              propertyValueObjectFactory, componentContextFactory, requestContextFactory);
     }
 
     public Class<JavaImplementation> getModelType() {

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/module/JavaRuntimeModuleActivator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/module/JavaRuntimeModuleActivator.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/module/JavaRuntimeModuleActivator.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/main/java/org/apache/tuscany/sca/implementation/java/module/JavaRuntimeModuleActivator.java Wed Jul 18 14:58:03 2007
@@ -20,6 +20,9 @@
 package org.apache.tuscany.sca.implementation.java.module;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
+import org.apache.tuscany.sca.context.ComponentContextFactory;
+import org.apache.tuscany.sca.context.ContextFactoryExtensionPoint;
+import org.apache.tuscany.sca.context.RequestContextFactory;
 import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
 import org.apache.tuscany.sca.core.ExtensionPointRegistry;
 import org.apache.tuscany.sca.core.ModelFactoryExtensionPoint;
@@ -127,11 +130,16 @@
             new JavaImplementationProcessor(assemblyFactory, policyFactory, javaImplementationFactory, classIntrospector);
         processors.addArtifactProcessor(javaImplementationProcessor);
 
+        ContextFactoryExtensionPoint contextFactories = registry.getExtensionPoint(ContextFactoryExtensionPoint.class);
+        ComponentContextFactory componentContextFactory = contextFactories.getFactory(ComponentContextFactory.class);
+        RequestContextFactory requestContextFactory = contextFactories.getFactory(RequestContextFactory.class);
         JavaImplementationProviderFactory javaImplementationProviderFactory =
-            new JavaImplementationProviderFactory(proxyFactory, dataBindings, factory);
+            new JavaImplementationProviderFactory(proxyFactory, dataBindings, factory, componentContextFactory,
+                                                  requestContextFactory);
         
         ProviderFactoryExtensionPoint providerFactories = registry.getExtensionPoint(ProviderFactoryExtensionPoint.class);
         providerFactories.addProviderFactory(javaImplementationProviderFactory);
+        
     }
 
     public void stop(ExtensionPointRegistry registry) {

Modified: incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactoryTestCase.java?view=diff&rev=557408&r1=557407&r2=557408
==============================================================================
--- incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactoryTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/implementation-java-runtime/src/test/java/org/apache/tuscany/sca/implementation/java/injection/RequestContextObjectFactoryTestCase.java Wed Jul 18 14:58:03 2007
@@ -26,7 +26,7 @@
 public class RequestContextObjectFactoryTestCase extends TestCase {
 
     public void testInstanceCreate() {
-        RequestContextObjectFactory factory = new RequestContextObjectFactory();
+        RequestContextObjectFactory factory = new RequestContextObjectFactory(null);
         assertNotNull(factory.getInstance());
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org