I’ve gotten a step further, but I am still having problems.

My jar file that I start up first, called registerJarExample.jar now contains 
the correct service entries in the jar file.
This application looks like this:

package pi;


public class RegisterJarExample {
        private static final Logger logger = 
        public static void main(String args[]) throws Exception {

                File configFile = new File("./device_config.txt");
                IotProvider provider = new IotProvider(topology -> new 
IotpDevice(topology, configFile));
                 * Not sure if I need the next few lines or not ...
                JsonControlService control = new JsonControlService();
                ApplicationService appService = 
AppService.createAndRegister(provider, provider);
                logger.info("Here is some info");

Then, the jar file that contains the application that I want to run when I 
issue the registerJar command looks like this:

package pi.sensors;


public class SpeedSensorTopologyBuilder {
        private static abstract class Sensor implements TopologyBuilder {
        public BiConsumer<Topology, JsonObject> getBuilder() {
                        return (t,c) -> t.strings(getName()).print();
        public static class SpeedSensor extends Sensor {
        public String getName() {
            return "SpeedJarApp";
        public void accept(IotDevice device, JsonObject config) {
                TStream<Date> readingTime = device.topology().poll(() -> new 
Date(), 3, TimeUnit.SECONDS);
                        TStream<JsonObject> speedReading = readingTime.map(rt ->
                                        JsonObject speedInfo = new JsonObject();
                                        long curTime = 
                                        SimpleDateFormat sdf = new 
SimpleDateFormat("MMM dd,yyyy HH:mm:ss");
                                        Date dateObj = new Date(curTime);
                                        try {
                                                double speed = 
SystemInfo.getMemoryUsed() * 0.0000000752;
                                            Random randomGenerator = new 
                                            int randomInt = 
                                                double randSpeed = speed + 
                                                DecimalFormat df = new 
                                        } catch(Exception e) {
                                                throw new RuntimeException(e);
                            return speedInfo;
                        device.events(speedReading,  "speedReading", 

I can tell that the application “SpeedJarApp” is being loaded because I put a 
logger statement in AppService.java here:

    public void registerTopology(String applicationName, BiConsumer<Topology, 
JsonObject> builder) {
        logger.info("Register application name: {}", applicationName);
        applications.put(applicationName, builder);

and I can see the line “Register application name SpeedJarApp”.

However, when I try to “submit’ the SpeedJarApp using this command:



Nothing happens.  Looking at my code above I know something is wrong because in 
the ‘accept’ method, which I had used before and worked when I registered the 
topology through the api instead of via the registerJar command, I’m not 
passing the IotDevice and I’m not sure how to…

Does anyone know how I need to code the method (and if there is a particular 
method I need to override) to allow me to submit a command that will allow me 
to start sending events?  To clarify, this is the code that is in the jar file 
that is loaded via the registerJar command.



> On Sep 15, 2016, at 10:11 AM, Dan Debrunner <d...@debrunners.com> wrote:
> On 9/14/2016 10:48 AM, Susan Cline wrote:
>> Are you saying there is an entry in the jar file that I need to make?
>> I.e, put something in the META-INF directory of the jar file?
> Yes, it's documented (with the assumption that the reader knows Jar files) in 
> the TopologyBuilder class and ApplicationServiceMXBean.registerJar method. 
> Basically each application is registered as a TopologyBuilder service 
> provider.
> You can see the ant mechanism to build the jar file here:
> https://github.com/apache/incubator-edgent/blob/b86179228c51bb81b85f5e0d0b588f211595d8d2/api/topology/build.xml#L45
> Dan.

Reply via email to