Below are the list of issues I found while getting the store scenario
working in Google AppEngine:
- The JSON-RPC Binding is using Commons HTTP Client, which spawn
threads which is not allowed in the AppEngine environment. I have a
local version of the binding using only URLOpenConnection, but it
would be good if we could have a extension point and provide a way to
plug a alternative implementation that is single threaded.
- The JSON-RPC reference wasn't properly setting the JSON databinding
in the service contract, which I have fixed and will be committing
this soon.
- The JAXBContext is a restricted class in the Google AppEngine
environment, to avoid application loading issues I had to remove
tuscany-databinding-jaxb and tuscany-interface-java-jaxws dependencies
from my application, which were causing databinding problems as
core-databinding have hard dependencies on processors from these
modules. We should revisit this and make things more flexible :
---
a/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
+++
b/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/module/DataBindingModuleActivator.java
@@ -50,7 +50,7 @@ public class DataBindingModuleActivator implements
ModuleActivator {
DataBindingExtensionPoint dataBindings =
registry.getExtensionPoint(DataBindingExtensionPoint.class);
TransformerExtensionPoint transformers =
registry.getExtensionPoint(TransformerExtensionPoint.class);
- XMLAdapterExtensionPoint xmlAdapterExtensionPoint =
registry.getExtensionPoint(XMLAdapterExtensionPoint.class);
+ //XMLAdapterExtensionPoint xmlAdapterExtensionPoint =
registry.getExtensionPoint(XMLAdapterExtensionPoint.class);
FaultExceptionMapper faultExceptionMapper =
registry.getExtensionPoint(UtilityExtensionPoint.class).getUtility(FaultExceptionMapper.class);
@@ -82,10 +82,10 @@ public class DataBindingModuleActivator implements
ModuleActivator {
FactoryExtensionPoint modelFactories =
registry.getExtensionPoint(FactoryExtensionPoint.class);
JavaInterfaceFactory javaFactory =
modelFactories.getFactory(JavaInterfaceFactory.class);
// Add the WebServiceInterfaceProcessor to mark the interface remotable
- javaFactory.addInterfaceVisitor(new WebServiceInterfaceProcessor());
+ //javaFactory.addInterfaceVisitor(new WebServiceInterfaceProcessor());
// Introspect the data types
javaFactory.addInterfaceVisitor(new
DataBindingJavaInterfaceProcessor(dataBindings));
- javaFactory.addInterfaceVisitor(new
JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper,
xmlAdapterExtensionPoint));
+ //javaFactory.addInterfaceVisitor(new
JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper,
xmlAdapterExtensionPoint));
javaFactory.addInterfaceVisitor(new
WrapperJavaInterfaceProcessor(dataBindings));
RuntimeWireProcessorExtensionPoint
wireProcessorExtensionPoint =
registry.getExtensionPoint(RuntimeWireProcessorExtensionPoint.class);
- Several commented out databindings transformers had to be re-enabled
in order to properly transform to and from JSON. Enable all commented
databindings from
/modules/databinding/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer.
Can we get them enabled with a lower/different weight so applications
without JAXB databinding just works ?
- Management classes are restricted in Google AppEngine environment,
and some of these classes are used by NodeImpl which is already
annotated with [FIXME] tags from Raymond. We should revisit this, but
it looks like commenting these management related code out of nodeImpl
had no visible side-effect.
--
Luciano Resende
http://people.apache.org/~lresende
http://lresende.blogspot.com/