29
Apache Tuscany 2.x Extensibility and SPIs Raymond Feng [email protected]

Apache Tuscany 2.x Extensibility And SPIs

Embed Size (px)

DESCRIPTION

Apache Tuscany 2.x Extensibility And SPIs

Citation preview

Page 1: Apache Tuscany 2.x Extensibility And SPIs

Apache Tuscany 2.x Extensibility and SPIs

Raymond Feng

[email protected]

Page 2: Apache Tuscany 2.x Extensibility And SPIs

Tuscany Extensibilityhttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs#extensions

Page 3: Apache Tuscany 2.x Extensibility And SPIs

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

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

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

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

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

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

OSGi-friendly Service Discovery

• Bundle.getResource()

• An implementation of ExtensionPointRegistry that uses OSGi service registry

Page 10: Apache Tuscany 2.x Extensibility And SPIs

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

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

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

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

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

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

Tuscany SPIshttp://cwiki.apache.org/confluence/display/TUSCANYxDOCx2x/Tuscany+2.x+Extensibility+and+SPIs

Page 17: Apache 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

Page 18: Apache Tuscany 2.x Extensibility And SPIs

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

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

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

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

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

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

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

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

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

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

References

Page 29: Apache Tuscany 2.x Extensibility And SPIs

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)