OSGi RFC 119 Implementation

The Distributed Calculator Scenario

The calculator.dosgi bundle

http://svn.apache.org/repos/asf/tuscany/java/sca/samples/dosgi-calculator/

META-INF/MANIFEST.MF

Manifest-Version: 1.0
Export-Package: calculator.dosgi;version="1.0.0",
 calculator.dosgi.operations;version="1.0.0"
Bundle-Version: 1.0.0
Bundle-Name: calculator.dosgi
Bundle-Activator: calculator.dosgi.CalculatorActivator
Bundle-ManifestVersion: 2
Import-Package: calculator.dosgi.operations;version="1.0.0",
 org.osgi.framework,
 org.osgi.service.packageadmin,
 org.osgi.util.tracker,
 org.osgi.service.component;resolution:=optional
Bundle-SymbolicName: calculator.dosgi
Bundle-Vendor: The Apache Software Foundation
Bundle-ActivationPolicy: lazy
Eclipse-LazyStart: true
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-DocURL: http://www.apache.org/
Service-Component: OSGI-INF/calculator-component.xml

The SCA component type definition: OSGI-INF/sca/bundle.componentType

<componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1">
    <!-- The service elment defines an SCA view of the OSGi service -->
    <service name="Calculator">
        <!-- The interface will be mapped into the OSGi service class -->
        <interface.java interface="calculator.dosgi.CalculatorService"/>
        <!-- The list of OSGi properties -->
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </service>

    <!-- The reference elment defines an SCA proxy to a remote OSGi service -->
    <reference name="addService">
        <interface.java interface="calculator.dosgi.operations.AddService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </reference>
    <reference name="subtractService">
        <interface.java interface="calculator.dosgi.operations.SubtractService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </reference>
    <reference name="multiplyService">
        <interface.java interface="calculator.dosgi.operations.MultiplyService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </reference>
    <reference name="divideService">
        <interface.java interface="calculator.dosgi.operations.DivideService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </reference>

</componentType>

The SCA composite definition: OSGI-INF/sca/bundle.composite

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
    xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://calculator.dosgi"
    name="CalculatorComposite">

    <component name="CalculatorComponent">
        <tuscany:implementation.osgi bundleSymbolicName="calculator.dosgi" bundleVersion="1.0.0" />
        <reference name="addService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/AddService"/>
        </reference>
        <reference name="subtractService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/SubtractService"/>
        </reference>
        <reference name="multiplyService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/MultiplyService"/>
        </reference>
        <reference name="divideService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/DivideService"/>
        </reference>
    </component>

</composite>

The calculator.dosgi.operations bundle

https://svn.apache.org/repos/asf/tuscany/java/sca/samples/dosgi-calculator-operations/

META-INF/MANIFEST.MF

Manifest-Version: 1.0
Export-Package: calculator.dosgi.operations;version="1.0.0"
Bundle-Version: 1.0.0
Bundle-Name: calculator.dosgi.operations
Bundle-Activator: calculator.dosgi.operations.OperationsActivator
Bundle-ManifestVersion: 2
Import-Package: calculator.dosgi.operations;version="1.0.0",
 org.osgi.framework,
 org.osgi.service.component;resolution:=optional
Bundle-SymbolicName: calculator.dosgi.operations
Bundle-Vendor: The Apache Software Foundation
Bundle-ActivationPolicy: lazy
Eclipse-LazyStart: true
Bundle-License: http://www.apache.org/licenses/LICENSE-2.0.txt
Bundle-DocURL: http://www.apache.org/
Service-Component: OSGI-INF/add-component.xml,
 OSGI-INF/subtract-component.xml,
 OSGI-INF/multiply-component.xml,
 OSGI-INF/divide-component.xml

The SCA component type definition: OSGI-INF/sca/bundle.componentType

<componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               xmlns:t="http://tuscany.apache.org/xmlns/sca/1.1">


    <!-- The service elment defines an SCA proxy to a remote OSGi service -->
    <service name="AddService">
        <interface.java interface="calculator.dosgi.operations.AddService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </service>
    <service name="SubtractService">
        <interface.java interface="calculator.dosgi.operations.SubtractService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </service>
    <service name="MultiplyService">
        <interface.java interface="calculator.dosgi.operations.MultiplyService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </service>
    <service name="DivideService">
        <interface.java interface="calculator.dosgi.operations.DivideService"/>
        <t:osgi.property name="prop1">1</t:osgi.property>
        <t:osgi.property name="prop2">ABC</t:osgi.property>
    </service>

</componentType>

The SCA composite definition: OSGI-INF/sca/bundle.composite

<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200903"
    xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    targetNamespace="http://calculator.dosgi"
    name="OperationsComposite">

    <component name="OperationsComponent">
        <tuscany:implementation.osgi bundleSymbolicName="calculator.dosgi.operations" bundleVersion="1.0.0" />
        <service name="AddService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/AddService"/>
        </service>
        <service name="SubtractService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/SubtractService"/>
        </service>
        <service name="MultiplyService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/MultiplyService"/>
        </service>
        <service name="DivideService">
            <tuscany:binding.rmi uri="rmi://localhost:8085/DivideService"/>
        </service>

    </component>

</composite>

Tuscany/SCA modules related to RFC 119

  • implementation-osgi module
    This module contains the java model for <implementation.osgi> and XML processors to load/save related XML document
  • contribution-osgi module
    This module contains the contribution processing code that handles the OSGi bundles as SCA contributions
  • node-impl-osgi module
    This module listens on the OSGi bundles that are SCA enabled. It builds a Tuscany SCA node to run the composite application.
  • No labels