blob: 457814869138d1353550e51a5af9b784d73bbd6d [file] [log] [blame]
<!DOCTYPE html>
<html lang="en-us">
<head>
<meta charset="utf-8">
<meta name="robots" content="all,follow">
<meta name="googlebot" content="index,follow,snippet,archive">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Release Notes :: Eclipse Hono&trade;</title>
<meta name="author" content="" />
<meta name="description" content="A set of micro-services for connecting millions of devices.">
<meta name="generator" content="Hugo 0.54.0" />
<link href='//fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic,500,700,800' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.8.2/css/all.css" integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay" crossorigin="anonymous">
<link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<link href="/hono/css/animate.css" rel="stylesheet">
<link href="/hono/css/style.hono.css" rel="stylesheet" id="theme-stylesheet">
<link href="/hono/css/custom.css" rel="stylesheet">
<!--[if lt IE 9]>
<script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->
<link rel="apple-touch-icon" sizes="180x180" href="/hono/favicon/apple-touch-icon.png">
<link rel="icon" type="image/png" sizes="48x48" href="/hono/favicon/favicon-48x48.png">
<link rel="icon" type="image/png" sizes="32x32" href="/hono/favicon/favicon-32x32.png">
<link rel="icon" type="image/png" sizes="16x16" href="/hono/favicon/favicon-16x16.png">
<link rel="manifest" href="/hono/favicon/site.webmanifest">
<link rel="mask-icon" href="/hono/favicon/safari-pinned-tab.svg" color="#5bbad5">
<link rel="shortcut icon" href="/hono/favicon/favicon.ico">
<meta name="msapplication-TileColor" content="#da532c">
<meta name="msapplication-config" content="/hono/favicon/browserconfig.xml">
<meta name="theme-color" content="#ffffff">
<link href="/hono/css/owl.carousel.css" rel="stylesheet">
<link href="/hono/css/owl.theme.css" rel="stylesheet">
<link rel="alternate" href="https://www.eclipse.org/hono//index.xml" type="application/rss+xml" title="Eclipse Hono&amp;trade;">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@EclipseHono">
<meta name="twitter:title" content="Release Notes :: Eclipse Hono&amp;trade;">
<meta name="twitter:image" content="https://www.eclipse.org/hono/img/twitter_image.png">
<meta name="twitter:description" content="A set of micro-services for connecting millions of devices.">
<meta property="og:title" content="Release Notes :: Eclipse Hono&amp;trade;" />
<meta property="og:type" content="website" />
<meta property="og:url" content="https://www.eclipse.org/hono/release-notes//" />
<meta property="og:image" content="https://www.eclipse.org/hono/img/twitter_image.png" />
<link rel="stylesheet" href="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css">
</head>
<body>
<div id="all">
<header>
<div class="navbar-affixed-top" data-spy="affix" data-offset-top="70">
<div class="navbar navbar-default yamm" role="navigation" id="navbar">
<div class="container">
<div class="navbar-header">
<a class="navbar-brand home" href="https://www.eclipse.org/hono/">
<img src="https://www.eclipse.org/hono/img/HONO-Logo_Bild-Wort_quer-s-310x120px.svg" alt="Release Notes logo" class="logo">
<span class="sr-only">Release Notes - go to homepage</span>
</a>
<div class="navbar-buttons">
<button type="button" class="navbar-toggle btn-template-main" data-toggle="collapse" data-target="#navigation">
<span class="sr-only">Toggle Navigation</span>
<i class="fa fa-align-justify"></i>
</button>
</div>
</div>
<div class="navbar-collapse collapse" id="navigation">
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="/hono/getting-started/">Getting started</a>
</li>
<li class="dropdown">
<a href="/hono/docs/">Documentation</a>
</li>
<li class="dropdown">
<a href="/hono/downloads/">Download</a>
</li>
<li class="dropdown">
<a href="/hono/sandbox/">Sandbox</a>
</li>
<li class="dropdown">
<a href="/hono/faq/">FAQ</a>
</li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Community <span class="caret"></span></a>
<ul class="dropdown-menu">
<li><a href="/hono/community/contributing/">Contributing</a></li>
<li><a href="/hono/community/presentations/">Resources</a></li>
<li><a href="/hono/community/get-in-touch/">Get in Touch</a></li>
<li><a href="/hono/community/road-map/">Road Map</a></li>
</ul>
</li>
</ul>
</div>
<div class="collapse clearfix" id="search">
<form class="navbar-form" role="search">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search">
<span class="input-group-btn">
<button type="submit" class="btn btn-template-main"><i class="fa fa-search"></i></button>
</span>
</div>
</form>
</div>
</div>
</div>
</div>
</header>
<div id="heading-breadcrumbs">
<div class="container">
<div class="row">
<div class="col-md-12">
<h1>Release Notes</h1>
</div>
</div>
</div>
</div>
<div id="content">
<div class="container">
<div class="row">
<div class="col-md-12">
<div>
<h2 id="1-2-0-not-released-yet">1.2.0 (Not Released yet)</h2>
<h3 id="new-features">New Features</h3>
<ul>
<li>The protocol adapters can now be configured with a direct connection to a data grid
for storing device connection information.
This has the advantage of saving the network hop to the Device Connection service.
Refer to the protocol adapter Admin Guides for details.</li>
<li>The Prometheus based resource limits check can now be configured with a trust store, key material
and/or a username and password in order to be able to connect to a Prometheus server
that requires TLS and/or client authentication.</li>
</ul>
<h3 id="fixes-enhancements">Fixes &amp; Enhancements</h3>
<ul>
<li>When a message arrived, the <em>message limit</em> checks failed to calculate the payload size
of the incoming message based on the configured <em>minimum message size</em>. Instead, it used the
actual payload size to verify if the <em>message limit</em> has been exceeded or not. This has been
fixed now.</li>
<li>The Command &amp; Control implementation in the protocol adapters has been optimized to use
far fewer consumer links to the AMQP Messaging Network, saving up on resources. Before, for
every command subscription, a consumer link specific to the corresponding device was created,
whereas now, only a single consumer link per protocol adapter instance gets created for the
same purpose.</li>
</ul>
<h3 id="api-changes">API Changes</h3>
<ul>
<li>The device registry credentials endpoint will no longer handout sensitive details for hashed-password secrets.
<code>pwd-hash</code>, <code>salt</code> and <code>hash-function</code> are stored by the device registry but not returned to the user.
Each secret is given an ID which is now returned, along with the other metadata (time validity and optional fields).</li>
<li>The <code>tenant</code> and <code>devices</code> endpoints of the management HTTP API now accept creation requests without a body.
As there is no mandatory field, having a mandatory body was confusing.</li>
<li>The methods of the service base classes <code>CredentialsManagementService</code>, <code>CredentialsService</code>,
<code>DeviceConnectionService</code>, <code>DeviceManagementService</code>, <code>RegistrationService</code>, <code>TenantManagementService</code> and
<code>TenantService</code> have been refactored to now return a Vert.x Future instead of taking a Handler as an argument.</li>
<li>The <code>CommandConsumerFactory</code> interface has been renamed to <code>ProtocolAdapterCommandConsumerFactory</code> and method
signatures have been changed slightly. Also, a new <code>initialize</code> method has been added to be called on protocol
adapter startup.</li>
<li>The AMQP Messaging Network now has to be configured in such a way that protocol adapters can send and
receive messages on the <code>command_internal/*</code> instead of the <code>control/*</code> address pattern.</li>
</ul>
<h2 id="1-1-1">1.1.1</h2>
<h3 id="fixes-enhancements-1">Fixes &amp; Enhancements</h3>
<ul>
<li>The <em>FireFly</em> LoRa adapter now supports mapping of the <em>mic</em> property.</li>
<li>A bug preventing the lora and SigFox adapters to start up correctly has been fixed.</li>
<li>The MQTT adapter failed to accept command response messages from authenticated gateways that had
been published to the <code>command//${device-id}/res/${req-id}/${status}</code> topic. This has been fixed
and the adapter now correctly uses the gateway&rsquo;s tenant in this case.</li>
<li>When a north bound application sent a command to a device that is connected via a gateway, the
AMQP adapter set the gateway&rsquo;s ID instead of the device&rsquo;s ID in the command response forwarded
to the application. This has been fixed.</li>
</ul>
<h2 id="1-1-0">1.1.0</h2>
<h3 id="new-features-1">New Features</h3>
<ul>
<li>The Sigfox and LoRaWAN adapters now report metrics analogously to the other protocol
adapters.</li>
<li>With the release of <a href="https://www.eclipse.org/californium">Eclipse Californium</a> 2.0.0,
the CoAP adapter became an official part of the Hono release. The adapter also supports
tracking of request processing using OpenTracing but is still considered <em>experimental</em>.</li>
<li>A lorawan provider has been added for the <em>loriot</em> network provider.</li>
<li>Hono&rsquo;s protocol adapters now support Server Name Indication in order
to allow devices to establish a TLS connection with adapters using a tenant specific
server certificate and host name. Please refer to the <em>Secure Communication</em> admin
guide for details.</li>
<li>Hono now supports <em>auto-provisioning</em> of devices that authenticate with X.509 client certificates.
For more information please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/provisioning/
">Device Provisioning</a>
concept and for details to the <a href="https://www.eclipse.org/hono/docs/api/tenant/#trusted-ca-format
">Tenant API</a>
and the <a href="https://www.eclipse.org/hono/docs/api/credentials/#get-credentials
">Credentials API</a>.</li>
<li>The Hono Auth Server and Device Registry components now support configuring the SASL
mechanisms advertised to a client connecting to these components. This can be used to
restrict the support to only one of the SASL PLAIN and EXTERNAL mechanisms instead of both.</li>
<li>A new metric namely <em>hono.connections.authenticated.duration</em> has been introduced to track the
connection duration of the authenticated devices. Please refer to the
<a href="https://www.eclipse.org/hono/docs/api/metrics/
">Metrics API</a> for more details.</li>
<li>The protocol adapters that maintain <em>connection state</em> can now be configured to verify the <em>connection
duration limit</em> for each tenant before accepting any new connection request from the devices. Please
refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/#connection-duration-limit
">resource-limits</a>
section for more details.</li>
<li>Hono&rsquo;s example device registry now supports configuring a time out for processing requests from clients.
This is configured using the property <code>sendTimeOutInMs</code> in <code>org.eclipse.hono.config.ServiceConfigProperties</code>.</li>
<li>Hono&rsquo;s Helm chart is now available from the
<a href="https://www.eclipse.org/packages/repository/">Eclipse IoT Packages chart repository</a>.
All future development of the chart will be done in the IoT Packages project only.
The deployment guide has been adapted accordingly.</li>
</ul>
<h3 id="fixes-enhancements-2">Fixes &amp; Enhancements</h3>
<ul>
<li>Hono&rsquo;s Helm chart now supports configuring resource requests and limits of the container images.</li>
<li>The MQTT adapter now includes a device&rsquo;s MQTT client ID in its request to retrieve the device&rsquo;s
credentials. This additional information can be used by device registry implementations when determining
the device identity.</li>
<li>The domain name of the <a href="/hono/sandbox/">Hono Sandbox</a> has been changed to
<code>hono.eclipseprojects.io</code>.
It will still be available at the old domain name for some time as well, though.</li>
<li>Hono&rsquo;s OpenTracing instrumentation has been upgraded to Opentracing 0.33.0.
The example deployment now uses the Jaeger Java client in version 0.35.2 and the
Jaeger 1.16 agent and back end components.</li>
<li>Some of the environment variable names documented in the user guides which can be used for configuring
Hono components had not been recognized during start up of the components.
In particular, the names for configuring the connection to the Device Connection service
and for configuring a heath check server have been fixed.</li>
<li>The AMQP adapter now correctly accepts command response messages from devices that do not
contain any payload. Such responses are useful to only convey a status code in reply to
a command.</li>
</ul>
<h3 id="api-changes-1">API Changes</h3>
<ul>
<li>The already deprecated endpoints with the <code>control</code> prefix have been removed. The northbound and southbound
Command &amp; Control endpoints can now only be used with the <code>command</code> and <code>command_response</code> prefixes
(or the respective shorthand version). Note that the AMQP Messaging Network still needs to be
configured in such a way that protocol adapters can send and receive messages on the <code>control/*</code>
address pattern. This is now used for internal communication between protocol adapters only.</li>
<li>The <code>create</code> method in <code>org.eclipse.hono.client.HonoConnection</code> now requires its Vertx parameter to be not null.</li>
</ul>
<h2 id="1-0-3">1.0.3</h2>
<h3 id="fixes-enhancements-3">Fixes &amp; Enhancements</h3>
<ul>
<li>Hono&rsquo;s Helm Chart now correctly configures Prometheus based resource limit checks if
a Prometheus server is being used for collecting metrics.</li>
<li>Some OpenTracing spans used for tracking processing of messages haven&rsquo;t properly been finished.
This has been fixed.</li>
<li>Protocol adapters are now able to process messages while still trying to re-establish connections
to other services after a connection loss. This might result in fewer messages being rejected
in such situations.</li>
</ul>
<h2 id="1-0-2">1.0.2</h2>
<h3 id="fixes-enhancements-4">Fixes &amp; Enhancements</h3>
<ul>
<li>The example deployment now also works with Kubernetes 1.16 using Helm 2.15 and later.</li>
<li>The Hono chart can now also be deployed using the recently released Helm 3. In fact,
Helm 3 is now the recommended way for deploying Hono as it doesn&rsquo;t require installation
of any Helm specific components to the Kubernetes cluster.</li>
<li>The example data grid which can be deployed using the Hono Helm chart can now be scaled
out to more than one node.</li>
<li>Under rare circumstances an HTTP adapter instance might have gotten into a state where
a device&rsquo;s requests to receive commands could no longer be processed successfully
anymore until the adapter instance had been restarted. This has been fixed.</li>
<li>A potential issue has been identified where some command messages might not get sent to
the corresponding gateway. The scenario here involves the gateway sending event/telemetry
messages via HTTP with a <code>hono-ttd</code> header in order to receive commands, and doing so
with multiple concurrent requests for <em>different</em> devices. To resolve this issue, the
corresponding tenant can be configured with a <code>support-concurrent-gateway-device-command-requests</code>
option set to <code>true</code> in the <code>ext</code> field of an <code>adapters</code> entry of type <code>hono-http</code>.
Note that with this option it is not supported for the authenticated gateway to send
<em>one</em> message with a <code>hono-ttd</code> header and no device id to receive commands for <em>any</em>
device that has last sent a telemetry or event message via this gateway.</li>
</ul>
<h2 id="1-0-1">1.0.1</h2>
<h3 id="fixes-enhancements-5">Fixes &amp; Enhancements</h3>
<ul>
<li>The AMQP protocol adapter now requests devices to send traffic periodically in order
to prevent a time out of the connection. This way the adapter is able to detect and
close stale connections which is important to reliably close the device&rsquo;s corresponding
command consumer. The time period after which the adapter should consider a connection stale
can be configured using an environment variable. Please refer to the AMQP adapter&rsquo;s
admin guide for details.</li>
<li>The example deployment using the Helm chart correctly creates the <code>DEFAULT_TENANT</code> again.</li>
</ul>
<h2 id="1-0-0">1.0.0</h2>
<h3 id="new-features-2">New Features</h3>
<ul>
<li>A tenant can now be configured with a <em>max-ttl</em> which is used as a upper boundary for default
TTL values configured for devices/tenants. Please refer to the <a href="https://www.eclipse.org/hono/docs/api/tenant#resource-limits-configuration-format
">Tenant API</a> for details.
The AMQP, HTTP, MQTT and Kura protocol adapters consider this property when setting a TTL on
downstream event messages.</li>
<li>A protocol adapter can now be configured with a timeout for idle tenants. When there has been no
communication between a protocol adapter instance and the devices of a tenant, the former one releases
allocated resources of the tenant. Currently this means that it closes AMQP links and stops reporting
metrics for this tenant. The timeout is configured with the property <code>tenantIdleTimeout</code> for a protocol
adapter. Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/
">configuration guides</a>
for details.</li>
<li>The accounting period for the <em>message limit</em> checks can now be configured as <code>monthly</code>.
In this case the data usage for a tenant is calculated from the beginning till the end of the
(Gregorian) calendar month. Refer <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/
">resource limits</a>
for more information.</li>
<li>The devices can now indicate a <em>time-to-live</em> duration for event messages published using
the HTTP and MQTT adapters by setting the <em>hono-ttl</em> property in requests explicitly. Please refer to the
<a href="https://www.eclipse.org/hono/docs/user-guide/http-adapter/#publish-an-event-authenticated-device
">HTTP Adapter</a>
and <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/#publishing-events
">MQTT Adapter</a> for details.</li>
<li>The device registry HTTP management API now properly implements <em>cross-origin resource sharing (CORS)</em> support,
by allowing the service to be exposed to configured domains (by default, it&rsquo;s exposed to all domains).</li>
<li>The <code>org.eclipse.hono.util.MessageHelper</code> now provides convenience factory methods for creating
new downstream messages from basic properties.
<code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code> has been adapted to delegate to these
new factory methods.</li>
<li>Hono&rsquo;s protocol adapters can now use multiple trusted certificate authorities per tenant to authenticate
devices based on client certificates. The list of trusted certificate authorities can be managed at the
tenant level using the Device Registry Management API.</li>
<li>Authenticated gateway devices can now subscribe to commands for specific devices. Before, gateways
could only subscribe to commands directed at any of the devices that the gateway has acted on behalf of.
With the new feature of also being able to subscribe to commands for specific devices, northbound
applications will get notified of such a subscription along with the specific device id.</li>
<li>Now a <em>max-ttd</em> value, which is used as an upper boundary for the <em>hono-ttd</em> value specified by the devices,
can be set as an <em>extension</em> property in the adapters section of the tenant configuration.<br /></li>
</ul>
<h3 id="api-changes-2">API Changes</h3>
<ul>
<li>The already deprecated <em>legacy metrics</em> support has been removed.</li>
<li>The already deprecated <em>legacy device registry</em> and the corresponding base classes, which had been deprecated
as well, have been removed.</li>
<li>The topic filters used by MQTT devices to subscribe to commands has been changed slightly
to better fit the addressing scheme used by the other protocol adapters.
The existing topic filters have been deprecated but are still supported.
Please refer to the <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/#command-control
">MQTT adapter user guide</a>
for details.</li>
<li>The interface <code>ResourceLimitChecks</code> and its implementation classes have been moved to
package <code>org.eclipse.hono.service.resourcelimits</code> from <code>org.eclipse.hono.service.plan</code>.
Also the configuration parameters for the resource limits were renamed from <code>hono.plan</code>
to <code>hono.resourceLimits</code>. Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/
">configuration guides</a> for more information.</li>
<li>The response payload of the <em>get Tenant</em> operation of the Tenant API has been changed to contain
a list of trusted certificate authorities instead of just a single one. This way, protocol
adapters can now authenticate devices based on client certificates signed by one of multiple
different trusted root authorities defined for a tenant.
All standard protocol adapters have been adapted to this change.
The <em>Tenant</em> JSON schema object used in the tenant related resources of the Device Registry Management API
has also been adapted to contain a list of trusted authorities instead of a single one.</li>
</ul>
<h3 id="deprecations">Deprecations</h3>
<ul>
<li>The OpenShift specific source-to-image deployment model has been removed in
favor of the Helm charts and the Eclipse IoT Packages project. You can still
deploy Hono on OpenShift using the Helm charts.</li>
<li>Defining password secrets with user provided password hash, function and salt is deprecated in the device registry management
API and will be removed in the upcoming versions. You should use <code>pwd-plain</code> property only going forward.</li>
</ul>
<h2 id="1-0-m7">1.0-M7</h2>
<h3 id="new-features-3">New Features</h3>
<ul>
<li>The Hono Helm chart now supports to choose if the example Device Registry, example AMQP Messaging Network
and/or the example Jaeger back end should be deployed and used with the Hono components or not.
In the latter case, the chart now also supports setting configuration properties for using an already
existing AMQP Messaging Network, Device Registry and/or Jaeger back end.</li>
<li>A data grid based implementation of the Device Connection API has been added to Hono. This implementation
can be used in production environments using a highly scalable data grid for storing device connection
information. The service can be used instead of the simple implementation provided by the example Device
Registry by means of setting a configuration property when <a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/#using-the-device-connection-service
">deploying using the Helm chart</a>.</li>
<li>A tenant can now be configured so that <em>all</em> OpenTracing spans created when processing messages for that
specific tenant will be recorded in the tracing backend (overriding the default sampling strategy that
might only record a certain percentage of traces). See
<a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config/#enforcing-the-recording-of-traces-for-a-tenant
">Monitoring &amp; Tracing</a>
for more details.</li>
</ul>
<h3 id="api-changes-3">API Changes</h3>
<ul>
<li>The obsolete method variants of <code>reportTelemetry</code> in <code>org.eclipse.hono.service.metric.Metrics</code>
have been removed. The new variants of this method accept an additional parameter of type <code>TenantObject</code>.</li>
<li>The already deprecated <code>org.eclipse.hono.service.AbstractProtocolAdapterBase.getRegistrationAssertion</code>
method has been removed. The alternate variant of the <code>getRegistrationAssertion</code> method which accepts an
additional OpenTracing span parameter should be used.</li>
<li>The already deprecated <code>getRegistrationAssertion</code>, <code>getTenantConfiguration</code>, <code>sendConnectedTtdEvent</code>,
<code>sendDisconnectedTtdEvent</code> and <code>sendTtdEvent</code> methods in <code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code>
have been removed. The alternate variant of these methods which accepts an additional OpenTracing span parameter
should be used.<br /></li>
</ul>
<h3 id="deprecations-1">Deprecations</h3>
<ul>
<li>The deprecated Kura adapter is no longer deployed by default by the Helm chart.
However, it can still be deployed by means of <a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/#deploying-optional-adapters
">setting a configuration property</a>.</li>
</ul>
<h2 id="1-0-m6">1.0-M6</h2>
<h3 id="new-features-4">New Features</h3>
<ul>
<li>Implementation of the new HTTP management API for tenants, devices and
credentials.</li>
<li>The health check endpoints of services can now be called securely via TLS.
Please refer to the protocol adapter <a href="https://www.eclipse.org/hono/docs/admin-guide/
">configuration guides</a>
for the new parameters available.</li>
<li>The <a href="https://www.eclipse.org/hono/docs/api/tenant/#resource-limits-configuration-format
">Tenant API</a> now optionally allows
specifying <em>minimum message size</em>. If it is specified, then the payload size of the incoming telemetry, event
and command messages are calculated in accordance with the <em>minimum message size</em> by the AMQP, HTTP and MQTT
protocol adapters and then recorded in the metrics system.
See <a href="https://www.eclipse.org/hono/docs/api/metrics/#minimum-message-size
">Metrics</a> for more details.</li>
</ul>
<h3 id="fixes-enhancements-6">Fixes &amp; Enhancements</h3>
<ul>
<li>The automatic reconnect handling of the <code>HonoConnection</code> implementation has been
improved and now applies an exponential back-off algorithm. The behavior can be
configured using the <code>${PREFIX}_RECONNECT_*</code> configuration variables. Please
refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-client-configuration/
">Hono Client Configuration guide</a>
for details regarding these new variables.</li>
<li>The <em>message limit</em> checks is now extended to include command and control messages.
Please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/
">resource limits</a> for details.</li>
<li>The health check server endpoint will now bind to a default port value of 8088 if no values
are set explicitly in the configuration. It is also possible to start both a secure and an insecure
server (using different ports)
Refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config
">Monitoring configuration guide</a>
for details.</li>
</ul>
<h3 id="api-changes-4">API Changes</h3>
<ul>
<li>With the implementation of the new HTTP management API for the device registry,
the class hierarchy for implementing device registry was significantly
refactored. This also includes the deprecation of a list of classes and tests.
Also see <a href="#device-registry-changes">Device registry changes</a> for more information.</li>
<li>The <em>complete</em> interfaces, and the <em>base</em> and <em>complete</em> implementation
classes for services got deprecated, and are planned to be removed in a future
release. Also see <a href="#device-registry-changes">Device registry changes</a> for
more information.</li>
<li>The example Device Registry that comes with Hono now implements the new
HTTP management API. Consequently, the URI endpoints for managing the content
of the registry have changed accordingly.</li>
<li>The configuration parameters for the health check endpoint were moved from
<code>hono.app</code> to <code>hono.healthCheck</code> and renamed. <code>hono.app.healthCheckPort</code> is now
<code>hono.healthCheck.insecurePort</code> and <code>hono.app.healthCheckBindAddress</code> is now
<code>hono.healthCheck.insecurePortBindAdress</code>. Please refer to the protocol adapter
<a href="https://www.eclipse.org/hono/docs/admin-guide/
">configuration guides</a> for additional
information on the new naming.</li>
</ul>
<h3 id="device-registry-changes">Device registry changes</h3>
<p>The section summarizes changes made for 1.0-M5 in the device registry.</p>
<p>During the development of Hono 1.0, we defined a new HTTP API for managing
information stored in the device registry. This API replaces the current,
provisional API, which was originally intended for tests to manipulate the file
based device registry during system tests. The new HTTP based API is intended
to replace the existing HTTP API, as well as the management part of the AMQP
based API.</p>
<p>The first major change is, that all the <em>complete</em> classes got deprecated. As
they are based on the services for the protocol adapters. And those services
are no longer considered to be used for managing information. The replacement
for those classes are the new management APIs.</p>
<p>Each of the three APIs got a companion API for <em>management</em>, which are located
in the <code>org.eclipse.hono.service.management</code> base package.</p>
<p>The class hierarchy was decoupled in order to make it easier to implement those
services. The new design only requires to implement a service, which is not
based on any other interface. And while your concrete implement still can
implement the <code>Verticle</code> interface, this is no longer a requirement.</p>
<p>Also the <em>base</em> classes got deprecated. Instead of inheriting the common
functionality, to bind to the <em>event bus</em>, that functionality got moved into new
<em>event bus adapter</em> classes, which take the reference of a service, and bind
this service to the <em>event bus</em> instead of using inheritance. Those change
make it possible to re-use much of the functionality, but do not impose the
requirement to inherit from either the <em>complete</em> or <em>base</em> classes. And
this finally allows your service implementation to be extend your specific
base class, and re-use common Hono functionality at the same time. This allows
service implementations to implement both the standard API, as well as the
management API in the same class. As Java does not allow inheritance
from multiple classes, this was not possible before.</p>
<p>The new default file based device registry, was modified to use the new class
hierarchy and support the new management model.</p>
<p>The device registry, which was provided in 1.0-M4 and before, is still part of
the source tree, but was moved to <code>services/device-registry-legacy</code>. It is
there to show the compatibility with the older class hierarchy, using the,
now deprecated, <em>base</em> and <em>complete</em> classes. Newer implementations should not
be build on this model.</p>
<p>Clients of the <em>base</em> variants of the services, like the protocol adapters,
do not need to make any changes.</p>
<p>Implementations of the device registry services, using the existing <em>base</em> and
<em>complete</em> can re-use that model, but are encouraged to migrate to the new model
as soon as possible, as the legacy model is planned to be removed. The only
impacting change is that the service interfaces no longer extend from
<code>Verticle</code> directly, but that has been moved to the <em>base</em> implementation.</p>
<p>Implementations of the services for protocol adapters (the non-management API),
can switch to the new class hierarchy by dropping inheritance to the <em>base</em>
class, and starting up a new instance of the corresponding <em>event bus adapter</em>,
providing a reference to the service. For the <code>RegistrationService</code> it is also
possible to inherit common functionality from <code>AbstractRegistrationService</code>.</p>
<p>Implementations of the services for management need to simply inherit from the
new management interfaces, and set up the <em>event bus adapters</em> the same way.</p>
<p>The module <code>device-registry-legacy</code> as well as all classes and interfaces,
which got deprecated, are planned to be dropped in 1.1.</p>
<h2 id="1-0-m5">1.0-M5</h2>
<h3 id="new-features-5">New Features</h3>
<ul>
<li>Hono&rsquo;s protocol adapters and the other components now support using ECC based server certificates.
The protocol adapters also support authenticating devices which present an ECC based client certificate.
The example configuration now uses ECC based certificates by default.</li>
<li>Hono now specifies a <a href="https://www.eclipse.org/hono/docs/api/device-connection/
">Device Connection API</a> and
contains an exemplary implementation of this API included in the device registry component. The purpose of the API is
to be able to set and retrieve information about the connections from devices or gateways to the protocol adapters.</li>
<li>This version implements the new HTTP management API for tenants, devices, and credentials.</li>
</ul>
<h3 id="fixes-enhancements-7">Fixes &amp; Enhancements</h3>
<ul>
<li>The Hono Sandbox&rsquo;s protocol adapters support using the gateway mode again.</li>
<li>The <a href="/hono/getting-started/">Getting Started</a> guide has been rewritten
to use the <a href="/hono/sandbox/">Hono Sandbox</a> or a local Minikube cluster
instead of Docker Swarm.</li>
<li>The MQTT adapter now closes the network connection to device on publish failures.</li>
</ul>
<h3 id="api-changes-5">API Changes</h3>
<ul>
<li>The optional methods of the <a href="https://www.eclipse.org/hono/docs/api/tenant/
">Tenant API</a> have been
removed. Implementations of the Tenant API are encouraged to expose the <em>tenants</em> endpoint defined by
<a href="https://www.eclipse.org/hono/docs/api/management
">Hono&rsquo;s HTTP based management API</a> instead.
Several of the formerly mandatory to include properties of the request and response messages have
been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li>
<li>The optional methods of the
<a href="https://www.eclipse.org/hono/docs/api/device-registration/
">Device Registration API</a> have been
removed. Implementations of the Device Registration API are encouraged to expose the <em>devices</em> endpoint defined by
<a href="https://www.eclipse.org/hono/docs/api/management
">Hono&rsquo;s HTTP based management API</a> instead.
Several of the formerly mandatory to include properties of the request and response messages have
been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li>
<li>The response message format of the <em>assert Device Registration</em> operation of the Device Registration API
has been changed, replacing the optional <code>gw-supported</code> boolean field with an optional <code>via</code> field.
The value of this field contains the list of gateway that may act on behalf of the device on which
the operation is invoked.</li>
<li>The methods for invoking the optional operations of the Device Registration API have been removed
from <code>org.eclipse.hono.client.RegistrationClient</code> and <code>org.eclipse.hono.client.impl.RegistrationClientImpl</code>.</li>
<li>The optional methods of the <a href="https://www.eclipse.org/hono/docs/api/credentials/
">Credentials API</a>
have been removed. Implementations of the Credentials API are encouraged to expose the <em>credentials</em> endpoint defined
by <a href="https://www.eclipse.org/hono/docs/api/management
">Hono&rsquo;s HTTP based management API</a> instead.
Several of the formerly mandatory to include properties of the request and response messages have
been made optional or removed altogether. Existing clients should not be affected by these changes, though.</li>
<li>The <code>control</code> prefix in the northbound and southbound Command &amp; Control endpoints has been renamed to <code>command</code>.
The endpoint names with the <code>control</code> prefix are still supported but deprecated. The northbound endpoint for
<em>business applications</em> to receive command responses has the <code>command_response</code> prefix now. The old <code>control</code> prefix
for the receiver address is also still supported but deprecated.</li>
<li>The <code>deviceId</code> parameter of the <code>getOrCreateCommandClient</code> and <code>getOrCreateAsyncCommandClient</code> methods of the
<code>org.eclipse.hono.client.ApplicationClientFactory</code> interface has been removed.
This means that a <code>CommandClient</code> or <code>AsyncCommandClient</code> instance can be used to send commands to arbitrary
devices of a tenant now. Accordingly, the <code>CommandClient.sendCommand</code> and <code>AsyncCommandClient.sendAsyncCommand</code>
methods now require an additional <code>deviceId</code> parameter.</li>
<li>The deprecated methods of <code>org.eclipse.hono.client.HonoConnection</code> have been removed.</li>
</ul>
<h2 id="1-0-m4">1.0-M4</h2>
<h3 id="new-features-6">New Features</h3>
<ul>
<li>Default properties can now also be set at the tenant level, affecting all devices
belonging to the tenant. Please refer to the
<a href="https://www.eclipse.org/hono/docs/user-guide/
">protocol adapter user guides</a> for details.</li>
<li><code>CredentialsClientImpl</code> now supports caching of response data received from a Credentials service based on
<em>cache directives</em>. The protocol adapters are now equipped to cache the response from the Credentials Service.
The protocol adapters support configuration variables to set the default cache timeout, the minimum
and maximum cache sizes for this service.</li>
<li>The example device registry&rsquo;s Credentials service implementation now includes a <em>cache directive</em>
in its response to the <em>get Credentials</em> operation which allows clients to cache credentials of
type <em>hashed-password</em> and <em>x509-cert</em> for a configurable amount of time. Please refer to the
<a href="https://www.eclipse.org/hono/docs/admin-guide/device-registry-config/
">Device Registry Admin Guide</a>
for details regarding the configuration properties to use.</li>
<li>There is now an official specification of an HTTP API for managing the content of a device registry.
The <a href="https://www.eclipse.org/hono/docs/api/management
">HTTP Management API</a> is defined using by
means of OpenAPI v3. Note, that the API is not yet implemented by the example device registry that comes with Hono.</li>
<li>The Command &amp; Control feature now supports gateway agnostic addressing of devices. This means that applications are
able to send commands to devices without knowing the particular gateway they may be connected to.</li>
<li>The concept and implementation of <em>message limit</em> have been added. The protocol adapters can be now
enabled to verify this <em>message limit</em> for each tenant before accepting any telemetry/event messages.
Please refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/
">resource limits</a> for details.</li>
<li>A basic Sigfox protocol adapter, for use with the Sigfox backend. Please read
the <a href="https://www.eclipse.org/hono/docs/user-guide/sigfox-adapter/
">Sigfox protocol adapter</a>
documentation to learn more about pre-requisites and limitations.</li>
</ul>
<h3 id="fixes-enhancements-8">Fixes &amp; Enhancements</h3>
<ul>
<li>vert.x has been updated to version 3.7.0.</li>
</ul>
<h3 id="api-changes-6">API Changes</h3>
<ul>
<li>The <code>org.eclipse.hono.util.RegistrationConstants.FIELD_DEFAULTS</code> constant
has been renamed to <code>org.eclipse.hono.util.RegistrationConstants.FIELD_PAYLOAD_DEFAULTS</code>.</li>
<li>The <code>org.eclipse.hono.service.AbstractProtocolAdapterBase.newMessage</code> and
<code>org.eclipse.hono.service.AbstractProtocolAdapterBase.addProperties</code> methods have
been changed to accept an additional parameter of type <code>TenantObject</code> which may contain default
properties defined for the tenant to be included in downstream messages.</li>
<li>The <em>get Registration Information</em> operation of the Device Registration API is not optional anymore,
it is now mandatory to implement. For device registry implementations based on the
<code>CompleteRegistrationService</code> interface, there is no change needed as the operation is already
defined there.</li>
<li>The response message of the <em>assert Device Registration</em> operation does not contain an assertion
token anymore. The <code>org.eclipse.hono.service.registration.BaseRegistrationService</code> class
has been adapted accordingly.</li>
<li>The already deprecated <code>org.eclipse.hono.client.CommandConsumerFactory.closeCommandConsumer</code>
method has been removed.</li>
<li>The response message format of the <em>assert Device Registration</em> operation of the Device Registration API
has been changed to include an optional <code>gw-supported</code> boolean field. The value of this field refers to
whether the device on which the operation is invoked allows one or more gateways to act on its behalf.</li>
<li>The AMQP sender link address to be used by <em>business applications</em> to send commands to devices has been
changed from <code>control/${tenant_id}/${device_id}</code> to <code>control/${tenant_id}</code> with command messages requiring
the <code>to</code> property to be set to <code>control/${tenant_id}/${device_id}</code>. Using <code>control/${tenant_id}/${device_id}</code>
as sender link address is still possible but gateway agnostic addressing of devices is not supported for
such command messages.</li>
</ul>
<h3 id="deprecations-2">Deprecations</h3>
<ul>
<li>Instructions for script based deployment to Kubernetes have been removed from the deployment guide.
Using Helm is now the only supported way of deploying Hono to Kubernetes.</li>
</ul>
<h2 id="1-0-m3">1.0-M3</h2>
<h3 id="fixes-enhancements-9">Fixes &amp; Enhancements</h3>
<ul>
<li>The protocol adapters add tracing information about invocations of the Device Registry
services again.</li>
<li>The example deployment now uses Qpid Dispatch Router 1.6.0.</li>
</ul>
<h2 id="1-0-m2">1.0-M2</h2>
<h3 id="new-features-7">New Features</h3>
<ul>
<li>A new <em>experimental</em> LoRa protocol adapter has been added which (so far) supports the reception
of telemetry data and events from devices connected to LoRa network providers and/or
LoRa gateways. Note that this adapter is <em>not</em> considered production ready yet.
Any help in improving and enhancing the adapter is more than welcome.</li>
<li>The concept and implementation of <em>resource limits</em> have been added. Now a connection limit to define
the maximum number of device connections to be allowed per tenant can be configured. The MQTT and AMQP
adapters can be enabled to verify this connection limit before accepting any new connections. Please
refer to the <a href="https://www.eclipse.org/hono/docs/concepts/resource-limits/
">resource limits</a> for details.</li>
</ul>
<h3 id="fixes-enhancements-10">Fixes &amp; Enhancements</h3>
<ul>
<li>The base classes for implementing the AMQP and HTTP endpoints for the Credentials, Tenant
and Device Registration APIs now create an OpenTracing Span for tracking the
processing of requests at a high level.</li>
<li>The <code>hono-client</code> and <code>hono-core</code> artifacts use Java 8 level again so that they
can be used in applications using Java 8.</li>
<li>The protocol adapters now always specify values for the <em>ttd</em> and <em>qos</em> tags when
reporting telemetry messages using meter name <em>hono.messages.received</em>. This fixes
an issue when using the Prometheus back end where the HTTP adapter failed to report
messages that contained a TTD value and others that didn&rsquo;t.</li>
<li>The Helm based deployment of the device registry has been fixed by adding the secret
and deployment entries for the <code>device-identities.json</code>.</li>
<li>Before uploading command responses, the MQTT and AMQP adapters now check whether the device is
registered and also the adapter is enabled for the tenant.</li>
</ul>
<h3 id="api-changes-7">API Changes</h3>
<ul>
<li>The <code>hono-client</code> module has undergone several major and incompatible changes. The most
important change affects the <code>HonoClient</code> interface which no longer serves as a factory
for the arbitrary clients to the Hono service endpoints.
It has been renamed to <code>HonoConnection</code> and now only represents the underlying
AMQP connection to a peer and provides methods for managing the connection state
and registering listeners for arbitrary life-cycle events of the connection.
In addition to this, several factory interfaces have been added which can be used
to create specific clients to Hono&rsquo;s arbitrary services. All of the former <code>HonoClient</code>
interface&rsquo;s factory methods have been distributed accordingly to:
<ul>
<li><code>org.eclipse.hono.client.ApplicationClientFactory</code> for creating clients to
Hono&rsquo;s north bound Telemetry, Event and Command &amp; Control API.</li>
<li><code>org.eclipse.hono.client.DownstreamSenderFactory</code> for creating clients to
Hono&rsquo;s south bound Telemetry and Event APIs.</li>
<li><code>org.eclipse.hono.client.CommandConsumerFactory</code> for creating clients to
Hono&rsquo;s south bound Command &amp; Control API.</li>
<li><code>org.eclipse.hono.client.TenantClientFactory</code> for creating clients to
Hono&rsquo;s Tenant API.</li>
<li><code>org.eclipse.hono.client.RegistrationClientFactory</code> for creating clients to
Hono&rsquo;s Device Registration API.</li>
<li><code>org.eclipse.hono.client.CredentialsClientFactory</code> for creating clients to
Hono&rsquo;s Credentials API.</li>
</ul></li>
<li>In this context the <code>org.eclipse.hono.client.MessageSender</code> interface has been changed as follows:
<ul>
<li>The <em>send</em> methods have been changed to no longer accept a <em>registration assertion token</em>
which became obsolete with the removal of the <em>Hono Messaging</em> component.</li>
<li>The <em>isRegistrationAssertionRequired</em> method has been removed from the interface.</li>
<li>All <em>send</em> method variants which accept specific message parameters have been moved into
the new <code>org.eclipse.hono.client.DownstreamSender</code> interface which extends the existing
<code>MessageSender</code>.</li>
</ul></li>
<li>Several changes have been made to the <code>org.eclipse.hono.service.AbstractProtocolAdapterBase</code>
class:
<ul>
<li>The <em>newMessage</em> and <em>addProperties</em> methods no longer require a boolean parameter indicating
whether to include the assertion token in the message being created/amended.
Custom protocol adapters should simply omit the corresponding parameter.</li>
<li>The base class now uses <code>org.eclipse.hono.client.CommandConsumerFactory</code> instead of
<code>org.eclipse.hono.client.CommandConnection</code> for creating
<code>org.eclipse.hono.client.CommandConsumer</code> instances.
The <em>setCommandConnection</em> and <em>getCommandConnection</em> methods have been
renamed to <em>setCommandConsumerFactory</em> and <em>getCommandConsumerFactory</em>
correspondingly.</li>
<li>The base class now uses <code>org.eclipse.hono.client.TenantClientFactory</code> instead of
<code>org.eclipse.hono.client.HonoClient</code> for creating <code>org.eclipse.hono.client.TenantClient</code>
instances.
The <em>setTenantServiceClient</em> and <em>getTenantServiceClient</em> methods have been
renamed to <em>setTenantClientFactory</em> and <em>getTenantClientFactory</em> correspondingly.</li>
<li>The base class now uses <code>org.eclipse.hono.client.RegistrationClientFactory</code> instead of
<code>org.eclipse.hono.client.HonoClient</code> for creating
<code>org.eclipse.hono.client.RegistrationClient</code> instances.
The <em>setRegistrationServiceClient</em> and <em>getRegistrationServiceClient</em> methods have been
renamed to <em>setRegistrationClientFactory</em> and <em>getRegistrationClientFactory</em> correspondingly.</li>
<li>The base class now uses <code>org.eclipse.hono.client.CredentialsClientFactory</code> instead of
<code>org.eclipse.hono.client.HonoClient</code> for creating
<code>org.eclipse.hono.client.CredentialsClient</code> instances.
The <em>setCredentialsServiceClient</em> and <em>getCredentialsServiceClient</em> methods have been
renamed to <em>setCredentialsClientFactory</em> and <em>getCredentialsClientFactory</em> correspondingly.</li>
<li>The base class now uses <code>org.eclipse.hono.client.DownstreamSendertFactory</code> instead of
<code>org.eclipse.hono.client.HonoClient</code> for creating
<code>org.eclipse.hono.client.DownstreamSender</code> instances.
The <em>setHonoMessagingClient</em> and <em>getHonoMessagingClient</em> methods have been
renamed to <em>setDownstreamSenderFactory</em> and <em>getDownstreamSenderFactory</em> correspondingly.</li>
</ul></li>
<li>The <code>org.eclipse.hono.service.auth.device.UsernamePasswordAuthProvider</code> and the
<code>org.eclipse.hono.service.auth.device.X509AuthProvider</code> now accept a
<code>org.eclipse.hono.client.CredentialsClientFactory</code> instead of a
<code>org.eclipse.hono.client.HonoClient</code> in their constructors.</li>
<li>The <code>org.eclipse.hono.adapter.http.HonoBasicAuthHandler</code> and
<code>org.eclipse.hono.adapter.http.X509AuthHandler</code> classes have been moved to
package <code>org.eclipse.hono.service.http</code> in the <em>service-base</em> module for
consistency reasons as all other reusable classes for implementing HTTP services/
adapters are located in that package already.</li>
<li>The <code>org.eclipse.hono.client.HonoClient</code> class has been renamed to
<code>org.eclipse.hono.client.HonoConnection</code> to better reflect its sole responsibility
for establishing (and maintaining) the connection to a Hono service endpoint.</li>
</ul>
<h3 id="deprecations-3">Deprecations</h3>
<ul>
<li>The optional operations defined by the Tenant, Device Registration and Credentials API
have been deprecated. They will be removed from Hono 1.0 altogether.
A new HTTP based API will be defined instead which can then be used to <em>manage</em> the content
of a device registry.</li>
<li><code>org.eclipse.hono.client.HonoConnection</code>&rsquo;s <em>connect</em> method variants accepting
a disconnect handler have been deprecated and will be removed in Hono 1.0.
Client code should use one of the other <em>connect</em> methods instead and register a
<code>org.eclipse.hono.client.DisconnectListener</code> and/or a
<code>org.eclipse.hono.client.ReconnectListener</code> to get notified about life-cycle
events of the underlying AMQP connection.</li>
</ul>
<h2 id="1-0-m1">1.0-M1</h2>
<h3 id="new-features-8">New Features</h3>
<ul>
<li>The AMQP adapter now supports limiting the number of concurrent connections in order
to prevent Out of Memory errors. Please refer to
<a href="https://www.eclipse.org/hono/docs/admin-guide/amqp-adapter-config/
">AMQP Adapter Configuration</a> for details.</li>
<li>The <code>org.eclipse.hono.client.AsyncCommandClient</code> has been added to support the sending of
commands to devices and the receiving of responses in an asynchronous way. This can be used
to decouple the sender and receiver from each other.</li>
<li>The <code>org.eclipse.hono.service.tenant.CompleteBaseTenantService</code> class now rejects malformed
encodings of public keys/certificates included in a request to add a trust anchor to a tenant.</li>
</ul>
<h3 id="deprecations-4">Deprecations</h3>
<ul>
<li>The <code>HonoClient.closeCommandConsumer()</code> method will be removed in Hono 1.0.
The <code>CommandConsumer.close()</code> method should be used instead.</li>
</ul>
<h2 id="0-9">0.9</h2>
<h3 id="new-features-9">New Features</h3>
<ul>
<li>The MQTT adapter now supports commands to be published using QoS 1. Please refer to
<a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/
">MQTT adapter User Guide</a> for details.</li>
<li>The MQTT adapter now supports limiting the number of concurrent connections in order
to prevent running out of resources. Please refer to
<a href="https://www.eclipse.org/hono/docs/admin-guide/mqtt-adapter-config/
">MQTT Adapter Configuration</a> for details.</li>
<li>The new <em>Helm deployment</em> for Kubernetes has been added. Please refer to
<a href="https://www.eclipse.org/hono/docs/deployment/helm-based-deployment/
">Helm based deployment guide</a> for details.</li>
</ul>
<h3 id="fixes-enhancements-11">Fixes &amp; Enhancements</h3>
<ul>
<li><code>org.eclipse.hono.util.RequestResponseResult</code> now provides access to AMQP application-properties conveyed in the
response message.</li>
<li>The <code>org.eclipse.hono.service.registration.BaseRegistrationService</code> class now supports authorization of gateways
(acting on behalf of a device) against a list of gateway identifiers instead of a single identifier only. For that purpose
the <code>via</code> property of the device&rsquo;s registration information may contain either a single string or a JSON array containing
multiple strings. Based on this, a device can now be configured to connect via arbitrary gateways instead of just a single
one.</li>
</ul>
<h3 id="api-changes-8">API Changes</h3>
<ul>
<li>The layout and structure of the metrics reported by Hono have been changed substantially. Many of the existing meters and tags
have been changed or replaced in order to provide a more consistent set of metrics and increase the value of the information
being reported. The legacy metrics still remain unchanged, though.
Please refer to the <a href="https://www.eclipse.org/hono/docs/api/metrics/
">Metrics definition</a> for details.</li>
<li>In case of a failed connection attempt, <code>HonoClientImpl</code> will now determine based on the error whether it will re-try
to connect to the peer. Before, reconnect attempts were done unconditionally, by default infinitely or up to the
number of times defined in the <em>reconnectAttempts</em> property in the <code>ClientConfigProperties</code>. Now, when the outcome
of the SASL handshake received from the peer during connection establishment indicates that invalid credentials were
provided or that the server encountered a permanent error when handling the request, no further reconnect attempts
will be done.</li>
<li>The deprecated methods have been removed from <code>org.eclipse.hono.client.MessageSender</code> and
its implementations.</li>
<li>The Command &amp; Control API&rsquo;s <em>send a request/response command</em> operation has been changed. The response
message to a command now must include the device and tenant identifiers of the device. Including
these two properties should make it much easier to implement competing command response consumers
in business applications.
As a consequence, the <code>org.eclipse.hono.client.CommandResponse</code>&rsquo;s factory methods have been changed to
accept the tenant and device IDs as parameters.</li>
<li>The <em>connectTimeout</em> configuration variable for the <code>HonoClient</code> now defines the time to wait not only for the TCP/TLS
connection establishment but also for the SASL handshake and the exchange of the AMQP <em>open</em> frame.</li>
<li>The (already deprecated) Hono Messaging component has been removed from Hono.</li>
</ul>
<h3 id="deprecations-5">Deprecations</h3>
<ul>
<li>The script based deployment to Kubernetes has been deprecated and will be removed in the next version.
The Helm based deployment should be used instead.</li>
<li>The <em>sendCommandResponse(String, String, Buffer, Map, int, SpanContext)</em> of the
<code>org.eclipse.hono.client.CommandResponseSender</code> interface has been deprecated and
will be removed in the next version. Custom protocol adapters should use
<em>sendCommandResponse(CommandResponse, SpanContext)</em> instead.</li>
</ul>
<h2 id="0-9-m2">0.9-M2</h2>
<h3 id="new-features-10">New Features</h3>
<ul>
<li>The MQTT protocol adapter now supports authentication of devices using X.509 client certificates. Please refer to
the <a href="https://www.eclipse.org/hono/docs/user-guide/mqtt-adapter/
">MQTT adapter user guide</a> for details regarding configuration.</li>
</ul>
<h3 id="fixes-enhancements-12">Fixes &amp; Enhancements</h3>
<ul>
<li>The OpenShift <em>source-to-image</em> (S2I) deployment is now the default
OpenShift / OKD deployment. The plain OpenShift deployment, which had been deprecated
in Hono 0.8, has been removed.</li>
<li>The protocol adapters can now be configured with a custom <em>DNS timeout</em> value, limiting the time that the adapter
will wait for the response to a DNS query. By default, a DNS query will time out after 5 seconds.
Please refer to the protocol adapter admin guides for details regarding the new configuration variable.</li>
<li><p>The following configuration variables have been added to <code>HonoClient</code>:</p>
<ul>
<li><em>connectTimeout</em>: Sets a limit on the time that the client will wait for a TCP/TLS connection with the peer
to be established. By default, a connection attempt will time out after 5 seconds.</li>
<li><em>idleTimeout</em>: The idle timeout defines the amount of time after which a connection will be closed when no frames
have been received from the remote peer. The default value is 16 seconds.</li>
<li><em>sendMessageTimeout</em>: Limits the time to wait for a downstream consumer&rsquo;s acknowledgement of
an event or command response message received from a device. The default value is 1 second.</li>
</ul>
<p>Please refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/hono-client-configuration/
">Hono Client Configuration guide</a>
for details regarding the new configuration variables.</p></li>
</ul>
<h3 id="api-changes-9">API Changes</h3>
<ul>
<li>Some of the <em>tags</em> used by Hono&rsquo;s components when reporting metrics have been changed. The common tag <em>component</em>
has been renamed to <em>component-type</em>. The <em>protocol</em> tag formerly used by adapters to indicate the transport protocol
that a message has been received over, has been replaced by the generic <em>component-name</em> tag which indicates the name
of the component that a metric has been reported by. Please refer to the <a href="https://www.eclipse.org/hono/docs/api/metrics/
">Metrics API</a>
for details. Note that these changes do not affect the legacy Graphite based metrics back end.</li>
</ul>
<h3 id="deprecations-6">Deprecations</h3>
<ul>
<li>The Hono Messaging component is now deprecated and will be removed from Hono in version 0.9 altogether.
The example deployment has not been using Hono Messaging since 0.6 and there is no practical reason for
using it anymore.</li>
</ul>
<h2 id="0-9-m1">0.9-M1</h2>
<h3 id="new-features-11">New Features</h3>
<ul>
<li>The default Micrometer back end is now Prometheus, the Grafana dash boards have been updated
to retrieve data from Prometheus instead of the old InfluxDB.
The Graphite based legacy metrics format can still be used but requires building Hono from source and activating
the <code>metrics-graphite</code> Maven build profile.
Please refer to the <a href="https://www.eclipse.org/hono/docs/admin-guide/monitoring-tracing-config/
">Monitoring admin guide</a> for details.</li>
<li>The <code>org.eclipse.hono.service.credentials.CompleteBaseCredentialsService</code> class now supports the transparent
<em>on-the-fly</em> hashing of clear text passwords contained in <em>hashed-password</em> credentials. Please refer to the
<a href="https://www.eclipse.org/hono/docs/user-guide/device-registry/#managing-credentials
">Device Registry user guide</a> for details.</li>
</ul>
<h3 id="fixes-enhancements-13">Fixes &amp; Enhancements</h3>
<ul>
<li>The base classes for implementing the Device Registration and Tenant APIs have been instrumented
with OpenTracing. New variants of the <code>RegistrationService.assertRegistration</code>, <code>TenantService.get</code> and <code>CredentialsService.get</code>
methods have been added which also accept an OpenTracing span as a parameter.
The default implementations of these methods still default to the previously existing methods.
In <code>RegistrationService</code> implementations based on <code>BaseRegistrationService</code> an OpenTracing span will be created,
passed on to the <code>assertRegistration</code> method and finished eventually. The same applies to <code>TenantService</code> implementations
based on <code>BaseTenantService</code> concerning the <code>get</code> method and to <code>CredentialsService</code> implementations based on
<code>BaseCredentialsService</code> concerning the <code>get</code> method.</li>
</ul>
<h3 id="api-changes-10">API Changes</h3>
<ul>
<li>The <code>org.eclipse.hono.service.credentials.CompleteBaseCredentialsService</code> class now requires an
<code>org.eclipse.hono.auth.HonoPasswordEncoder</code> to be passed into its constructor.
The <code>org.eclipse.hono.auth.SpringBasedHonoPasswordEncoder</code> has been added as a default implementation for
this purpose.</li>
<li>The <a href="https://www.eclipse.org/hono/docs/api/tenant/#trusted-ca-format
">Tenant API</a> now optionally allows specifying an
X.509 certificate instead of a public key when defining a trusted CA.</li>
</ul>
</div>
</div>
</div>
</div>
</div>
<footer id="footer">
<div class="container">
<div class="col-md-4 col-sm-6">
<h4>More</h4>
<ul>
<li><a href="https://github.com/eclipse/hono" title="View Source Code on GitHub"><i class='fab fa-github'></i> GitHub Repository</a></li>
<li><a href="https://twitter.com/EclipseHono" title="Follow us on Twitter"><i class='fab fa-twitter'></i> Twitter</a></li>
<li><a href="https://gitter.im/eclipse/hono" title="Chat with us on Gitter"><i class='fab fa-gitter'></i> Chat with us</a></li>
<li><a href="/hono/thankyou/">Thank you</a></li>
</ul>
<hr class="hidden-md hidden-lg hidden-sm">
</div>
<div class="col-md-4 col-sm-6">
<h4>Eclipse Legal</h4>
<ul>
<li><a href="http://www.eclipse.org/legal/privacy.php" target="_blank">Privacy Policy</a></li>
<li><a href="http://www.eclipse.org/legal/termsofuse.php" target="_blank">Terms of Use</a></li>
<li><a href="http://www.eclipse.org/legal/copyright.php" target="_blank">Copyright Agent</a></li>
<li><a href="http://www.eclipse.org/legal/" target="_blank">Legal</a></li>
<li><a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank">License</a></li>
<li><a href="https://eclipse.org/security/" target="_blank">Report a Vulnerability</a></li>
</ul>
<hr class="hidden-md hidden-lg">
</div>
<div class="col-md-4 col-sm-6">
<div class="eclipse-logos">
<div class="pull-left">
<a href="https://www.eclipse.org" target="_blank">
<img src="https://www.eclipse.org/hono/img/eclipse_foundation_logo_wo.svg" id="logo-eclipse-foundation"/>
</a>
</div>
<div class="pull-right">
<a href="https://iot.eclipse.org" target="_blank">
<img src="https://www.eclipse.org/hono/img/iot-logo.png"/>
</a>
</div>
</div>
</div>
</div>
</footer>
<div id="copyright">
<div class="container">
<div class="col-md-12">
<p class="pull-left">&copy; 2019 The Eclipse Hono Project</p>
<p class="pull-right">
Template by <a href="http://bootstrapious.com/free-templates">Bootstrapious</a>.
Ported to Hugo by <a href="https://github.com/devcows/hugo-universal-theme">DevCows</a>
</p>
</div>
</div>
</div>
</div>
<script src="//code.jquery.com/jquery-3.1.1.min.js" integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" crossorigin="anonymous"></script>
<script src="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" crossorigin="anonymous"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-cookie/1.4.1/jquery.cookie.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/waypoints/4.0.1/jquery.waypoints.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/Counter-Up/1.0/jquery.counterup.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-parallax/1.1.3/jquery-parallax.js"></script>
<script src="https://www.eclipse.org/hono/js/front.js"></script>
<script src="https://www.eclipse.org/hono/js/owl.carousel.min.js"></script>
<script>
(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start':
new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0],
j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src=
'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f);
})(window,document,'script','dataLayer','GTM-5WLCZXC');
</script>
<script src="https://www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script>
<script src="//iot.eclipse.org/assets/js/eclipsefdn.adopters.js"></script>
<script>
eclipseFdnAdopters.getList({
project_id: "iot.hono",
selector: ".eclipsefdn-adopters",
ul_classes: "owl-carousel customers",
logo_white: true
});
</script>
</body>
</html>