<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML Basic 1.1//EN" "http://www.w3.org/TR/xhtml-basic/xhtml-basic11.dtd">
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
  Architecture
-->
<html lang="en">
<head>
    <meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
    <meta content="ActiveMQ's next generation of messaging" name="description"/>
    <meta content="messaging,stomp,jms,activemq" name="keywords"/>
    <meta content="ActiveMQ" name="author"/>
    <link type="text/css" rel="stylesheet" href="styles/impact/css/pygmentize.css"/>
    <link type="text/css" rel="stylesheet" href="styles/impact/css/site.css"/>

    <style type='text/css'>
        /* <![CDATA[ */
        .download {
            font-size: 80%;
        }
        table.download { width: 100%;}
        table.download tr td {
            border: 1px solid #ccc;
            padding: .5em;
        }
        /* ]]> */
    </style>

    <title>ActiveMQ Artemis</title>
</head>
<body>
<div id="navigation">
    <div class="wrapper">
        <ul>
            <li><a href="index.html">ActiveMQ Artemis</a></li>
            <li><a href="docs.html">Documentation</a></li>
            <li><a href="download.html">Download</a></li>
        </ul>
    </div>
</div>
<div id="overview">
    <div class="wrapper">
        <div class="logo">
            <img src="images/activemq-logo.png" alt="ActiveMQ logo"/>
        </div>
        <div class="message">
            <h1>ActiveMQ Artemis</h1>
        </div>
    </div>
</div>
<div id="content">
    <div class="wrapper">
      <h2 id="release-notes---apache-activemq-artemis-1.1.0">Release Notes - Apache ActiveMQ Artemis 1.1.0</h2>
    </div>
    <div class="wrapper">
      <p>A complete list of JIRAs for the 1.1.0 release can be found at the <a href="https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12332642&amp;styleName=Html&amp;projectId=12315920&amp;Create=Create&amp;atl_token=A5KQ-2QAV-T4JA-FDED%7C708a588702fdb54724fe817fd07ee4c5610de292%7Clin">Apache ActiveMQ Artemis project JIRA</a></p>
      <p>Overall Apache ActiveMQ Artemis 1.1.0 has several improvements and it's a nice polish on top of Apache ActiveMQ Artemis 1.0.0, things like better examples, better OpenWire support and the first release of MQTT.</p>
      <p>We would like to highlight the following accomplishments on this release:</p>
      <ul>
          <li><p>[<a href="https://issues.apache.org/jira/browse/ARTEMIS-154">ARTEMIS-154</a>] This is our first implementation of the MQTT support.</p></li>
          <li><p><a href="https://issues.apache.org/jira/browse/ARTEMIS-178">ARTEMIS-178</a> The examples are now using the CLI to create and start servers reflecting real cases used in production. The documentation about the examples has been updated. Please refer to the documentation for more information about this.</p></li>
          <li><p>[<a href="https://issues.apache.org/jira/browse/ARTEMIS-116">ARTEMIS-116</a>] The CLI has been improved. There are new tools to compact the journal and we did a lot of polish around the CLI.</p></li>
          <li><p><strong>Improvements on OpenWire</strong> We fixed several issues around OpenWire</p></li>
      </ul>
      <h3 id="where-we-are-still-improving.">Where we are still improving.</h3>
      <p>1.1.0 has improved a lot, and these are the areas we are still working on:</p>
      <ul>
          <li><p>This is the first release with MQTT. We would like to hear from you if you have any issues around MQTT as we are continuously improving the MQTT support</p></li>
          <li>Short list of what need to be implemented on OpenWire for future releases:
              <ul>
                  <li>Reconnection</li>
                  <li>Better Flow Control on producers</li>
                  <li>Compressed messages</li>
                  <li>Optimized ACKs</li>
                  <li>Streamlet support</li>
              </ul></li>
      </ul>
    </div>
</div>
</body>
</html>
