You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by jm...@apache.org on 2006/11/05 20:41:49 UTC

svn commit: r471505 - in /incubator/tuscany/java/sca/services/persistence/datasource/src: main/java/org/apache/tuscany/persistence/datasource/ test/java/org/apache/tuscany/persistence/datasource/ test/resources/META-INF/sca/

Author: jmarino
Date: Sun Nov  5 11:41:48 2006
New Revision: 471505

URL: http://svn.apache.org/viewvc?view=rev&rev=471505
Log:
have the datasource component use dynamic properties for configuration

Added:
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java   (with props)
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java   (with props)
    incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java   (with props)
Removed:
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/ParameterObjectFactory.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/PropertyEditorNotFoundException.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/SetterNotFoundException.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ParameterObjectFactoryTestCase.java
Modified:
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoader.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceBuilder.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoader.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoaderTestCase.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ProviderObjectFactoryTestCase.java
    incubator/tuscany/java/sca/services/persistence/datasource/src/test/resources/META-INF/sca/application.scdl

Added: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java?view=auto&rev=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java (added)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java Sun Nov  5 11:41:48 2006
@@ -0,0 +1,44 @@
+/*
+ * 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.persistence.datasource;
+
+import org.apache.tuscany.spi.loader.LoaderException;
+
+/**
+ * Raised when a property cannot be unambiguously inferred using JavaBean introspection rules, e.g. when a method is
+ * overloaded.
+ *
+ * @version $Rev$ $Date$
+ */
+public class AmbiguousPropertyException extends LoaderException {
+    public AmbiguousPropertyException() {
+    }
+
+    public AmbiguousPropertyException(String message) {
+        super(message);
+    }
+
+    public AmbiguousPropertyException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public AmbiguousPropertyException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/AmbiguousPropertyException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoader.java?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoader.java (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoader.java Sun Nov  5 11:41:48 2006
@@ -18,16 +18,22 @@
  */
 package org.apache.tuscany.persistence.datasource;
 
+import java.lang.reflect.Method;
+import java.lang.reflect.Type;
 import javax.sql.DataSource;
 
 import org.apache.tuscany.spi.annotation.Autowire;
 import org.apache.tuscany.spi.component.CompositeComponent;
+import org.apache.tuscany.spi.databinding.extension.SimpleTypeMapperExtension;
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentTypeLoaderExtension;
+import org.apache.tuscany.spi.idl.TypeInfo;
 import org.apache.tuscany.spi.idl.java.JavaServiceContract;
+import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
 import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.model.OverrideOptions;
 import org.apache.tuscany.spi.model.Property;
 import org.apache.tuscany.spi.model.ReferenceDefinition;
 import org.apache.tuscany.spi.model.ServiceDefinition;
@@ -39,6 +45,8 @@
  * @version $Rev$ $Date$
  */
 public class DSComponentTypeLoader extends ComponentTypeLoaderExtension<DataSourceImplementation> {
+    private SimpleTypeMapperExtension extension = new SimpleTypeMapperExtension();
+
     public DSComponentTypeLoader(@Autowire LoaderRegistry loaderRegistry) {
         super(loaderRegistry);
     }
@@ -55,6 +63,41 @@
         ServiceDefinition service = new ServiceDefinition("DataSource", serviceContract, false);
         componentType.add(service);
         componentType.setInitLevel(1);
+        Class<?> provider;
+        try {
+            provider = implementation.getClassLoader().loadClass(implementation.getProviderName());
+        } catch (ClassNotFoundException e) {
+            throw new LoaderException(e);
+        }
+        introspectProperties(componentType, provider);
         implementation.setComponentType(componentType);
     }
+
+    @SuppressWarnings("unchecked")
+    private void introspectProperties(ComponentType<ServiceDefinition, ReferenceDefinition, Property<?>> componentType,
+                                      Class<?> provider) throws AmbiguousPropertyException {
+
+        Method[] methods = provider.getMethods();
+        for (Method method : methods) {
+            String name = method.getName();
+            if (method.getParameterTypes().length == 1 && name.startsWith("set")) {
+                String propName = Character.toLowerCase(name.charAt(3)) + name.substring(4);
+                Class<Type> type = (Class<Type>) method.getParameterTypes()[0];
+                TypeInfo info = extension.getXMLType(type);
+                if (info != null) {
+                    // only include methods as properties that take simple type parameters
+                    if (componentType.getProperties().containsKey(propName)) {
+                        throw new AmbiguousPropertyException(propName);
+                    }
+                    JavaMappedProperty<Type> property =
+                        new JavaMappedProperty<Type>(propName, info.getQName(),
+                            type);  //SimpleTypeMapperExtension.XSD_STRING
+                    property.setOverride(OverrideOptions.MAY);
+                    property.setMember(method);
+                    componentType.add(property);
+                }
+            }
+        }
+    }
+
 }

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceBuilder.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceBuilder.java?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceBuilder.java (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceBuilder.java Sun Nov  5 11:41:48 2006
@@ -18,12 +18,9 @@
  */
 package org.apache.tuscany.persistence.datasource;
 
-import java.beans.PropertyEditor;
-import java.beans.PropertyEditorManager;
-import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.Map;
+import java.lang.reflect.Method;
 
 import org.apache.tuscany.spi.builder.BuilderConfigException;
 import org.apache.tuscany.spi.component.Component;
@@ -32,6 +29,10 @@
 import org.apache.tuscany.spi.deployer.DeploymentContext;
 import org.apache.tuscany.spi.extension.ComponentBuilderExtension;
 import org.apache.tuscany.spi.model.ComponentDefinition;
+import org.apache.tuscany.spi.model.PropertyValue;
+import org.apache.tuscany.spi.model.ComponentType;
+import org.apache.tuscany.spi.ObjectFactory;
+import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
 
 /**
  * Builds a {@link DataSourceComponent} from its model representation
@@ -52,33 +53,54 @@
             Class<?> beanClass = classLoader.loadClass(implementation.getProviderName());
 
             // handle configuration parameters
+//            List<Injector> injectors = new ArrayList<Injector>();
+//            Method[] methods = beanClass.getMethods();
+//            for (Map.Entry<String, String> entry : implementation.getConfigurationParams().entrySet()) {
+//                Method found = null;
+//                for (Method method : methods) {
+//                    String setterName = toSetter(entry.getKey());
+//                    if (method.getParameterTypes().length == 1 && method.getName().equals(setterName)) {
+//                        found = method;
+//                        break;
+//                    }
+//                }
+//                if (found == null) {
+//                    SetterNotFoundException e = new SetterNotFoundException("Setter method not found for parameter");
+//                    e.setIdentifier(entry.getKey());
+//                    throw e;
+//                }
+//                Class<?> type = found.getParameterTypes()[0];
+//                PropertyEditor editor = PropertyEditorManager.findEditor(type);
+//                if (editor == null) {
+//                    PropertyEditorNotFoundException e =
+//                        new PropertyEditorNotFoundException("Parameter type not supported");
+//                    e.setIdentifier(type.getName());
+//                    throw e;
+//                }
+//                Injector injector = new Injector(found, new ParameterObjectFactory(editor, entry.getValue()));
+//                injectors.add(injector);
+//            }
+//
+
             List<Injector> injectors = new ArrayList<Injector>();
-            Method[] methods = beanClass.getMethods();
-            for (Map.Entry<String, String> entry : implementation.getConfigurationParams().entrySet()) {
-                Method found = null;
-                for (Method method : methods) {
-                    String setterName = toSetter(entry.getKey());
-                    if (method.getParameterTypes().length == 1 && method.getName().equals(setterName)) {
-                        found = method;
-                        break;
+            // handle properties
+            ComponentType type = definition.getImplementation().getComponentType();
+            for (PropertyValue<?> property : definition.getPropertyValues().values()) {
+                ObjectFactory<?> factory = property.getValueFactory();
+                if (factory != null) {
+                    String name = property.getName();
+                    JavaMappedProperty mappedProperty  = (JavaMappedProperty) type.getProperties().get(name);
+                    if (mappedProperty == null){
+                        MissingPropertyException e = new MissingPropertyException();
+                        e.setIdentifier(name);
+                        throw e;
                     }
+                    Injector injector = new Injector((Method)mappedProperty.getMember(), factory);
+                    injectors.add(injector);
                 }
-                if (found == null) {
-                    SetterNotFoundException e = new SetterNotFoundException("Setter method not found for parameter");
-                    e.setIdentifier(entry.getKey());
-                    throw e;
-                }
-                Class<?> type = found.getParameterTypes()[0];
-                PropertyEditor editor = PropertyEditorManager.findEditor(type);
-                if (editor == null) {
-                    PropertyEditorNotFoundException e =
-                        new PropertyEditorNotFoundException("Parameter type not supported");
-                    e.setIdentifier(type.getName());
-                    throw e;
-                }
-                Injector injector = new Injector(found, new ParameterObjectFactory(editor, entry.getValue()));
-                injectors.add(injector);
             }
+
+
 
             ProviderObjectFactory providerFactory = new ProviderObjectFactory(beanClass, injectors);
             ScopeContainer scope = deploymentContext.getModuleScope();

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoader.java?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoader.java (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoader.java Sun Nov  5 11:41:48 2006
@@ -19,8 +19,6 @@
 package org.apache.tuscany.persistence.datasource;
 
 import javax.xml.namespace.QName;
-import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
-import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
@@ -30,6 +28,7 @@
 import org.apache.tuscany.spi.extension.LoaderExtension;
 import org.apache.tuscany.spi.loader.LoaderException;
 import org.apache.tuscany.spi.loader.LoaderRegistry;
+import org.apache.tuscany.spi.loader.LoaderUtil;
 import org.apache.tuscany.spi.model.ModelObject;
 
 /**
@@ -39,21 +38,20 @@
  * <pre>
  * <p/>
  *      <component name="MyDataSource">
- *          <system:implementation.ds provider="org.foo.FooProvider">
- *              <driverClassName>com.mysql.jdbc.Driver</driverClassName>
- *              <url>jdbc:mysql://localhost:3306/mydb</url>
- *              <login>foo</login>
- *              <password>bar</password>
- *          </system:implementation.ds>
+ *          <system:implementation.ds provider="org.foo.FooProvider"/>
+ *          <property name="driverClassName">com.mysql.jdbc.Driver</property>
+ *          <property name="url">jdbc:mysql://localhost:3306/mydb</property>
+ *          <property name="login">foo</property>
+ *          <property name="password">bar</property>
  *      </component>
  * <p/>
  * </pre>
- * In the above example, <code>org.foo.FooProvider</code> is responsible for providing the actual DataSource
+ * In the above example, <code>org.foo.FooProvider</code> is responsible for bootstrapping the actual DataSource
  * implementation. It may implement <code>javax.sql.DataSource</code> directly or the {@link DataSourceProvider}
- * interface and must have a public no-args constructor. Configuration parameters are specified as sub-elements of
- * <code>implementation.ds</code> and will vary by the provider. Parameter values are generally simple types and will be
- * instantiated using the JavaBeans <code>PropertyEditorManager</code>. Values will be set on the provider class using
- * JavaBeans setter methods.
+ * interface and must have a public no-args constructor. Configuration parameters are simple types specified as
+ * properties. Configuration parameters, i.e. properties, will vary are introspected from the provider class. A
+ * component type containing thse properties is dynamically generated and consists of all JavaBean setter methods that
+ * take a single simple type parameter.
  *
  * @version $Rev$ $Date$
  */
@@ -82,21 +80,7 @@
         DataSourceImplementation implementation = new DataSourceImplementation();
         implementation.setProviderName(driverName);
         implementation.setClassLoader(deploymentContext.getClassLoader());
-
-        while (true) {
-            switch (reader.next()) {
-                case START_ELEMENT:
-                    // load configuration paramters
-                    String paramName = reader.getName().getLocalPart();
-                    String val = reader.getElementText().trim();
-                    implementation.addConfigurationParam(paramName, val);
-                    reader.next();
-                    break;
-                case END_ELEMENT:
-                    if (reader.getName().equals(DATASOURCE)) {
-                        return implementation;
-                    }
-            }
-        }
+        LoaderUtil.skipToEndElement(reader);
+        return implementation;
     }
 }

