![Page 2: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/2.jpg)
Tuscany Extensibilityhttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs#extensions
![Page 3: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/3.jpg)
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
![Page 4: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/4.jpg)
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>
![Page 5: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/5.jpg)
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
![Page 6: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/6.jpg)
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
![Page 7: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/7.jpg)
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
![Page 8: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/8.jpg)
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
![Page 9: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/9.jpg)
OSGi-friendly Service Discovery
• Bundle.getResource()
• An implementation of ExtensionPointRegistry that uses OSGi service registry
![Page 10: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/10.jpg)
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
![Page 11: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/11.jpg)
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
![Page 12: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/12.jpg)
LifeCycle of Extensions
• The implementation class of an extension point or extension can optionally implement the LifeCycleListener– start()– stop()
![Page 13: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/13.jpg)
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
![Page 14: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/14.jpg)
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
![Page 15: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/15.jpg)
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)
![Page 16: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/16.jpg)
Tuscany SPIshttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs
![Page 17: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/17.jpg)
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
![Page 18: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/18.jpg)
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
![Page 19: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/19.jpg)
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
![Page 20: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/20.jpg)
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
![Page 21: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/21.jpg)
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
![Page 22: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/22.jpg)
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
![Page 23: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/23.jpg)
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
![Page 24: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/24.jpg)
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
![Page 25: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/25.jpg)
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
![Page 26: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/26.jpg)
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
![Page 27: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/27.jpg)
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.
![Page 28: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/28.jpg)
References
![Page 29: Apache Tuscany 2.x Extensibility and SPIs Raymond Feng rfeng@apache.org](https://reader035.vdocuments.us/reader035/viewer/2022062500/5697bf9a1a28abf838c921ff/html5/thumbnails/29.jpg)
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)