Notice: This Wiki is now read only and edits are no longer possible. Please see: https://gitlab.eclipse.org/eclipsefdn/helpdesk/-/wikis/Wiki-shutdown-plan for the plan.
SCA/Components/SCA Composite to Java
Principles
With SCA, one can easily make errors by mispelling an element name (e.g. a service name) or by making incompatible interfaces (e.g. in a wire). A conveninent solution to avoid these errors when starting from zero, is to create a complete composite and then to generate the Java code skeleton of your SCA application. SCA Tools now provides such a feature.
- First, start by creating a composite using the composite editors (most likely the SCA Designer).
- Fill in the element properties (interface names, etc...).
- Then, right-click on your composite and select SCA > Generate Java Skeleton.
- In the dialog which appears, select the output source folder and the Java files to generate.
- The Java code skeleton is then generated. It declares the types with the right class hierarchy, the SCA annotations, the references and the properties.
Complete the Java artifacts by adding the service operations in the interfaces and by implementing them in the implementations.
Screenshots
At the beginning, you only have your composite.
If you look at it in the SCA Designer, you will notice warning markers on elements referencing Java artifacts.
These markers will simply indicate that the Java artifacts do not exist in the class path.
Once your composite is complete, right-click on the composite and ask to generate the Java skeletons.
The opening dialog lists the elements it can create (already existing ones are skipped) and the output folder.
Clicking OK results in the code generation.
Here is a sample of a generated implementation of the diagram above.
/* * Generated from WeatherApplication.composite on 05/26/09 at 16:28:12. */ package weather.impl; import org.osoa.sca.annotations.Property; import org.osoa.sca.annotations.Reference; import org.osoa.sca.annotations.Service; import org.toto2.Toto2; import simpleweather.interfaces.SimpleWeatherService_PortType; import weather.interfaces.GlobalWeatherService; @Service( interfaces={Toto2.class, GlobalWeatherService.class}) public class GlobalWeatherImpl implements Toto2, GlobalWeatherService { // // Properties @Property public Object pouf24; // TODO: replace "Object" by the right type. @Property public Object pouf23; // TODO: replace "Object" by the right type. // // References private SimpleWeatherService_PortType simpleWeatherReference; @Reference public void setSimpleWeatherReference( SimpleWeatherService_PortType simpleWeatherReference ) { this.simpleWeatherReference = simpleWeatherReference; } // TODO: define the service implementation. }
Known limitations
- This tool is for the moment restricted to Java interfaces and implementations.
- It could be upgraded to support other interfaces (e.g. WSDLs) and other implementations (e.g. script).
- This tool does not support code merge for the moment.
- That is to say you can not regenerate code if the target file already exists.
- Complex properties are not well supported.
- Their type is always set to Object.