Added: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java?view=auto&rev=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java (added)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java Sun Nov  5 11:41:48 2006
@@ -0,0 +1,44 @@
+/*
+ * 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.persistence.datasource;
+
+import org.apache.tuscany.spi.builder.BuilderConfigException;
+
+/**
+ * Raised when a property value is specified in an assembly configuration and no corresponding property was found in the
+ * component type
+ *
+ * @version $Rev$ $Date$
+ */
+public class MissingPropertyException extends BuilderConfigException {
+    public MissingPropertyException() {
+    }
+
+    public MissingPropertyException(String message) {
+        super(message);
+    }
+
+    public MissingPropertyException(String message, Throwable cause) {
+        super(message, cause);
+    }
+
+    public MissingPropertyException(Throwable cause) {
+        super(cause);
+    }
+}

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/main/java/org/apache/tuscany/persistence/datasource/MissingPropertyException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java?view=auto&rev=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java (added)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java Sun Nov  5 11:41:48 2006
@@ -0,0 +1,65 @@
+package org.apache.tuscany.persistence.datasource;
+
+import javax.sql.DataSource;
+
+import org.apache.tuscany.spi.implementation.java.JavaMappedProperty;
+import org.apache.tuscany.spi.model.ComponentType;
+
+import junit.framework.TestCase;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DSComponentTypeLoaderTestCase extends TestCase {
+
+    public void testIntrospection() throws Exception {
+        DSComponentTypeLoader loader = new DSComponentTypeLoader(null);
+        DataSourceImplementation implementation = new DataSourceImplementation();
+        implementation.setProviderName(Foo.class.getName());
+        implementation.setClassLoader(getClass().getClassLoader());
+        loader.load(null, implementation, null);
+        ComponentType<?, ?, ?> type = implementation.getComponentType();
+        assertEquals(2, type.getProperties().size());
+        assertNull(type.getProperties().get("object"));
+        Object bar = type.getProperties().get("bar");
+        assertEquals(String.class, ((JavaMappedProperty) bar).getJavaType());
+        Object baz = type.getProperties().get("baz");
+        assertEquals(Integer.TYPE, ((JavaMappedProperty) baz).getJavaType());
+        assertEquals(1, type.getServices().size());
+        assertEquals(DataSource.class, type.getServices().get("DataSource").getServiceContract().getInterfaceClass());
+    }
+
+
+    public class Foo {
+
+        private String bar;
+
+        private int baz;
+
+        private Foo object;
+
+        public String getBar() {
+            return bar;
+        }
+
+        public void setBar(String bar) {
+            this.bar = bar;
+        }
+
+        public int getBaz() {
+            return baz;
+        }
+
+        public void setBaz(int baz) {
+            this.baz = baz;
+        }
+
+        public Foo getObject() {
+            return object;
+        }
+
+        public void setObject(Foo object) {
+            this.object = object;
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DSComponentTypeLoaderTestCase.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoaderTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoaderTestCase.java?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoaderTestCase.java (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/DataSourceImplementationLoaderTestCase.java Sun Nov  5 11:41:48 2006
@@ -40,7 +40,6 @@
         EasyMock.replay(registry);
         DataSourceImplementationLoader loader = new DataSourceImplementationLoader(registry);
         XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
-        EasyMock.expect(reader.getName()).andReturn(loader.getXMLType()).atLeastOnce();
         EasyMock.expect(reader.getAttributeValue(null, "provider")).andReturn("org.foo.MyDriver");
         EasyMock.expect(reader.next()).andReturn(END_ELEMENT);
         EasyMock.replay(reader);
@@ -49,30 +48,6 @@
         EasyMock.replay(ctx);
         DataSourceImplementation implementation = (DataSourceImplementation) loader.load(null, null, reader, ctx);
         assertEquals("org.foo.MyDriver", implementation.getProviderName());
-        assertEquals(getClass().getClassLoader(), implementation.getClassLoader());
-        EasyMock.verify(reader);
-        EasyMock.verify(ctx);
-    }
-
-    public void testLoadingParameters() throws Exception {
-        LoaderRegistry registry = EasyMock.createNiceMock(LoaderRegistry.class);
-        EasyMock.replay(registry);
-        DataSourceImplementationLoader loader = new DataSourceImplementationLoader(registry);
-        XMLStreamReader reader = EasyMock.createMock(XMLStreamReader.class);
-        EasyMock.expect(reader.getAttributeValue(null, "provider")).andReturn("org.foo.MyDriver").once();
-        EasyMock.expect(reader.next()).andReturn(START_ELEMENT).once();
-        EasyMock.expect(reader.getName()).andReturn(new QName(null, "MyProp")).once();
-        EasyMock.expect(reader.getElementText()).andReturn("MyVal").once();
-        EasyMock.expect(reader.next()).andReturn(END_ELEMENT).once();
-        EasyMock.expect(reader.next()).andReturn(END_ELEMENT).once();
-        EasyMock.expect(reader.getName()).andReturn(loader.getXMLType()).once();
-        EasyMock.replay(reader);
-        DeploymentContext ctx = EasyMock.createMock(DeploymentContext.class);
-        EasyMock.expect(ctx.getClassLoader()).andReturn(getClass().getClassLoader());
-        EasyMock.replay(ctx);
-        DataSourceImplementation implementation = (DataSourceImplementation) loader.load(null, null, reader, ctx);
-        assertEquals("org.foo.MyDriver", implementation.getProviderName());
-        assertEquals("MyVal", implementation.getConfigurationParams().get("MyProp"));
         assertEquals(getClass().getClassLoader(), implementation.getClassLoader());
         EasyMock.verify(reader);
         EasyMock.verify(ctx);

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ProviderObjectFactoryTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ProviderObjectFactoryTestCase.java?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ProviderObjectFactoryTestCase.java (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/test/java/org/apache/tuscany/persistence/datasource/ProviderObjectFactoryTestCase.java Sun Nov  5 11:41:48 2006
@@ -18,8 +18,6 @@
  */
 package org.apache.tuscany.persistence.datasource;
 
-import java.beans.PropertyEditor;
-import java.beans.PropertyEditorManager;
 import java.io.PrintWriter;
 import java.lang.reflect.Method;
 import java.sql.Connection;
@@ -28,6 +26,9 @@
 import java.util.List;
 import javax.sql.DataSource;
 
+import org.apache.tuscany.spi.ObjectCreationException;
+import org.apache.tuscany.spi.ObjectFactory;
+
 import junit.framework.TestCase;
 import org.easymock.EasyMock;
 
@@ -39,8 +40,7 @@
     public void testInstantiation() throws Exception {
         List<Injector> injectors = new ArrayList<Injector>();
         Method m = Provider.class.getMethod("setVal", Integer.TYPE);
-        PropertyEditor editor = PropertyEditorManager.findEditor(Integer.TYPE);
-        injectors.add(new Injector(m, new ParameterObjectFactory<Integer>(editor, "1")));
+        injectors.add(new Injector(m, new MockFactory(1)));
         ProviderObjectFactory factory = new ProviderObjectFactory(Provider.class, injectors);
         DataSource ds = factory.getInstance();
         Provider provider = (Provider) ds;
@@ -50,8 +50,7 @@
     public void testInitInstantiation() throws Exception {
         List<Injector> injectors = new ArrayList<Injector>();
         Method m = DSProvider.class.getMethod("setVal", Integer.TYPE);
-        PropertyEditor editor = PropertyEditorManager.findEditor(Integer.TYPE);
-        injectors.add(new Injector(m, new ParameterObjectFactory<Integer>(editor, "1")));
+        injectors.add(new Injector(m, new MockFactory(1)));
         ProviderObjectFactory factory = new ProviderObjectFactory(DSProvider.class, injectors);
         assertNotNull(factory.getInstance());
 
@@ -134,5 +133,18 @@
             return EasyMock.createNiceMock(DataSource.class);
         }
     }
+
+    private class MockFactory implements ObjectFactory<Integer> {
+        private Integer instance;
+
+        public MockFactory(Integer instance) {
+            this.instance = instance;
+        }
+
+        public Integer getInstance() throws ObjectCreationException {
+            return instance;
+        }
+    }
+
 
 }

Modified: incubator/tuscany/java/sca/services/persistence/datasource/src/test/resources/META-INF/sca/application.scdl
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/persistence/datasource/src/test/resources/META-INF/sca/application.scdl?view=diff&rev=471505&r1=471504&r2=471505
==============================================================================
--- incubator/tuscany/java/sca/services/persistence/datasource/src/test/resources/META-INF/sca/application.scdl (original)
+++ incubator/tuscany/java/sca/services/persistence/datasource/src/test/resources/META-INF/sca/application.scdl Sun Nov  5 11:41:48 2006
@@ -25,6 +25,8 @@
         <system:implementation.ds provider="org.apache.tuscany.persistence.datasource.integration.mock.Provider">
             <test>value</test>
         </system:implementation.ds>
+        <property name="test">value</property>
+        <property name="loginTimeout">1</property>
     </component>
 
 </composite>



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