Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Migrated to Confluence 5.3

...

How

...

does

...

Tuscany

...

start

...

components

...

from

...

a

...

contribution?

...

Contributed

...

by

...

Giorgio

...

Zoppi

...

<giorgio.zoppi@gmail.com>

...

This

...

document

...

describes

...

how

...

a

...

composite

...

file

...

(i.e.

...


MyComposite.composite)

...

gets

...

processed

...

for

...

a

...

simple

...

composite.

...

When

...


the

...

XML

...

parser

...

sees

...

a

...

composite

...

element,

...

create

...

a

...

composite,

...

it

...

checks

...


if

...

it

...

is

...

autowired

...

and

...

if

...

it

...

has

...

an

...

item

...

autowire,

...

it

...

sets

...

the

...


composite

...

to

...

be

...

autowired,

...

then

...

it

...

checks

...

if

...

it's

...

local

...

and

...

if

...

it

...

has

...


constrainting

...

types.

...

If

...

the

...

composite

...

has

...

constrainting

...

types,

...

they

...


are

...

processed.

...


Then

...

the

...

parser

...

reads,

...

if

...

they

...

are

...

present,

...

the

...

policies

...

for

...

the

...


composite.

...

Suppose

...

that

...

in

...

my

...

simple

...

example

...

i

...

have

...

no

...

constrain

...

or

...


policy.

...


At

...

a

...

given

...

point

...

the

...

parser

...

sees

...

an

...

<component>

...

item,

...

in

...

this

...

case,

...

the

...

runtime:

...

  • It creates a RuntimeComponent by the RuntimeComponentFactory,
    sets its name, it looks if the component needs to be autowired,
    then it checks if it has constrainting types. If the composite has
    constrainting types, they are processed.
    Then the parser reads, if they are present, the policies for the component.
    At other point the runtime sees an extension point, which it could be
    a service, a binding, an implementation type and so on..In this
    document we suppose, that the runtime sees:

<implementation.java .....>

The runtime at this point gets the extension processor. The extension
processor has in input the component, and the reader from the XML
Parser. From the XML document, the extension processor recognize the
extension type and it gets the needed factory.
For example, inside the read method of JavaImplementationProcessor we have:

JavaImplementation javaImplementation = javaFactory.createJavaImplementation();
javaImplementation.setUnresolved(true);

...

From

...

the

...

CLASS

...

attribute,

...

the

...

runtime

...

understand

...

the

...

kind

...

of

...

interface.

Code Block

        javaImplementation.setName(reader.getAttributeValue(null, CLASS));

Then

...

it

...

reads

...

the

...

policies:

Code Block


        // Read policies
        policyProcessor.readPolicies(javaImplementation, reader);

        // Skip to end element
        while (reader.hasNext()) {
            if (reader.next() == END_ELEMENT &&
IMPLEMENTATION_JAVA_QNAME.equals(reader.getName())) {
                break;
            }
        }
        return javaImplementation;


At

...

this

...

point,

...

the

...

runtime

...

adds

...

the

...

implementation

...

to

...

the

...

component

...

with:

Code Block


   component.setImplementation(...)

and

...

it

...

adds

...

the

...

component

...

to

...

the

...

composite.

...

Until

...

now

...

we're

...

processing

...

a

...

MyComposite.composite

...

like

...

this:

Code Block


<composite>
<component name="MyName">
<implementation.java class="package.MyClass"/>
</component>
</composite>

Suppose

...

now

...

to

...

find

...

a

...

service(<service>)

...

item,

...

what

...

happens?

...


The

...

runtime:

...

  • creates

...

  • a

...

  • RuntimeComponentService

...

  • sets

...

  • the

...

  • Contract

...

  • (service

...

  • contract)

...

  • to

...

  • RuntimeComponentService

...

  • sets

...

  • RuntimeComponentService's

...

  • name

...

  • adds

...

  • RuntimeComponentService

...

  • instance

...

  • to

...

  • Component's

...

  • Services.

...

  • it

...

  • seeks

...

  • for

...

  • services

...

  • policies.

...

Now

...

a

...

service

...

has

...

an

...

interface

...

(<interface>),

...

and

...

it

...

could

...

be

...

a

...

java

...


interface.

...

At

...

this

...

point

...

the

...

runtime

...

creates

...

a

...


JavaInterfaceContractImpl

...

by

...

a

...

JavaInterfaceFactory

...

and

...

sets

...

it

...

to

...

the

...


service

...

contract

...

(call:

...

contract.setInterfaceContract(...)).

...