diff options
Diffstat (limited to 'sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca')
3 files changed, 53 insertions, 7 deletions
diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java index 8c193151f9..23063317e7 100644 --- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java +++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOContextHelper.java @@ -24,12 +24,15 @@ import java.util.ArrayList; import java.util.List; import java.util.Set; +import javax.xml.datatype.DatatypeFactory; import javax.xml.namespace.QName; import org.apache.tuscany.sca.common.java.collection.LRUCache; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.TransformationContext; import org.apache.tuscany.sca.databinding.TransformationException; import org.apache.tuscany.sca.databinding.util.DataTypeHelper; +import org.apache.tuscany.sca.extensibility.ClassLoaderContext; import org.apache.tuscany.sca.interfacedef.DataType; import org.apache.tuscany.sca.interfacedef.Operation; import org.apache.tuscany.sca.interfacedef.util.XMLType; @@ -48,9 +51,21 @@ import commonj.sdo.impl.HelperProvider; */ public final class SDOContextHelper { private static final LRUCache<Object, HelperContext> cache = new LRUCache<Object, HelperContext>(1024); + + private static ExtensionPointRegistry registry = null; + private static HelperContext defaultHelperContext; private SDOContextHelper() { } + + /** + * Static method used to set the registry used to locate the SDO implementation provider + * MUST be called before using any other methods on this class + * @param theRegistry + */ + public static void setRegistry( ExtensionPointRegistry theRegistry ) { + registry = theRegistry; + } // end setRegistry public static HelperContext getHelperContext(TransformationContext context, boolean source) { if (context == null) { @@ -161,10 +176,35 @@ public final class SDOContextHelper { } } - public static HelperContext getDefaultHelperContext() { - // SDOUtil.createHelperContext(); - return HelperProvider.getDefaultContext(); - } + public static HelperContext getDefaultHelperContext( ) { + // Return a chached value if available... + if( defaultHelperContext != null ) return defaultHelperContext; + + // Try to set up TCCL so that SDO Helper Provider service discovery works in OSGi + if( registry == null ) return null; + + ClassLoader oldTccl = + ClassLoaderContext.setContextClassLoader(SDOContextHelper.class.getClassLoader(), + registry.getServiceDiscovery(), + // SDO Helper Provider + "commonj.sdo.impl.HelperProvider" + ); + try { + // Load the HelperProvider (using the new TCCL) and get the default HelperContext + // cache the returned HelperContext... + ClassLoader tccl = Thread.currentThread().getContextClassLoader(); + HelperProvider.setDefaultInstance(tccl); + defaultHelperContext = HelperProvider.getDefaultContext(); + return defaultHelperContext; + } catch (Exception e ){ + e.printStackTrace(); + return null; + } finally { + if (oldTccl != null) { + Thread.currentThread().setContextClassLoader(oldTccl); + } + } // end try + } // end getDefaultHelperContext() public static QName getElement(TransformationContext context) { if (context == null) { diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java index 957ba7679b..0003e7d46f 100644 --- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java +++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDODataBinding.java @@ -24,6 +24,7 @@ import java.security.PrivilegedAction; import javax.xml.namespace.QName; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.BaseDataBinding; import org.apache.tuscany.sca.databinding.WrapperHandler; import org.apache.tuscany.sca.databinding.XMLTypeHelper; @@ -52,8 +53,9 @@ public class SDODataBinding extends BaseDataBinding { private WrapperHandler<Object> wrapperHandler; private XMLTypeHelper xmlTypeHelper; - public SDODataBinding() { + public SDODataBinding( ExtensionPointRegistry registry ) { super(NAME, DataObject.class); + SDOContextHelper.setRegistry( registry ); wrapperHandler = new SDOWrapperHandler(); xmlTypeHelper = new SDOTypeHelper(); } diff --git a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java index 1634a73563..381249d9bb 100644 --- a/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java +++ b/sca-java-2.x/trunk/modules/databinding-sdo/src/main/java/org/apache/tuscany/sca/databinding/sdo/SDOTypeHelper.java @@ -30,6 +30,7 @@ import javax.xml.namespace.QName; import org.apache.tuscany.sca.contribution.processor.ProcessorContext; import org.apache.tuscany.sca.contribution.resolver.ModelResolver; +import org.apache.tuscany.sca.core.ExtensionPointRegistry; import org.apache.tuscany.sca.databinding.XMLTypeHelper; import org.apache.tuscany.sca.interfacedef.DataType; import org.apache.tuscany.sca.interfacedef.Interface; @@ -62,7 +63,7 @@ public class SDOTypeHelper implements XMLTypeHelper { // private Map<String, List<Type>> xsdTypesMap = new HashMap<String, List<Type>>(); // private Map<String, List<Type>> typesMap = new HashMap<String, List<Type>>(); - public SDOTypeHelper(ProcessorContext context) { + public SDOTypeHelper( ProcessorContext context ) { super(); this.context=context; //Should we use this.context to get helper objects ??? @@ -71,11 +72,14 @@ public class SDOTypeHelper implements XMLTypeHelper { } //Should we remove this constructor???? otherwise we context gets created public SDOTypeHelper() { - super(); + this(null); + /* + super(); this.context=null; //Should we use this.context to get helper objects ??? typeHelper = SDOContextHelper.getDefaultHelperContext().getTypeHelper(); xsdHelper = SDOContextHelper.getDefaultHelperContext().getXSDHelper(); + */ } public TypeInfo getTypeInfo(Class javaType, Object logical) { QName xmlType = JavaXMLMapper.getXMLType(javaType); |