开发者中心

Hello, ME!

概述

在这个章节,我们将看到在JavaME平台上如何运行一个"Hello, world!"。QuarkIoEJavaME客户端库是非常轻量级的,且不依赖于其他软件。除了Java对象里,请求的serialization和响应的deserialization,接口和JavaSE客户端库非常接近。其他章节的内容也大多适用于JavaME客户端库。

本章节的列子是在包含Oracle JavaME SDK的模拟器上运行的。在真实设备上运行代码,参见章节 Cinterion Java模块。 JavaME在树莓派上也提供支持。我们使用Eclipse作为例子,但是相似的方法在其他开发环境中也是可以工作的。

前提

要运行示例,你需要:

  • 下载 Oracle JavaME SDK。 我们的例子在SDK版本3.4上测试通过。
  • 安装SDK和相关的Eclipse plugins, 参见Oracle's Developer's Guide

开发"Hello, world!" agent

使用Oracle JavaME SDK和Eclipse开发"Hello, world!" agent, 你需要:

  • 在Eclipse中,创建一个IMP-NG MIDlet项目。 IMP-NG是用在嵌入式设备的JavaME profile。
  • 导入 QuarkIoEJavaME SmartREST客户端库到你的项目中。
  • 编写agent代码。
  • 运行agent。
创建一个MIDlet项目

第一步, 你需要创建和配置一个可以运行在JavaME设备或者模拟器的项目。这样的项目在Eclipse中被称为"MIDlet project"。

  • 点击 "New", "Project"然后选择"MIDlet Project"创建项目。
  • 输入项目名, 例如, "hello"。
  • 点击 "Configurations"列表旁边的"Add"。
  • 选择"Oracle Java Platform Micro Edition SDK 3.4" (或者类似的)作为SDK,然后"IMPNGDevice1"作为设备。 点击"OK"。
  • 确保"IMPNGDevice1"被标记为"active"。
  • 点击"Next"。
  • 选择 "Connected Limited Device Configuration (1.1)" 作为 "Microedition Configuration" , "Information Module Profile (NG)" 作为 "Microedition Profile"。
  • 点击 "Finish".
  • 在"Overview"标签上打开应用描述符。点击"Application Descriptor"标签。象下面那样,用"IMP-NG"替换"IMP-NG-2.0"。点击"Save"。 你可能会得到一些错误提示,可以忽略它们 -- 这些是Eclipse插件实现已知的问题。

  MicroEdition-Profile: IMP-NG
              
前提

开始开发你的agent, 你需要

  • 下载我们的客户端库。
  • 复制文件夹"java-me-smartrest-client/src/main/java/com" 到你的项目的"src"文件夹下。
  • 右键点击你的项目,然后选择"Refresh"。

除了技术需求,你可以查看我们的 SmartREST 指南SmartREST 参考 来理解协议。

编写agent代码

最后, 你需要创建一个MIDlet 来包含你的agent代码。 JavaME的一个MIDlet大致相当于JavaSE的一个"main"类。.

  • 右键点击你的项目,然后选择"New", "Java ME MIDlet"。
  • 给你的MIDlet指定一个包名和类名,然后点击"Finish"。 在"startApp"方法里粘贴下面的代码。用你的URL (e.g., "https://myurl.quarkioe.com"), username 和 password替换"<<yourUrl>>", "<<yourUser>>" and "<<yourPassword>>"。 "<<tenantId>>"是你的URL (e.g., "myurl" in this case)的第一部分。"<<yourXId>>"是用在SmartREST协议中的XId。 下面的代码创建了一个连接, 注册你的模板,最后用模板创建一个设备。

  String mySmartRestTemplate = "10,100,POST,/inventory/managedObjects/,application/vnd.com.nsn.cumulocity.managedObject+json,application/vnd.com.nsn.cumulocity.managedObject+json,&&,,\"{\"\"name\"\":\"\"&&\"\",\"\"c8y_IsDevice\"\":{}}\"";
  SmartConnection connection = new SmartHttpConnection("<<yourUrl>>","<<tenantId>>","<<yourUser>>","<<yourPassword>>","<<yourXId>>");
  connection.templateRegistration(templateString);

  connection.executeRequest(new SmartRequestImpl("100,myDeviceName"));
                
