<!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.5.4">Release Notes - Apache ActiveMQ Artemis 1.5.5</h2>
    </div>
    <div class="wrapper">
        <p>A complete list of JIRAs for the 1.5.4 release can be found at the <a
                href=https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12339947&styleName=&projectId=12315920>Apache
            ActiveMQ Artemis project JIRA</a></p>

        Release Notes - ActiveMQ Artemis - Version 1.5.5

        <h2>        Bug
        </h2>
        <ul>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-930'>ARTEMIS-930</a>] -         JDBC FileFactory Driver Prepared Statement does not always return ID
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-990'>ARTEMIS-990</a>] -         AMQ119032: User: Customer does not have permission=&#39;CREATE_DURABLE_QUEUE&#39; on address $sys.mqtt.queue.qos2
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1033'>ARTEMIS-1033</a>] -         NPE on PageTransactions during startup in case of previous TX Failures
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1043'>ARTEMIS-1043</a>] -         NettyConnector not working with IPv6 address
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1057'>ARTEMIS-1057</a>] -         Lower log level of AMQ214023
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1071'>ARTEMIS-1071</a>] -         Invalid Type exception handling improvements
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1072'>ARTEMIS-1072</a>] -         ./artemis create --java-opts will have options on bin instead of etc
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1074'>ARTEMIS-1074</a>] -         Acceptors and Connectors that enable SSL don’t start up while using a password codec
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1078'>ARTEMIS-1078</a>] -         Thread pool executor occasionally misses to create a new thread
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1089'>ARTEMIS-1089</a>] -         Backup sync-up is slow when paging
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1114'>ARTEMIS-1114</a>] -         Journal Compactor possibly losing records
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1140'>ARTEMIS-1140</a>] -         Avoid Queue lock on queueQuery
            </li>
        </ul>

        <h2>        Improvement
        </h2>
        <ul>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1077'>ARTEMIS-1077</a>] -         Improving InVM and Buffer usage
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-1124'>ARTEMIS-1124</a>] -         JDBC Network Timeout configuration
            </li>
        </ul>


    </div>
</div>
</body>
</html>
