From 8e073f2bcb612cd19f45f8222d7c543309f813e5 Mon Sep 17 00:00:00 2001 From: rfeng Date: Fri, 12 Jun 2009 18:04:02 +0000 Subject: Fix concurrency issue in JAXBDataSource (TUSCANY-3065) git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@784222 13f79535-47bb-0310-9956-ffa450edef68 --- .../DefaultTransformerExtensionPoint.java | 43 +++++++++++++++------- 1 file changed, 29 insertions(+), 14 deletions(-) (limited to 'java/sca/modules/databinding/src/main') diff --git a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java index fc8b89c5b9..6258465c13 100644 --- a/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java +++ b/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java @@ -6,15 +6,15 @@ * 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. + * under the License. */ package org.apache.tuscany.sca.databinding; @@ -27,6 +27,7 @@ import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.impl.DirectedGraph; import org.apache.tuscany.sca.extensibility.ServiceDeclaration; import org.apache.tuscany.sca.extensibility.ServiceDiscovery; @@ -38,9 +39,11 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi private static final Logger logger = Logger.getLogger(DefaultTransformerExtensionPoint.class.getName()); private boolean loadedTransformers; + private ExtensionPointRegistry registry; private final DirectedGraph graph = new DirectedGraph(); - public DefaultTransformerExtensionPoint() { + public DefaultTransformerExtensionPoint(ExtensionPointRegistry registry) { + this.registry = registry; } public void addTransformer(String sourceType, String resultType, int weight, Transformer transformer, boolean publicTransformer) { @@ -101,12 +104,12 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi loadedTransformers = true; loadTransformers(PullTransformer.class); loadTransformers(PushTransformer.class); - + } /** * Dynamically load transformers registered under META-INF/services. - * + * * @param transformerClass */ private synchronized void loadTransformers(Class transformerClass) { @@ -149,7 +152,7 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi * A transformer facade allowing transformers to be lazily loaded * and initialized. */ - private static class LazyPullTransformer implements PullTransformer { + private class LazyPullTransformer implements PullTransformer { private String source; private String target; @@ -166,7 +169,7 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi /** * Load and instantiate the transformer class. - * + * * @return The transformer. */ @SuppressWarnings("unchecked") @@ -175,8 +178,14 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi try { Class> transformerClass = (Class>)transformerDeclaration.loadClass(); - Constructor> constructor = transformerClass.getConstructor(); - transformer = constructor.newInstance(); + try { + Constructor> constructor = transformerClass.getConstructor(); + transformer = constructor.newInstance(); + } catch (NoSuchMethodException e) { + Constructor> constructor = + transformerClass.getConstructor(ExtensionPointRegistry.class); + transformer = constructor.newInstance(registry); + } } catch (Exception e) { throw new IllegalStateException(e); } @@ -212,7 +221,7 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi * A transformer facade allowing transformers to be lazily loaded * and initialized. */ - private static class LazyPushTransformer implements PushTransformer { + private class LazyPushTransformer implements PushTransformer { private String source; private String target; @@ -229,7 +238,7 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi /** * Load and instantiate the transformer class. - * + * * @return The transformer. */ @SuppressWarnings("unchecked") @@ -238,8 +247,14 @@ public class DefaultTransformerExtensionPoint implements TransformerExtensionPoi try { Class> transformerClass = (Class>)transformerDeclaration.loadClass(); - Constructor> constructor = transformerClass.getConstructor(); - transformer = constructor.newInstance(); + try { + Constructor> constructor = transformerClass.getConstructor(); + transformer = constructor.newInstance(); + } catch (NoSuchMethodException e) { + Constructor> constructor = + transformerClass.getConstructor(ExtensionPointRegistry.class); + transformer = constructor.newInstance(registry); + } } catch (Exception e) { throw new IllegalStateException(e); } -- cgit v1.2.3