apache tuscany 2.x extensibility and spis raymond feng rfeng@apache.org
Post on 20-Jan-2016
215 Views
Preview:
TRANSCRIPT
Apache Tuscany 2.x Extensibility and SPIs
Raymond Feng
rfeng@apache.org
Tuscany Extensibilityhttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs#extensions
Tuscany Core and Extensions
Implementation Extensions
Policy Extensions
Interface Extensions
Binding Extensions
Databinding Extensions
Contribution Extensions
Host Extensions
Composite 1 Composite 2
Java Metadata Model
Deployment
Activation and Execution
SCA AssemblyXML Configuration Model
Extensibility & Pluggability
S C A com pos ite app lica t ion
Tuscany Core
Tuscany Runtim e(se lec ted and assem b led from the co re m odu les
and se lec ted ex tens ions)
21
A
B
How is Extensibility achieved?
• Inspired by Eclipse ExtensionPoint/Extension pattern
• Use Jar service provider configuration files with extended syntax– http://java.sun.com/j2se/1.4.2/docs/guide/jar/
jar.html#Service Provider – META-INF/services/<SPI>
ExtensionPoint Registry
StAXArtifactProcessor
ProviderFactory
Extension Points
Extensions
StAXArtifact
ProcessorExtension
Point
C om pos iteP rocesso r
ProviderFactory
ExtensionPoint
UtilityExtension
Point
A x is2B ind ing
P rov ide r F acto ry
JavaIm p lem en ta t ion
P rov ide r F acto ry
W eb S e rv iceB ind ing
P rocesso r
JavaIm p lem en ta t ion
P rocesso r
W orkS chedu le r
M on ito rF acto ry
In te r faceC on trac tM appe r
ExtensionPoint
Registry
META-INF/services
• META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
– org.apache.tuscany.sca.assembly.xml.CompositeProcessor;qname=http://docs.oasis-open.org/ns/opencsa/sca/200903#composite,model=org.apache.tuscany.sca.assembly.Composite
An example
implements
creates
implements
implements
extends
implements
o rg .apache . tuscany.sca .assem b ly.D e fau ltA ssem b lyF acto ry
META-INF/services/org.apache.tuscany.sca.assembly.AssemblyFactory
o rg .apache . tuscany.sca .co re .assem b ly.R un t im eA ssem b lyF acto ry
META-INF/services/org.apache.tuscany.sca.assembly.AssemblyFactory
META-INF/services/org.apache.tuscany.sca.assembly.AssemblyFactory
Service Discovery
• Two types of service discovery mechanisms– Classloader– OSGi bundles
• Sort by ranking attribute (to override default implementations)– A: <ClassName>;ranking=100 (A is picked)– B: <ClassName>;ranking=50
• Discover by a filter
OSGi-friendly Service Discovery
• Bundle.getResource()
• An implementation of ExtensionPointRegistry that uses OSGi service registry
Service Attributes
• Similar with OSGi header syntax – <ClassName>;attr1=value1,attr2=value2– Both , and ; can be used to separate
attributes– | can be used to declare multiple providers on
one line– <ClassName1>|<ClassName2>;attr1=value1
Service Constructors
• The Tuscany runtime introspects the constrcutors of an implementation class by the following order for extension points– <ImplClass>(ExtensionPointRegistry registry)– <ImplClass>(ExtensionPointRegistry registry,
Map<String, String> attributes)– <ImplClass>()
• The extension point controls how to instantiate an extension implementation class
LifeCycle of Extensions
• The implementation class of an extension point or extension can optionally implement the LifeCycleListener– start()– stop()
Extension Pointsorg.apache.tuscany.sca.core.ModuleActivatorExtensionPointorg.apache.tuscany.sca.core.UtilityExtensionPoint
org.apache.tuscany.sca.core.FactoryExtensionPointorg.apache.tuscany.sca.assembly.builder.BuilderExtensionPointorg.apache.tuscany.sca.definitions.xml.DefinitionsExtensionPointorg.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPointorg.apache.tuscany.sca.contribution.processor.StAXAttributeProcessorExtensionPointorg.apache.tuscany.sca.contribution.processor.URLArtifactProcessorExtensionPointorg.apache.tuscany.sca.contribution.processor.ValidationSchemaExtensionPointorg.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPointorg.apache.tuscany.sca.contribution.scanner.ContributionScannerExtensionPoint
org.apache.tuscany.sca.core.invocation.ProxyFactoryExtensionPointorg.apache.tuscany.sca.context.ContextFactoryExtensionPointorg.apache.tuscany.sca.provider.ProviderFactoryExtensionPointorg.apache.tuscany.sca.runtime.RuntimeWireProcessorExtensionPointorg.apache.tuscany.sca.databinding.DataBindingExtensionPointorg.apache.tuscany.sca.databinding.TransformerExtensionPointorg.apache.tuscany.sca.databinding.jaxb.XMLAdapterExtensionPoint
org.apache.tuscany.sca.host.http.ServletHostExtensionPointorg.apache.tuscany.sca.host.rmi.RMIHostExtensionPointorg.apache.tuscany.sca.implementation.web.runtime.ClientExtensionPointorg.apache.tuscany.sca.web.javascript.ComponentJavaScriptGeneratorExtensionPointorg.apache.tuscany.sca.web.javascript.JavascriptProxyFactoryExtensionPoint
ModuleActivator
• ModuleActivator is now a special type of LifeCycleListener– void start()– void stop()
• In 2.x, the implementation class of a ModuleActivator receives ExtensionPointRegistry via constructors instead of start/stop methods
• Almost all of the 1.x module activators are now converted into regular extension
Utility Extension Point
• A collection of utility functions
• Replace static singletons with a registry managed utilities
• Utilities without a META-INF/services configuration – org.apache.tuscany.sca.common.xml.stax.StA
XHelper (concrete class)
Tuscany SPIshttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs
Tuscany SPI packages
• Listed by OSGi Export-Package header• The categories
– model interfaces (assembly, implementation-java)
– base implementation classes– extension point and extension interfaces
(extensibility, core-spi, contribution)– common utilities (common-xml, common-java)– node apis and base implementations
Models
• tuscany-assembly– org.apache.tuscany.sca.assembly – org.apache.tuscany.sca.assembly.builder – org.apache.tuscany.sca.assembly.impl – org.apache.tuscany.sca.definitions – org.apache.tuscany.sca.definitions.util – org.apache.tuscany.sca.interfacedef – org.apache.tuscany.sca.interfacedef.impl – org.apache.tuscany.sca.interfacedef.util – org.apache.tuscany.sca.policy – org.apache.tuscany.sca.policy.impl – org.apache.tuscany.sca.policy.util
Interface-java and interface-wsdl
• Interface-java– org.apache.tuscany.sca.interfacedef.java.impl – org.apache.tuscany.sca.interfacedef.java.introspect – org.apache.tuscany.sca.interfacedef.java
• Interface-wsdl– org.apache.tuscany.sca.interfacedef.wsdl
• Xsd– org.apache.tuscany.sca.xsd – org.apache.tuscany.sca.xsd.xml
Contribution and deployment
• Contribution– org.apache.tuscany.sca.contribution.scanner – org.apache.tuscany.sca.contribution.resolver – org.apache.tuscany.sca.contribution.processor – org.apache.tuscany.sca.contribution – org.apache.tuscany.sca.contribution.namespace – org.apache.tuscany.sca.contribution.java
• Deployment– org.apache.tuscany.sca.deployment
– org.apache.tuscany.sca.deployment.impl
Extensibility and core-spi
• Extensibility– org.apache.tuscany.sca.core – org.apache.tuscany.sca.extensibility
• Core-spi– org.apache.tuscany.sca.context – org.apache.tuscany.sca.invocation – org.apache.tuscany.sca.management – org.apache.tuscany.sca.provider – org.apache.tuscany.sca.runtime – org.apache.tuscany.sca.work
• Monitor– org.apache.tuscany.sca.monitor
Databinding
• Databinding– org.apache.tuscany.sca.databinding – org.apache.tuscany.sca.databinding.xml – org.apache.tuscany.sca.databinding.impl – org.apache.tuscany.sca.databinding.util – org.apache.tuscany.sca.databinding.annotation
– org.apache.tuscany.sca.databinding.javabeans
Node-api and launcher
• Node-api– org.apache.tuscany.sca.node – org.apache.tuscany.sca.node.configuration
• Node-impl– org.apache.tuscany.sca.node.impl
Common utilities
• Common-java– org.apache.tuscany.sca.common.java.classloader – org.apache.tuscany.sca.common.java.collection – org.apache.tuscany.sca.common.java.io – org.apache.tuscany.sca.common.java.reflection
• Common-xml– org.apache.tuscany.sca.common.xml – org.apache.tuscany.sca.common.xml.dom – org.apache.tuscany.sca.common.xml.sax – org.apache.tuscany.sca.common.xml.stax – org.apache.tuscany.sca.common.xml.stax.reader – org.apache.tuscany.sca.common.xml.xpath
A scheme for internal package dependencies
• Semi-SPIs for internal module dependencies– Export-Package:
a.b;version=2.0.0;internal=true;mandatory:=internal
– Import-Package: a.b;version=2.0.0;internal=true
Changed SPIs
• Monitor is now mostly request-scoped
• New Builder SPIs for extensions (implementation, binding and policy)
• Context– CompositeContext (maybe should be named
as NodeContext)– ProcessorContext– BuilderContext
Changed SPIs (2)
• ???ProviderFactory.create???Provider() now takes RuntimeEndpoint for service binding and RuntimeEndpointReference for reference binding
• RuntimeWire is removed. RuntimeEndpoint and RuntimeEndpointReference own the invocation chains.
References
Useful Links
• http://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs
• http://www.manning.com/laws/ (Chapter 13 and Chapter 14)
top related