I am attempting to create an executable device with a single Java implementation in REDHAWK 1.9.
From the REDHAWK IDE I use File > New > SCA Device Project, and select Executable in the Device dropdown. For language I choose Java and the generator Java Code Generator using template Pull Port Data.
When I create the Device and generate the code in the IDE, it only extends Device
which in turn only implements CF.DeviceOperations
. I would have expected an executable device to extend something that implemented CF.ExecutableDeviceOperations
. Looking at the source on github there does not appear to be a Java Executable implementation.
I can run the Java Device in a Device Manager, but when I try to launch a waveform the Domain Manager prints the error:
Device <id> is not loadable
Looking at the source this appears to occur in the Application Factory when it tries to narrow the device to a loadable device. My understanding is that a device must be loadable and executable in order to run a component, so it would make sense that it fails here if the implementation doesn't actually implement those methods.
If I change the implementation to C++ the generated code does extend an ExecutableDevice_impl
that implements these functions, and I can use it to successfully load and execute a component from a waveform.
All this leads me to believe that a Java implementation of an executable device was not shipped with REDHAWK 1.9. Is this correct? Is one currently in development? I do not need to customize any of the methods that a GPP would provide for our hardware, so ideally I would reuse such an implementation if it existed.