edgent-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Dale LaBossiere <dml.apa...@gmail.com>
Subject Re: Looking for samples and some help on Loosely coupled Edgent applications
Date Wed, 31 May 2017 16:01:37 GMT
Yeah, this is a ~confusing and an under doc’d area.
Glad you’re back on track.

There has been some improvement in recent time - e.g., [1][2][3] all post 1.1.0.
Any concrete suggestions regarding that would be appreciated.  
Please consider contributing doc improvements, a new sample or recipe, etc! :-)

If you were not aware of IotProvider[4], you may want to check it out.  IotProvider includes
those services you’re manually instantiating/adding to your DirectProvider.

Just to be sure… registerJar() is mostly about being able to dynamically add topology implementations
to a running Edgent app/provider.  Is that your use case / can you elaborate on your use case?

— Dale

[1] https://issues.apache.org/jira/browse/EDGENT-406
[2] https://issues.apache.org/jira/browse/EDGENT-405
[3] https://issues.apache.org/jira/browse/EDGENT-401
[4] https://github.com/apache/incubator-edgent/blob/master/api/topology/src/main/java/org/apache/edgent/topology/services/ApplicationService.java
<https://github.com/apache/incubator-edgent/blob/master/api/topology/src/main/java/org/apache/edgent/topology/services/ApplicationService.java>

> On May 31, 2017, at 4:49 AM, Gayashan Amarasinghe <gayashan.amarasinghe@gmail.com>
wrote:
> 
> Hi all,
> 
> After more digging I was able to figure out the issue. In my first jar (
> cputemptopology-1.0.0.jar) which contains the TopologyBuilder
> implementation, I haven't registered the service provider and hence the
> ServiceLoader was unable to pick up the service. After fixing this I was
> able to get it running.
> 
> So my current cputemptopology-1.0.0.jar has the following structure.
> 
> ├── META-INF
> │   ├── MANIFEST.MF
> │   ├── maven
> │   │   └── org.amrsnghe.test.topology
> │   │       └── cputemptopology
> │   │           ├── pom.properties
> │   │           └── pom.xml
> │   └── services
> │       └── org.apache.edgent.topology.services.TopologyBuilder
> └── org
>    └── amrsnghe
>        └── test
>            └── topology
>                ├── CPUTempSensor.class
>                └── MyTopology.class
> 
> And
> the META-INF/services/org.apache.edgent.topology.services.TopologyBuilder
> has the following line:
> org.amrsnghe.test.topology.MyTopology
> 
> Let me know if I am doing something wrong here. But this seems to work, and
> the topology loaded from the jar is submitted to the direct provider and
> executed without an issue.
> 
> Thank you.
> 
> /Gayashan
> 
> On Wed, May 31, 2017 at 1:11 PM, Gayashan Amarasinghe <
> gayashan.amarasinghe@gmail.com> wrote:
> 
>> Hi Edgent community,
>> 
>> I am a PhD student from University of Melbourne and I am interested in the
>> Apache Edgent project. I need some help to implement a scenario to submit a
>> topology externally to a provider. Unfortunately apart from some test cases
>> in the source code and [1], I couldn't find any documentation on this. So
>> here's what I have done so far,
>> 
>>   - I have implemented the TopologyBuilder interface and created a
>>   separate jar. This is the code in the class.
>> 
>> public class MyTopology implements TopologyBuilder {
>> 
>>    @Override
>> 
>>    public String getName() {
>> 
>>        return "MyCPUTempApp";
>> 
>>    }
>> 
>> 
>>    @Override
>> 
>>    public BiConsumer<Topology, JsonObject> getBuilder() {
>> 
>>        CPUTempSensor cpuTempSensor = new CPUTempSensor();
>> 
>>        return (t, c) -> t.poll(cpuTempSensor, 2, TimeUnit.SECONDS)
>> 
>>                .filter(readings -> readings >
>> 35).sink(System.out::println);
>> 
>>    }
>> 
>> }
>> 
>> 
>>   - In a separate project, I have created another class to instantiate a
>>   DirectProvider and to load the previous jar using an AppService similar to
>>   the IotAppServiceTest. Here's the code,
>> 
>> public class DynamicAppLoader {
>>    public static void main(String[] args) {
>>        DirectProvider directProvider = new DirectProvider();
>>        JsonControlService jsonControlService = new JsonControlService();
>>        directProvider.getServices().addService(ControlService.class,
>> jsonControlService);
>>        ApplicationService service = AppService.createAndRegister(directProvider,
>> directProvider);
>>        File cpuTempAppJar =
>>                new File("/home/gayashan/projects/
>> research/cputemptopology/target/cputemptopology-1.0.0.jar");
>>        try {
>>            URL cpuTempAppJarUrl = cpuTempAppJar.toURI().toURL();
>>            JsonObject registerJar = newRegisterJarRequest(
>> cpuTempAppJarUrl.toExternalForm());
>>            jsonControlService.controlRequest(registerJar);
>>            JsonObject submitCpuTempApp = newSubmitRequest("
>> MyCPUTempApp");
>>            jsonControlService.controlRequest(submitCpuTempApp);
>>            System.out.println(service.getApplicationNames());
>>        } catch (Exception e) {
>>            System.err.println("Error: " + e.getLocalizedMessage());
>>        }
>>    }
>> 
>> ...
>> // newRegisterJarRequest and newSubmitRequest methods are as same as in
>> the IotAppServiceTest class.
>> }
>> 
>> But unfortunately I don't understand how to get this to work. Can someone
>> help me with this and point where I am making a mistake? Apologies in
>> advance if this seems like a trivial question.
>> 
>> Thank you.
>> 
>> [1] https://edgent.apache.org/recipes/recipe_dynamic_
>> analytic_control.html#loosely-coupled-edgent-applications
>> 
>> Best regards,
>> Gayashan
>> 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message