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