| <!DOCTYPE html> |
| <html> |
| <head> |
| <meta charset="utf-8"> |
| <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| <meta name="viewport" content="width=device-width, initial-scale=1"> |
| <meta name="description" content="Version 2.0.0 of Eclipse Ditto, released on 06.05.2021"> |
| <meta name="keywords" content="release_notes, release notes, announcements, changelog"> |
| <title> Release notes 2.0.0 • Eclipse Ditto™ • a digital twin framework</title> |
| |
| <link rel="stylesheet" href="css/syntax.css"> |
| <link rel="stylesheet" type="text/css" href="//cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css" crossorigin="anonymous"> |
| <link rel="stylesheet" href="css/modern-business.css"> |
| <link rel="stylesheet" href="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css" crossorigin="anonymous"> |
| <link rel="stylesheet" href="css/customstyles.css"> |
| <link rel="stylesheet" href="css/boxshadowproperties.css"> |
| <link rel="stylesheet" href="css/theme-ditto.css"> |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Open+Sans:400,700|Source+Code+Pro:300,600|Titillium+Web:400,600,700"> |
| |
| <script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.4/jquery.min.js" crossorigin="anonymous"></script> |
| <script src="//cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js" crossorigin="anonymous"></script> |
| <script src="//cdnjs.cloudflare.com/ajax/libs/anchor-js/2.0.0/anchor.min.js" crossorigin="anonymous"></script> |
| <script src="js/toc.js"></script> |
| <script src="js/customscripts.js"></script> |
| |
| <script type="application/ld+json"> |
| { |
| "@context": "http://schema.org", |
| "@type": "Organization", |
| "url": "https://eclipse.org/ditto/", |
| "logo": "https://eclipse.org/ditto/images/ditto.svg" |
| } |
| </script> |
| |
| <link rel="icon" type="image/png" href="images/favicon-16x16.png" sizes="16x16"> |
| <link rel="icon" type="image/png" href="images/favicon-32x32.png" sizes="32x32"> |
| <link rel="icon" type="image/png" href="images/favicon-96x96.png" sizes="96x96"> |
| |
| <link rel="alternate" type="application/rss+xml" title="Eclipse Ditto Blog" href="https://www.eclipse.org/ditto/feed.xml"> |
| |
| <!-- Eclipse Foundation cookie consent: --> |
| <link rel="stylesheet" type="text/css" href="//www.eclipse.org/eclipse.org-common/themes/solstice/public/stylesheets/vendor/cookieconsent/cookieconsent.min.css" /> |
| <script src="//www.eclipse.org/eclipse.org-common/themes/solstice/public/javascript/vendor/cookieconsent/default.min.js"></script> |
| |
| <script> |
| $(document).ready(function() { |
| $("#tg-sb-link").click(function() { |
| $("#tg-sb-sidebar").toggle(); |
| $("#tg-sb-content").toggleClass('col-md-9'); |
| $("#tg-sb-content").toggleClass('col-md-12'); |
| $("#tg-sb-icon").toggleClass('fa-toggle-on'); |
| $("#tg-sb-icon").toggleClass('fa-toggle-off'); |
| }); |
| }); |
| </script> |
| </head> |
| |
| |
| <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> |
| |
| |
| |
| <body> |
| <!-- Navigation --> |
| <nav class="navbar navbar-inverse navbar-fixed-top"> |
| <div class="container topnavlinks"> |
| <div class="navbar-header"> |
| <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1"> |
| <span class="sr-only">Toggle navigation</span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| <span class="icon-bar"></span> |
| </button> |
| <a class="navbar-ditto-home" href="index.html"> <img src="images/ditto_allwhite_symbolonly.svg" class="ditto-navbar-symbol" alt="Home"> <img src="images/ditto_allwhite_textonly.svg" class="ditto-navbar-symbol-text" alt="Eclipse Ditto™"></a> |
| </div> |
| <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1"> |
| <ul class="nav navbar-nav navbar-right"> |
| <!-- toggle sidebar button --> |
| <!--<li><a id="tg-sb-link" href="#"><i id="tg-sb-icon" class="fa fa-toggle-on"></i> Nav</a></li>--> |
| <!-- entries without drop-downs appear here --> |
| |
| |
| |
| |
| |
| |
| |
| <li><a href="blog.html">Blog</a></li> |
| |
| |
| |
| <li><a href="intro-overview.html">Documentation</a></li> |
| |
| |
| |
| <li><a href="http-api-doc.html">HTTP API</a></li> |
| |
| |
| |
| <li><a href="sandbox.html">Sandbox</a></li> |
| |
| |
| |
| |
| <li><a href="https://github.com/eclipse/ditto" target="_blank"> |
| <img src="images/GitHub-Mark-Light-32px.png" alt="Sources at GitHub"> |
| </a></li> |
| |
| |
| |
| |
| |
| <li><a href="https://github.com/eclipse/ditto-clients" target="_blank"> |
| <img src="images/GitHub-Mark-Light-32px.png" alt="SDK sources at GitHub">SDKs |
| </a></li> |
| |
| |
| |
| |
| |
| <li><a href="https://github.com/eclipse/ditto-examples" target="_blank"> |
| <img src="images/GitHub-Mark-Light-32px.png" alt="Example sources at GitHub">examples |
| </a></li> |
| |
| |
| |
| |
| <!-- entries with drop-downs appear here --> |
| <!-- conditional logic to control which topnav appears for the audience defined in the configuration file.--> |
| |
| |
| <li class="dropdown"> |
| <a href="#" class="dropdown-toggle" data-toggle="dropdown">Links<b class="caret"></b></a> |
| <ul class="dropdown-menu"> |
| |
| |
| <li><a href="https://projects.eclipse.org/projects/iot.ditto" target="_blank">Eclipse Ditto Project</a></li> |
| |
| |
| |
| <li><a href="https://www.eclipse.org/forums/index.php/f/364/" target="_blank">Forum</a></li> |
| |
| |
| |
| <li><a href="https://ci.eclipse.org/ditto/" target="_blank">Jenkins</a></li> |
| |
| |
| |
| <li><a href="https://dev.eclipse.org/mhonarc/lists/ditto-dev/" target="_blank">Mailing list archives</a></li> |
| |
| |
| |
| <li><a href="https://gitter.im/eclipse/ditto" target="_blank">Gitter.im chat</a></li> |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| <!--comment out this block if you want to hide search--> |
| <li> |
| <!--start search--> |
| <div id="search-demo-container"> |
| <input type="text" id="search-input" placeholder="search..."> |
| <ul id="results-container"></ul> |
| </div> |
| <script src="//cdnjs.cloudflare.com/ajax/libs/simple-jekyll-search/0.0.9/jekyll-search.js" type="text/javascript"></script> |
| <script type="text/javascript"> |
| SimpleJekyllSearch.init({ |
| searchInput: document.getElementById('search-input'), |
| resultsContainer: document.getElementById('results-container'), |
| dataSource: 'search.json', |
| searchResultTemplate: '<li><a href="{url}" title="Release notes 2.0.0">{title}</a></li>', |
| noResultsText: 'No results found.', |
| limit: 10, |
| fuzzy: true, |
| }) |
| </script> |
| <!--end search--> |
| </li> |
| </ul> |
| </div> |
| </div> |
| <!-- /.container --> |
| </nav> |
| |
| <!-- Page Content --> |
| <div class="container"> |
| <div id="main"> |
| <!-- Content Row --> |
| <div class="row"> |
| |
| |
| <!-- Sidebar Column --> |
| <div class="col-md-3" id="tg-sb-sidebar"> |
| |
| |
| <ul id="mysidebar" class="nav"> |
| <li class="sidebarTitle"> |
| <label for="docVersion">Eclipse Ditto™ version:</label> |
| <div class="select-wrapper"> |
| <select id="docVersion" name="docVersion"> |
| |
| <option value="">development</option> |
| |
| <option value="2.0">2.0</option> |
| |
| <option value="1.5">1.5</option> |
| |
| <option value="1.4">1.4</option> |
| |
| <option value="1.3">1.3</option> |
| |
| <option value="1.2">1.2</option> |
| |
| <option value="1.1">1.1</option> |
| |
| <option value="1.0">1.0</option> |
| |
| </select> |
| </div> |
| <div id="dev-warning"> |
| <div markdown="span" class="alert alert-warning" role="alert" style="font-size:0.6em"><i class="fa fa-warning"></i> <b>Important:</b> This documentation reflects the latest 'development'. You might want to choose a released version.</div> |
| </div> |
| </li> |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Introduction</a> |
| <ul> |
| |
| |
| |
| <li><a href="intro-overview.html">Overview</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="intro-digitaltwins.html">Digital twins</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="intro-hello-world.html">Hello world</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Release Notes</a> |
| <ul> |
| |
| |
| |
| <li><a href="release_notes_201.html">2.0.1</a></li> |
| |
| |
| |
| |
| |
| |
| <li class="active"><a href="release_notes_200.html">2.0.0</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="release_notes_151.html">1.5.1</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="release_notes_150.html">1.5.0</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Archive</a> |
| <ul> |
| |
| |
| |
| <li><a href="release_notes_140.html">1.4.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_130.html">1.3.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_121.html">1.2.1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_120.html">1.2.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_115.html">1.1.5</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_113.html">1.1.3</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_112.html">1.1.2</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_111.html">1.1.1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_110.html">1.1.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_100.html">1.0.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_090.html">0.9.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_080.html">0.8.0</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_100-M2.html">1.0.0-M2</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_100-M1a.html">1.0.0-M1a</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_090-M2.html">0.9.0-M2</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_090-M1.html">0.9.0-M1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_080-M3.html">0.8.0-M3</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_080-M2.html">0.8.0-M2</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_080-M1.html">0.8.0-M1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_030-M2.html">0.3.0-M2</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_030-M1.html">0.3.0-M1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_020-M1.html">0.2.0-M1</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_010-M3.html">0.1.0-M3</a></li> |
| |
| |
| |
| |
| |
| <li><a href="release_notes_010-M1.html">0.1.0-M1</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Installation</a> |
| <ul> |
| |
| |
| |
| <li><a href="installation-building.html">Building Ditto</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="installation-running.html">Running Ditto</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="installation-operating.html">Operating Ditto</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Basic concepts</a> |
| <ul> |
| |
| |
| |
| <li><a href="basic-overview.html">Overview</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Model entities</a> |
| <ul> |
| |
| |
| |
| <li><a href="basic-thing.html">Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-feature.html">Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-policy.html">Policy</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-namespaces-and-names.html">Namespaces and Names</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-metadata.html">Thing Metadata</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-errors.html">Errors</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-auth.html">Authentication and Authorization</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-messages.html">Messages</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-signals.html">Signals</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Signal types</a> |
| <ul> |
| |
| |
| |
| <li><a href="basic-signals-command.html">Command</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-signals-commandresponse.html">Command response</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-signals-errorresponse.html">Error response</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-signals-event.html">Event</a></li> |
| |
| |
| |
| |
| |
| <li><a href="basic-signals-announcement.html">Announcement</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-apis.html">APIs</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-connections.html">Connections</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-placeholders.html">Placeholders</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-changenotifications.html">Change notifications</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-rql.html">RQL expressions</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-enrichment.html">Signal enrichment</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-search.html">Search</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="basic-acknowledgements.html">Acknowledgements / QoS</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Advanced concepts</a> |
| <ul> |
| |
| |
| |
| <li><a href="advanced-data-by-pass.html">Data By-Pass</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Architecture</a> |
| <ul> |
| |
| |
| |
| <li><a href="architecture-overview.html">Overview</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Services</a> |
| <ul> |
| |
| |
| |
| <li><a href="architecture-services-policies.html">Policies</a></li> |
| |
| |
| |
| |
| |
| <li><a href="architecture-services-things.html">Things</a></li> |
| |
| |
| |
| |
| |
| <li><a href="architecture-services-things-search.html">Things-Search</a></li> |
| |
| |
| |
| |
| |
| <li><a href="architecture-services-connectivity.html">Connectivity</a></li> |
| |
| |
| |
| |
| |
| <li><a href="architecture-services-concierge.html">Concierge</a></li> |
| |
| |
| |
| |
| |
| <li><a href="architecture-services-gateway.html">Gateway</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>HTTP API</a> |
| <ul> |
| |
| |
| |
| <li><a href="httpapi-overview.html">Overview</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-concepts.html">Concepts</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-search.html">Search</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-messages.html">Messages</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-protocol-bindings-websocket.html">WebSocket protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-protocol-bindings-cloudevents.html">Cloud Events HTTP protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="httpapi-sse.html">Server sent events</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Connectivity API</a> |
| <ul> |
| |
| |
| |
| <li><a href="connectivity-overview.html">Overview</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-manage-connections.html">Manage connections</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-amqp091.html">AMQP 0.9.1 protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-amqp10.html">AMQP 1.0 protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-mqtt.html">MQTT 3.1.1 protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-mqtt5.html">MQTT 5 protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-http.html">HTTP 1.1 protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-protocol-bindings-kafka2.html">Kafka 2.x protocol binding</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-mapping.html">Payload mapping</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-header-mapping.html">Header mapping</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-tls-certificates.html">TLS certificates</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="connectivity-ssh-tunneling.html">SSH tunneling</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Client SDK</a> |
| <ul> |
| |
| |
| |
| <li><a href="client-sdk-overview.html">Overview</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="client-sdk-java.html">Java</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="client-sdk-javascript.html">JavaScript</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>Ditto Protocol</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-overview.html">Overview</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-twinlive.html">Twin/live channel</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification.html">Specification</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-topic.html">Protocol topic</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-errors.html">Errors</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-things.html">Things group</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ commands/events</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-specification-things-create-or-modify.html">Create/Modify</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-things-merge.html">Merge</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-things-retrieve.html">Retrieve</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-things-delete.html">Delete</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-acks.html">Acknowledgements</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ search/messages</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-specification-things-search.html">Search</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-things-messages.html">Messages</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-policies.html">Policies group</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ commands/events</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-specification-policies-create-or-modify.html">Create/Modify</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-policies-retrieve.html">Retrieve</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-policies-delete.html">Delete</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-specification-policies-announcement.html">Announcement</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-bindings.html">Bindings</a></li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples.html">Examples</a></li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ Things examples</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-examples-creatething.html">Create a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletething.html">Delete a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifything.html">Modify a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievething.html">Retrieve a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievethings.html">Retrieve multiple Things</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifypolicyid.html">Modify the Policy ID of a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createattributes.html">Create Attributes</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deleteattributes.html">Delete Attributes</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyattributes.html">Modify Attributes</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrieveattributes.html">Retrieve Attributes</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createattribute.html">Create a single Attribute</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deleteattribute.html">Delete a single Attribute</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyattribute.html">Modify a single Attribute</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrieveattribute.html">Retrieve a single Attribute</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createthingdefinition.html">Create a Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletethingdefinition.html">Delete a Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifythingdefinition.html">Modify a Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievethingdefinition.html">Retrieve a Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createfeatures.html">Create Features</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletefeatures.html">Delete Features</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyfeatures.html">Modify Features</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievefeatures.html">Retrieve Features</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createfeature.html">Create a single Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletefeature.html">Delete a single Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyfeature.html">Modify a single Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievefeature.html">Retrieve a single Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createdefinition.html">Create Feature Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletedefinition.html">Delete Feature Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifydefinition.html">Modify Feature Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievedefinition.html">Retrieve Feature Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createproperties.html">Create Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deleteproperties.html">Delete Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyproperties.html">Modify Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrieveproperties.html">Retrieve Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createproperty.html">Create a single Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deleteproperty.html">Delete a single Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifyproperty.html">Modify a single Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrieveproperty.html">Retrieve a single Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createdesiredproperties.html">Create desired Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletedesiredproperties.html">Delete desired Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifydesiredproperties.html">Modify desired Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievedesiredproperties.html">Retrieve desired Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-createdesiredproperty.html">Create a single desired Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-deletedesiredproperty.html">Delete a single desired Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-modifydesiredproperty.html">Modify a single desired Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-retrievedesiredproperty.html">Retrieve a single desired Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-errorresponses.html">Error responses</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ Things merge examples</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-examples-mergething.html">Merge a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergepolicyid.html">Merge the Policy ID of a Thing</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergeattributes.html">Merge Attributes</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergeattribute.html">Merge a single Attribute</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergethingdefinition.html">Merge a Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergefeatures.html">Merge Features</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergefeature.html">Merge a single Feature</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergefeaturedefinition.html">Merge Feature Definition</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergeproperties.html">Merge Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergeproperty.html">Merge a single Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergedesiredproperties.html">Merge desired Feature Properties</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-mergedesiredproperty.html">Merge a single desired Property</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-errorresponses.html">Error responses</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| <li class="subfolders"> |
| <a href="#"><span></span>→ Policies examples</a> |
| <ul> |
| |
| |
| |
| <li><a href="protocol-examples-policies-createpolicy.html">Create a Policy</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-deletepolicy.html">Delete a Policy</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifypolicy.html">Modify a Policy</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrievepolicy.html">Retrieve a Policy</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifypolicyentries.html">Modify entries</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrievepolicyentries.html">Retrieve entries</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-createpolicyentry.html">Create a single entry</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-deletepolicyentry.html">Delete a single entry</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifypolicyentry.html">Modify a single entry</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrievepolicyentry.html">Retrieve a single entry</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifysubjects.html">Modify subjects</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrievesubjects.html">Retrieve subjects</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-createsubject.html">Create a single subject</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-deletesubject.html">Delete a single subject</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifysubject.html">Modify a single subject</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrievesubject.html">Retrieve a single subject</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifyresources.html">Modify resources</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrieveresources.html">Retrieve resources</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-createresource.html">Create a single resource</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-deleteresource.html">Delete a single resource</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-modifyresource.html">Modify a single resource</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-retrieveresource.html">Retrieve a single resource</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-errorresponses.html">Error responses</a></li> |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-policies-announcement-subjectDeletion.html">Announcement for subject deletion</a></li> |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| |
| <li><a href="protocol-examples-search.html">→ Search examples</a></li> |
| |
| |
| |
| |
| </ul> |
| </li> |
| |
| |
| |
| |
| |
| <li><a href="sandbox.html">Sandbox</a></li> |
| |
| |
| |
| |
| |
| <li><a href="presentations.html">Presentations</a></li> |
| |
| |
| |
| |
| |
| <li><a href="glossary.html">Glossary</a></li> |
| |
| |
| |
| |
| |
| <li><a href="feedback.html">Feedback</a></li> |
| |
| |
| |
| |
| |
| <p class="external"> |
| <a href="#" id="collapseAll">Collapse All</a> | <a href="#" id="expandAll">Expand All</a> |
| </p> |
| |
| </ul> |
| |
| <!-- this highlights the active parent class in the sidebar. this is critical so that the parent expands when you're viewing a page. This must appear below the sidebar code above. Otherwise, if placed inside customscripts.js, the script runs before the sidebar code runs and the class never gets inserted.--> |
| <script>$("li.active").parents('li').toggleClass("active"); |
| </script> |
| |
| </div> |
| |
| |
| |
| <!-- Content Column --> |
| <div class="col-md-9" id="tg-sb-content"> |
| <div class="post-header"> |
| <h1 class="post-title-main">Release notes 2.0.0</h1> |
| </div> |
| |
| |
| |
| <div class="post-content"> |
| |
| |
| <div class="summary">Version 2.0.0 of Eclipse Ditto, released on 06.05.2021</div> |
| |
| |
| |
| |
| <!-- this handles the automatic toc. use ## for subheads to auto-generate the on-page minitoc. if you use html tags, you must supply an ID for the heading element in order for it to appear in the minitoc. --> |
| <script> |
| $( document ).ready(function() { |
| // Handler for .ready() called. |
| |
| $('#toc').toc({ minimumHeaders: 0, listType: 'ul', showSpeed: 0, headers: 'h2,h3,h4' }); |
| |
| /* this offset helps account for the space taken up by the floating toolbar. */ |
| $('#toc').on('click', 'a', function() { |
| var target = $(this.getAttribute('href')) |
| , scroll_target = target.offset().top |
| |
| $(window).scrollTop(scroll_target - 10); |
| return false |
| }) |
| |
| }); |
| </script> |
| |
| <div id="toc"></div> |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| <p>This is Ditto’s second major release.</p> |
| |
| <p>This release is completely <a href="https://www.eclipse.org/projects/handbook/#ip">IP (intellectual property) checked by the Eclipse Foundation</a> |
| meaning that project code as well as all used dependencies were “[…] reviewed to ensure that the copyrights |
| expressed are correct, licensing is valid and compatible, and that other issues have been uncovered and properly |
| investigated.”</p> |
| |
| <h2 id="changelog">Changelog</h2> |
| |
| <p>Eclipse Ditto 2.0.0 focuses on the following areas:</p> |
| |
| <ul> |
| <li>Merge/PATCH updates of digital twins</li> |
| <li>Configurable OpenID Connect / OAuth2.0 claim extraction to be used for authorization</li> |
| <li>Establishing connections to endpoints (via AMQP, MQTT, HTTP) utilizing a Ditto managed SSH tunnel</li> |
| <li>Addition of a DevOps API in order to retrieve all known connections</li> |
| <li>Expiring policy subjects + publishing of announcement message prior to expiry</li> |
| <li>Addition of policy actions in order to inject a policy subject based on a provided JWT</li> |
| <li>Built-in acknowledgement for search updates to have the option of twin updates with strong consistency of the search index</li> |
| <li>Restoring active connections faster after a hard restart of the Ditto cluster via automatic prioritization of connections</li> |
| <li>Support for LastWill/Testament + retain flag for MQTT connections</li> |
| <li>Provide JWT tokens to Websocket endpoint with browser APIs</li> |
| </ul> |
| |
| <p>The step to a major version was done because of the following breaking API changes:</p> |
| |
| <ul> |
| <li>Removal of “API version 1” (deprecated in <a href="release_notes_110.html#deprecations">Ditto 1.1.0</a>) |
| from Ditto’s Java APIs + HTTP API</li> |
| <li>Removal of code in Java APIs marked as <code class="highlighter-rouge">@Deprecated</code></li> |
| <li>Binary incompatible changes to Java APIs</li> |
| <li>Restructuring of Ditto’s Maven modules in order to simplify/ease further development</li> |
| </ul> |
| |
| <p>The following non-functional enhancements are also included:</p> |
| |
| <ul> |
| <li>Improvement of stability during rolling updates</li> |
| <li>Addition of sharding concept for Ditto internal pub/sub enabling connection of e.g. tens of thousands websocket sessions</li> |
| <li>Background cleanup improvements in order to have less impact on DB roundtrip times</li> |
| <li>Update of third party libraries (e.g. Akka)</li> |
| <li>Documentation of deployment via K3S</li> |
| </ul> |
| |
| <h3 id="changes">Changes</h3> |
| |
| <h4 id="removal-of-api-version-1-acl-based-authorization">Removal of API version 1 (ACL based authorization)</h4> |
| |
| <p>The <a href="basic-policy.html">Policy based</a> authorization is already available and stable since Ditto 1.0.0. This policy based |
| authorization is more flexible and more powerful than the <a href="release_notes_110.html#deprecations">deprecated</a> ACL based |
| authorization.<br /> |
| Having this well established replacement, the ACL based authorization and with that API version 1 |
| (in which a <a href="basic-thing.html">thing</a> contained an <code class="highlighter-rouge">acl</code> entry), is removed from Ditto 2.0.0.</p> |
| |
| <p>All documentation of the ACL based approach was deleted, but is still available by accessing version picker in Ditto’s |
| documentation, selecting a 1.x Ditto version.</p> |
| |
| <p>The HTTP API <code class="highlighter-rouge">/api/1</code> and <code class="highlighter-rouge">/ws/1</code> (for the WebSocket) was also removed, using these endpoints will fail with Ditto 2.0.0.</p> |
| |
| <p><a href="basic-thing.html">Things</a> which still contain an <code class="highlighter-rouge">acl</code> entry (instead of a <code class="highlighter-rouge">policyId</code>) can no longer be used in |
| Ditto 2.0.0. If you need to migrate “things” from API 1 to API version 2, please have a look at the<br /> |
| <a href="#migrate-api-1-things-to-api-2">migration notes</a>.</p> |
| |
| <h4 id="removal-of-deprecated-code--binary-incompatible-changes-to-java-apis">Removal of deprecated code + binary incompatible changes to Java APIs</h4> |
| |
| <p>In order to not break binary compatibility in Ditto 1.x, existing APIs were marked as <code class="highlighter-rouge">@Deprecated</code> with a comment |
| pointing to an alternative implementation to use instead. Now, these deprecated APIs are removed from Ditto’s codebase.</p> |
| |
| <p>Some changes to the codebase which could not be done in Ditto 1.x without breaking binary compatibility were also done.</p> |
| |
| <h4 id="removed-content-type-header-mapping-for-connection-targets"><a href="https://github.com/eclipse/ditto/pull/934">Removed content-type header mapping for connection targets</a></h4> |
| |
| <p>Removed the default header mapping of <code class="highlighter-rouge">content-type</code> for new connection targets. The header mapping led to irritating |
| results, when payload mapping and header mapping disagreed on the actual <code class="highlighter-rouge">content-type</code>. Existing connections will still |
| keep the “old” default and map the <code class="highlighter-rouge">content-type</code> header.</p> |
| |
| <p>If you need to keep the old behavior, please have a look at the |
| <a href="#content-type-header-mapping-in-connection-targets">migration notes</a>.</p> |
| |
| <h4 id="openid-connect-configuration-change">OpenID Connect configuration change</h4> |
| |
| <p>For supporting <a href="https://github.com/eclipse/ditto/issues/512">Configurable OpenID Connect / OAuth2.0 claim extraction</a>, |
| the configuration format was changed, please have a look at the<br /> |
| <a href="#openid-connect-configuration-for-gateway">migration notes</a>.</p> |
| |
| <h4 id="removal-of-header-x-ditto-dummy-auth">Removal of header <code class="highlighter-rouge">x-ditto-dummy-auth</code></h4> |
| |
| <p>The HTTP header / query param <code class="highlighter-rouge">x-ditto-dummy-auth</code> which was already an alias for the |
| <a href="installation-operating.html#pre-authentication">pre-authentication provider</a> header <code class="highlighter-rouge">x-ditto-pre-authenticated</code> has |
| been removed from Ditto 2.0.<br /> |
| Please use the header <code class="highlighter-rouge">x-ditto-pre-authenticated</code> instead.</p> |
| |
| <h4 id="removed-default-source-header-mapping-for-mqtt-connections">Removed default source header mapping for MQTT connections</h4> |
| |
| <p>The default source header mapping of MQTT connections was removed. The headers <code class="highlighter-rouge">mqtt.topic</code>, <code class="highlighter-rouge">mqtt.qos</code> |
| and <code class="highlighter-rouge">mqtt.retain</code> now must explicitly be added to the source header mapping if they are required for further processing.</p> |
| |
| <h4 id="restructuring-of-dittos-maven-modules">Restructuring of Ditto’s Maven modules</h4> |
| |
| <p>Ditto’s modules were adjusted to be structured in a more functional way. In Ditto 1.x the modules were structured |
| in a more technical way.</p> |
| |
| <p>This table shows the old modules and in which module the old ones can be found in Ditto 2.0.0:</p> |
| |
| <table> |
| <thead> |
| <tr> |
| <th>Ditto 1.x module</th> |
| <th>Ditto 2.x module</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code class="highlighter-rouge">ditto-model</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-cleanup</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-connectivity</code></td> |
| <td><code class="highlighter-rouge">ditto-connectivity/ditto-connectivity-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-devops</code></td> |
| <td><code class="highlighter-rouge">ditto-devops/ditto-devops-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-enforcers</code></td> |
| <td><code class="highlighter-rouge">ditto-policies/ditto-policies-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-jwt</code></td> |
| <td><code class="highlighter-rouge">ditto-jwt/ditto-jwt-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-messages</code></td> |
| <td><code class="highlighter-rouge">ditto-messages/ditto-messages-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-namespaces</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-policies</code></td> |
| <td><code class="highlighter-rouge">ditto-policies/ditto-policies-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-query</code></td> |
| <td><code class="highlighter-rouge">ditto-rql/ditto-rql-query</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-rql</code></td> |
| <td><code class="highlighter-rouge">ditto-rql/ditto-rql-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-rql-parser</code></td> |
| <td><code class="highlighter-rouge">ditto-rql/ditto-rql-parser</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-things</code></td> |
| <td><code class="highlighter-rouge">ditto-things/ditto-things-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-thingsearch</code></td> |
| <td><code class="highlighter-rouge">ditto-thingsearch/ditto-thingsearch-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-model-thingsearch-parser</code></td> |
| <td><code class="highlighter-rouge">ditto-rql/ditto-rql-parser</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">ditto-protocol-adapter</code></td> |
| <td><code class="highlighter-rouge">ditto-protocol</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">ditto-signals</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-signals-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-signals-acks</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-acks-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-acks-things</code></td> |
| <td><code class="highlighter-rouge">ditto-things/ditto-things-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-signals-announcements</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-announcements-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-announcements-policies</code></td> |
| <td><code class="highlighter-rouge">ditto-policies/ditto-policies-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-signals-commands</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-cleanup</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-common</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-connectivity</code></td> |
| <td><code class="highlighter-rouge">ditto-connectivity/ditto-connectivity-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-devops</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API and is merged into ditto-base/ditto-base-api)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-messages</code></td> |
| <td><code class="highlighter-rouge">ditto-messages/ditto-messages-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-namespaces</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-policies</code></td> |
| <td><code class="highlighter-rouge">ditto-policies/ditto-policies-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-things</code></td> |
| <td><code class="highlighter-rouge">ditto-things/ditto-things-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-commands-thingsearch</code></td> |
| <td><code class="highlighter-rouge">ditto-thingsearch/ditto-thingsearch-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">- ditto-signals-events</code></td> |
| <td><code class="highlighter-rouge">-</code> (was pom only)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-events-base</code></td> |
| <td><code class="highlighter-rouge">ditto-base/ditto-base-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-events-connectivity</code></td> |
| <td><code class="highlighter-rouge">ditto-connectivity/ditto-connectivity-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-events-policies</code></td> |
| <td><code class="highlighter-rouge">ditto-policies/ditto-policies-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-events-things</code></td> |
| <td><code class="highlighter-rouge">ditto-things/ditto-things-model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">-- ditto-signals-events-thingsearch</code></td> |
| <td><code class="highlighter-rouge">ditto-thingsearch/ditto-thingsearch-model</code></td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <h4 id="restructuring-of-dittos-java-packages">Restructuring of Ditto’s Java packages</h4> |
| |
| <p>When updating from Ditto 1.x Java APIs (e.g. also when using the <a href="#ditto-java-client">Ditto Java client</a>), the following |
| packages were renamed:</p> |
| |
| <table> |
| <thead> |
| <tr> |
| <th>Ditto 1.x package</th> |
| <th>Ditto 2.x package</th> |
| </tr> |
| </thead> |
| <tbody> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.cleanup</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.connectivity</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.connectivity.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.devops</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API and is merged into ditto-base/ditto-base-api)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.enforcers</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.policies.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.jwt</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.jwt.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.messages</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.messages.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.namespaces</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.policies</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.policies.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.query</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.rql.query</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.rql</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.rql.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.rqlparser</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.rql.parser</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.things</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.things.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.thingsearch</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.thingsearch.model</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.thingsearchparser</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.rql.parser.thingsearch</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.model.protocoladapter</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.protocol</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.acks.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals.acks</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.acks.things</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.things.model.signals.acks</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.announcements.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals.announcements</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.announcements.policies</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.policies.model.signals.announcements</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.cleanup</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.common</code></td> |
| <td><code class="highlighter-rouge">-</code> (was internal API)</td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.connectivity</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.connectivity.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.devops</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.devops.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.messages</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.messages.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.namespaces</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.policies</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.policies.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.things</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.things.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.commands.thingsearch</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.thingsearch.model.signals.commands</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.events.base</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.base.model.signals.events</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.events.connectivity</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.connectivity.model.signals.events</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.events.policies</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.policies.model.signals.events</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.events.things</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.things.model.signals.events</code></td> |
| </tr> |
| <tr> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.signals.events.thingsearch</code></td> |
| <td><code class="highlighter-rouge">org.eclipse.ditto.thingsearch.model.signals.events</code></td> |
| </tr> |
| </tbody> |
| </table> |
| |
| <h4 id="ditto-java-client">Ditto Java client</h4> |
| |
| <p>New Java client instances are instantiated differently, please have a look at the<br /> |
| <a href="#ditto-java-client-instantiation">migration notes</a>.</p> |
| |
| <p>In addition, all APIs which returned a <code class="highlighter-rouge">CompletableFuture</code> were adjusted to return a <code class="highlighter-rouge">CompletionStage</code> instead.</p> |
| |
| <h4 id="ditto-javascript-client">Ditto JavaScript client</h4> |
| |
| <p>Starting with Ditto 2.0.0, the releases of the <a href="https://github.com/eclipse/ditto-clients/tree/master/javascript">Ditto JavaScript client</a> |
| are in sync with Ditto releases.<br /> |
| In oder to have a simplified usage of the JS client, the “api” module must no longer be explicitly imported, |
| simply directly import one of the following 2 npm modules:</p> |
| <ul> |
| <li><a href="https://www.npmjs.com/package/@eclipse-ditto/ditto-javascript-client-node">ditto-javascript-client-node</a></li> |
| <li><a href="https://www.npmjs.com/package/@eclipse-ditto/ditto-javascript-client-dom">ditto-javascript-client-dom</a></li> |
| </ul> |
| |
| <h3 id="new-features">New features</h3> |
| |
| <h4 id="mergepatch-updates-of-digital-twins"><a href="https://github.com/eclipse/ditto/issues/288">Merge/PATCH updates of digital twins</a></h4> |
| |
| <p>This new feature allows updating parts of a thing without affecting existing parts. You may now for example update an |
| attribute, add a new property to a feature and delete a property of a different feature in a <em>single request</em>. The new |
| merge functionality is available via the HTTP API and the all channels using the Ditto Protocol. See |
| <a href="httpapi-concepts.html#merge-updates">Merge updates via HTTP</a> |
| or the <a href="protocol-specification-things-merge.html">Merge protocol specification</a> for more details and examples.</p> |
| |
| <h4 id="configurable-openid-connect--oauth20-claim-extraction"><a href="https://github.com/eclipse/ditto/issues/512">Configurable OpenID Connect / OAuth2.0 claim extraction</a></h4> |
| |
| <p>OpenID Connect support has been extended; Previously, only the <code class="highlighter-rouge">sub</code> field from a JWT was injected as an authorization subject. |
| This is now configurable: The Ditto Gateway config takes a list of placeholder strings that are used to construct authorization subjects.<br /> |
| See <a href="installation-operating.html#openid-connect">OpenID Connect</a></p> |
| |
| <h4 id="establishing-connections-to-endpoints-via-ssh-tunnel"><a href="https://github.com/eclipse/ditto/issues/985">Establishing connections to endpoints via SSH tunnel</a></h4> |
| |
| <p>Add support for connecting to an external system from Ditto via an SSH tunnel.</p> |
| |
| <h4 id="devops-api-to-retrieve-all-known-connections"><a href="https://github.com/eclipse/ditto/issues/605">DevOps API to retrieve all known connections</a></h4> |
| |
| <p>Adds a new <a href="connectivity-manage-connections.html#retrieve-ids-of-all-connections">DevOps command</a> to list all |
| configured, non-deleted connections.</p> |
| |
| <h4 id="expiring-policy-subjects"><a href="https://github.com/eclipse/ditto/issues/890">Expiring policy subjects</a></h4> |
| |
| <p>In order to give access for a certain “authorized subject” only until a fixed timestamp, a Policy subject can |
| optionally be provided with an <a href="basic-policy.html#expiring-policy-subjects">“expiry” timestamp</a> |
| (being an ISO-8601 string).</p> |
| |
| <h4 id="publishing-of-announcement-message-prior-to-policy-expiry"><a href="https://github.com/eclipse/ditto/issues/964">Publishing of announcement message prior to policy expiry</a></h4> |
| |
| <p>For “expiring” policy subjects it is useful to get an <a href="basic-signals-announcement.html">announcement</a> message prior |
| to the actual expiry in order to be able to prolong the temporary access rights.</p> |
| |
| <h4 id="addition-of-policy-actions-in-order-to-inject-a-policy-subject"><a href="https://github.com/eclipse/ditto/issues/926">Addition of policy actions in order to inject a policy subject</a></h4> |
| |
| <p>New <a href="basic-policy.html#action-activatetokenintegration">policy HTTP API</a> to inject authorization subjects based on |
| the <a href="#" data-toggle="tooltip" data-original-title="JSON Web Token (JWT)">JWT</a> of the HTTP request.</p> |
| |
| <h4 id="built-in-acknowledgement-for-search-updates--strong-consistency-of-the-search-index"><a href="https://github.com/eclipse/ditto/issues/914">Built-in acknowledgement for search updates / strong consistency of the search index</a></h4> |
| |
| <p>Ditto’s search index is only eventually consistent. Applications that rely on search to for twin interactions which |
| need to know when a change is reflected in the search index, may request the new built-in |
| <a href="basic-acknowledgements.html#built-in-acknowledgement-labels"><code class="highlighter-rouge">"search-persisted"</code></a> acknowledgement label.</p> |
| |
| <h4 id="restoring-active-connection-faster-after-a-hard-restart-of-the-ditto-cluster"><a href="https://github.com/eclipse/ditto/pull/1018">Restoring active connection faster after a hard restart of the Ditto cluster</a></h4> |
| |
| <p>Prioritize very active <a href="basic-connections.html">connections</a> over inactive connections for reconnecting:<br /> |
| The higher the priority, the earlier it will be reconnected on startup.</p> |
| |
| <h4 id="support-for-last-will-for-mqtt-connections"><a href="https://github.com/eclipse/ditto/issues/1021">Support for “Last Will” for MQTT connections</a></h4> |
| |
| <p>Adds “Last Will” support for managed MQTT connections</p> |
| |
| <h4 id="allow-setting-retain-flag-for-mqtt-connections"><a href="https://github.com/eclipse/ditto/issues/1029">Allow setting retain flag for MQTT connections</a></h4> |
| |
| <p>The <code class="highlighter-rouge">retain</code> flag of MQTT messages published via a managed connection is set according to a message header.</p> |
| |
| <h4 id="provide-jwt-tokens-to-websocket-endpoint-with-browser-apis"><a href="https://github.com/eclipse/ditto/issues/667">Provide JWT tokens to Websocket endpoint with browser APIs</a></h4> |
| |
| <p>Prior to Ditto 2.0 it was only possible to pass a JWT to the <code class="highlighter-rouge">/ws</code> endpoint with the <code class="highlighter-rouge">Authorization</code> header.<br /> |
| As this however is not possible to influence in the browser based JavaScript API of <code class="highlighter-rouge">WebSocket</code>, it was not possible |
| to authenticate easily running a web application connecting against Ditto.</p> |
| |
| <p>This is now possible by supplying the JWT via a <a href="basic-auth.html#single-sign-on-sso">query-parameter <code class="highlighter-rouge">access_token</code></a>.</p> |
| |
| <h3 id="bugfixes">Bugfixes</h3> |
| |
| <p>Several bugs in Ditto 1.5.x were fixed for 2.0.0.<br /> |
| This is a complete list of the</p> |
| <ul> |
| <li><a href="https://github.com/eclipse/ditto/pulls?q=is:pr+milestone:2.0.0-M1">merged pull requests for milestone 2.0.0-M1</a></li> |
| <li><a href="https://github.com/eclipse/ditto/pulls?q=is:pr+milestone:2.0.0-M2">merged pull requests for milestone 2.0.0-M2</a></li> |
| <li><a href="https://github.com/eclipse/ditto/pulls?q=is:pr+milestone:2.0.0">merged pull requests for milestone 2.0.0</a></li> |
| </ul> |
| |
| <p>Here as well for the Ditto Java Client: <a href="https://github.com/eclipse/ditto-clients/pulls?q=is:pr+milestone:2.0.0">merged pull requests for milestone 2.0.0</a></p> |
| |
| <h4 id="content-type-of-a-ditto-protocol-json-message-did-not-describe-its-value"><a href="https://github.com/eclipse/ditto/pull/987">“content-type” of a Ditto Protocol JSON message did not describe its “value”</a></h4> |
| |
| <p>The <code class="highlighter-rouge">"content-type"</code> field in <a href="protocol-specification.html#headers">Ditto Protocol headers</a> was intended to identify the |
| type of the <a href="protocol-specification.html#value"><code class="highlighter-rouge">"value"</code></a>. This was not consequently ensured which has now been fixed.</p> |
| |
| <h4 id="password-encodingdecoding-for-amqp-10-connections-with-special-characters"><a href="https://github.com/eclipse/ditto/pull/996">Password encoding/decoding for AMQP 1.0 connections with special characters</a></h4> |
| |
| <p>When passwords contained a <code class="highlighter-rouge">+</code> sign, they were wrongly decoded for |
| <a href="connectivity-protocol-bindings-amqp10.html">AMQP 1.0 connections</a>.</p> |
| |
| <h4 id="merging-extrafields-into-thing-payload-when-using-normalization-mapper"><a href="https://github.com/eclipse/ditto/issues/947">Merging “extraFields” into thing payload when using “normalization” mapper</a></h4> |
| |
| <p>When selecting <a href="basic-connections.html#target-topics-and-enrichment">extra</a> via “enrichment”, the actual value of an |
| event could be overwritten by the “extra” data. The event data now always has priority.</p> |
| |
| <h2 id="migration-notes">Migration notes</h2> |
| |
| <h3 id="migrate-api-1-things-to-api-2">Migrate API 1 things to API 2</h3> |
| |
| <p>In order to migrate existing <a href="basic-thing.html">things</a> from API version 1 to API version 2 |
| (from having a <code class="highlighter-rouge">acl</code> to having a <code class="highlighter-rouge">policyId</code>) simply perform the following steps <strong>prior to updating to Ditto 2.0.0</strong>:</p> |
| <ul> |
| <li>Retrieve the to-be-migrated thing <strong>via API 1</strong> <code class="highlighter-rouge">GET /api/1/things/<the-namespace>:<the-name></code></li> |
| <li>Save the content of the <code class="highlighter-rouge">"acl"</code> field in the returned Thing JSON</li> |
| <li>Create a new <a href="basic-policy.html">policy</a> based on the retrieved ACL content |
| <ul> |
| <li>tip: when creating the policy, use the same ID as for the thing</li> |
| <li>for the policy <a href="basic-policy.html#subjects">subject</a>, use the map “keys” of the ACL JSON object, prepending the |
| required <code class="highlighter-rouge"><subject-issuer></code> prefix</li> |
| <li>choose the permissions in the <a href="basic-policy.html#which-resources-can-be-controlled">resources</a> according to your |
| needs</li> |
| </ul> |
| </li> |
| <li>Update the thing <strong>via API 2</strong> <code class="highlighter-rouge">PUT /api/2/things/<the-namespace>:<the-name></code> and set the <code class="highlighter-rouge">"policyId"</code> to the just |
| created policy id</li> |
| <li>You can now only access the thing via API 2</li> |
| <li>After all API 1 things were migrated, you can safely update to Ditto 2.0.0</li> |
| </ul> |
| |
| <h3 id="content-type-header-mapping-in-connection-targets">“content-type” header mapping in connection targets</h3> |
| |
| <p>Due to the |
| <a href="https://github.com/eclipse/ditto/pull/934">removed default content-type header mapping for connection targets</a>, |
| it might be necessary to update the way connection targets are created in case you create connection targets without |
| explicit <code class="highlighter-rouge">headerMapping</code> and rely on a specific content-type on the receiving side. The request to create connection |
| targets can be updated to contain the “old” default in this case:</p> |
| <div class="language-json highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span><span class="w"> |
| </span><span class="s2">"targetActorSelection"</span><span class="p">:</span><span class="w"> </span><span class="s2">"/system/sharding/connection"</span><span class="p">,</span><span class="w"> |
| </span><span class="s2">"headers"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="s2">"aggregate"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="s2">"piggybackCommand"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="s2">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"connectivity.commands:createConnection"</span><span class="p">,</span><span class="w"> |
| </span><span class="s2">"connection"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="s2">"targets"</span><span class="p">:[{</span><span class="w"> |
| </span><span class="s2">"headerMapping"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"> |
| </span><span class="s2">"content-type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"{{header:content-type}}"</span><span class="p">,</span><span class="w"> |
| </span><span class="s2">"correlation-id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"{{header:correlation-id}}"</span><span class="p">,</span><span class="w"> |
| </span><span class="s2">"reply-to"</span><span class="p">:</span><span class="w"> </span><span class="s2">"{{header:reply-to}}"</span><span class="w"> |
| </span><span class="p">},</span><span class="w"> |
| </span><span class="err">//</span><span class="w"> </span><span class="err">...</span><span class="w"> |
| </span><span class="p">}]</span><span class="w"> |
| </span><span class="err">//</span><span class="w"> </span><span class="err">...</span><span class="w"> |
| </span><span class="p">}</span><span class="w"> |
| </span><span class="p">}</span><span class="w"> |
| </span><span class="p">}</span><span class="w"> |
| </span></code></pre></div></div> |
| |
| <h3 id="openid-connect-configuration-for-gateway">OpenID Connect configuration for gateway</h3> |
| |
| <p>The oauth configuration section of the Gateway service has been altered to support |
| <a href="https://github.com/eclipse/ditto/issues/512">arbitrary claims for authorization subjects</a>. |
| The <code class="highlighter-rouge">openid-connect-issuers</code> map now takes key-object pairs rather than key-string pairs:</p> |
| |
| <p>old:</p> |
| |
| <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>oauth = { |
| openid-connect-issuers = { |
| someissuer = "https://example.com" |
| } |
| } |
| </code></pre></div></div> |
| |
| <p>new:</p> |
| |
| <div class="highlighter-rouge"><div class="highlight"><pre class="highlight"><code>oauth = { |
| openid-connect-issuers = { |
| someissuer = { |
| issuer = "https://example.com" |
| } |
| } |
| } |
| </code></pre></div></div> |
| |
| <p>The <code class="highlighter-rouge">auth-subjects</code> field is optional. When not supplied, the ‘old’ behaviour (using the JWT <code class="highlighter-rouge">sub</code> field) remains.</p> |
| |
| <h3 id="header-mapping-for-mqtt-connections">Header mapping for MQTT connections</h3> |
| |
| <p>Prior to this release, <a href="connectivity-protocol-bindings-mqtt.html">MQTT 3.1.1</a> and |
| <a href="connectivity-protocol-bindings-mqtt5.html">MQTT 5</a> always contained 3 headers for consumed messages via |
| <a href="basic-connections.html#sources">connection sources</a> (subscribed MQTT topics):</p> |
| <ul> |
| <li><code class="highlighter-rouge">mqtt.topic</code></li> |
| <li><code class="highlighter-rouge">mqtt.qos</code></li> |
| <li><code class="highlighter-rouge">mqtt.retain</code></li> |
| </ul> |
| |
| <p>Those headers could be e.g. used in the |
| <a href="connectivity-mapping.html#javascript-mapping-engine">JavaScript payload mapping engine</a> in order to find out on |
| which topic a consumed MQTT message was received.</p> |
| |
| <p>These headers are not longer implicitly mapped, but instead have to be mapped via |
| <a href="connectivity-header-mapping.html">header mapping</a> manually.</p> |
| |
| <p>An example <a href="connectivity-protocol-bindings-mqtt.html#source-header-mapping">source header mapping</a> is provided |
| in the documentation.</p> |
| |
| <h3 id="ditto-java-client-instantiation">Ditto Java Client instantiation</h3> |
| |
| <p>The synchronous instantiation of the Ditto Java Client has been removed from its Factory class <code class="highlighter-rouge">DittoClients</code>. |
| To get a <code class="highlighter-rouge">DittoClient</code> instantiate a <code class="highlighter-rouge">DisconnectedDittoClient</code> via <code class="highlighter-rouge">DittoClients.newInstance(messagingProvider)</code> first |
| and call <code class="highlighter-rouge">connect()</code> on it.<br /> |
| This call returns a <code class="highlighter-rouge">CompletionStage</code> which finally resolves to a connected <code class="highlighter-rouge">DittoClient</code>.</p> |
| |
| <h2 id="roadmap">Roadmap</h2> |
| |
| <p>Looking forward, the current plans for Ditto 2.1.0 are:</p> |
| |
| <ul> |
| <li><a href="https://github.com/eclipse/ditto/issues/586">Support for consuming messages from Apache Kafka</a></li> |
| <li><a href="https://github.com/eclipse/ditto/issues/298">Let policies import other policies to enable re-use when securing things</a></li> |
| </ul> |
| |
| |
| <div class="tags"> |
| |
| <b>Tags: </b> |
| |
| |
| |
| <a href="tag_release_notes.html" class="btn btn-default navbar-btn cursorNorm" role="button">release_notes</a> |
| |
| |
| |
| </div> |
| |
| </div> |
| |
| <hr class="shaded"/> |
| |
| <footer> |
| <div class="row"> |
| <div class="col-lg-12 footer"> |
| <div class="logo"> |
| <a href="https://eclipse.org"><img src="images/eclipse_foundation_logo.svg" alt="Eclipse logo"/></a> |
| </div> |
| <p class="notice"> |
| ©2021 Eclipse Ditto™. |
| Site last generated: Jul 23, 2021 <br /> |
| </p> |
| <div class="quickLinks"> |
| <a href="https://www.eclipse.org/legal/privacy.php" target="_blank"> |
| > Privacy Policy |
| </a> |
| <a href="https://www.eclipse.org/legal/termsofuse.php" target="_blank"> |
| > Terms of Use |
| </a> |
| <a href="https://www.eclipse.org/legal/copyright.php" target="_blank"> |
| > Copyright Agent |
| </a> |
| <a href="https://www.eclipse.org/legal" target="_blank"> |
| > Legal |
| </a> |
| <a href="https://www.eclipse.org/legal/epl-2.0/" target="_blank"> |
| > License |
| </a> |
| <a href="https://eclipse.org/security" target="_blank"> |
| > Report a Vulnerability |
| </a> |
| </div> |
| </div> |
| </div> |
| </footer> |
| |
| |
| </div> |
| <!-- /.row --> |
| </div> |
| <!-- /.container --> |
| </div> |
| <!-- /#main --> |
| </div> |
| |
| </body> |
| </html> |