运行agent

现在右键点击项目,选择"Run as""Emulated Java ME MIDlet",运行你的agent。 这样会启动模拟器,部署你的代码到模拟器上然后运行。

连接到QuarkIoE

通过实现SmartConnection接口创建到QuarkIoE的连接。我们的库随着你用来发送请求的SmartHttpConnection来提供。


  SmartConnection connection = new SmartHttpConnection("http://mypartof.quarkioe.com","myTenant","myUser","myPassword","myXid");
                
设备自举

如果没有设备的证书,你可以生成一个新的设备证书。参见 设备集成 部分查看如何获取所需凭证。


  SmartConnection connection = new SmartHttpConnection("http://mypartof.quarkioe.com","deviceBootstrapTenant","deviceBootstrapUser","deviceBootstrapPassword","myXid");
  String authenticationHeader = connection.bootstrap("myUniqueDeviceId");
                

请注意用这个方法来获取设备的证书只能使用一次。 当前连接会自定义使用新的证书,但你需要在重启设备后存储证书用于以后使用。 你也可以使用身份验证的header来创建连接。


  SmartConnection connection = new SmartHttpConnection("http://mypartof.quarkioe.com","myXid","myAuthenticationHeader");
                
模板注册

使用有效证书创建连接后, 你首先需要注册SmartREST模板到QuarkIoE。 如果模板已经注册,客户端库会自动在下面函数里检查。只有没有注册的时候,才需要发送到平台上。


  String myTemplateString = "...";
    connection.templateRegistration(myTemplateString);
                

模板注册成功,你的连接就可以用来发送请求了。

发送请求和解析响应

创建一个请求

SmartREST中, 每个请求都被单个逗号分隔,而且通常以和模板相关的消息标识符开始。下面两个例子创建相同的请求。


  SmartRequest request1 = new SmartRequestImpl("100,myValue1,myValue2");
  SmartRequest request2 = new SmartRequestImpl(100,"myValue1,myValue2");
                
发送请求

你可以用你的连接发送请求到QuarkIoE


  SmartResponse response1 = connection.executeRequest(request1);
                

响应的每行信息都会放在一个SmartRow中, 其中包含一组SmartResponse。 注意,即使你只发送一个请求,SmartREST也可能在一个响应内返回多行。

异步发送一个请求

如果不想一直等到响应返回,你可以异步发送请求,然后等收到响应后,通过SmartResponseEvaluator接口解析。


  SmartResponseEvaluator myEvaluator = new MySmartResponseEvaluatorImpl();
  connection.executeRequestAsync(request2,myEvaluator);
                

SmartREST实时通知

客户端库也有一个内置的客户端来使用SmartREST实时通知功能。 了解这个功能的概念参见SmartREST 参考。 想要大致了解已有提供实时通知的终端和渠道,请阅读实时通知

例子: 监听操作

使用客户端库监听SmartREST实时通知一直在一个单独的线程里运行。因此,需要通过SmartResponseEvaluator接口来解析响应。接收设备操作的URL是"/devicecontrol/notifications"和包含接收操作的agent ID的通道。


  SmartCometClient client = new SmartCometClient(connection, myEvaluator);
  client.startListenTo("/devicecontrol/notifications", new String[]{"/12345"});
                

你可以同时监听一个终端的使用相同的长连接推送方式连接的多个通道。"startListenTo"函数将执行所有步骤,详情参见SmartREST参考 长连接推送作为最后一步。 要停止长连接推送可以调用:


  client.stopListenTo();