<!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.1">Release Notes - Apache ActiveMQ Artemis 1.5.1</h2>
    </div>
    <div class="wrapper">
      <p>A complete list of JIRAs for the 1.5.1 release can be found at the <a href=https://issues.apache.org/jira/secure/ReleaseNote.jspa?version=12338661&styleName=Html&projectId=12315920&Create=Create">Apache ActiveMQ Artemis project JIRA</a></p>
      <p>Bug Fixes:</p>
        <ul>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-748'>ARTEMIS-748</a>] -         AddressSize show a negative number.
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-823'>ARTEMIS-823</a>] -         Broker doesn&#39;t settle rejected messages
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-827'>ARTEMIS-827</a>] -         AMQP test client validator classes not thread safe
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-840'>ARTEMIS-840</a>] -         Passwords logged in plaintext
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-842'>ARTEMIS-842</a>] -         JMSMessageID doesn&#39;t appear to work in selector
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-849'>ARTEMIS-849</a>] -         CDI Integration doc missing
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-852'>ARTEMIS-852</a>] -         Add indices to tables from JDBC backend to increase performance
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-859'>ARTEMIS-859</a>] -         BACKLOG_PROP_NAME is not part of allowable properties on the acceptor
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-860'>ARTEMIS-860</a>] -         openwire protocol not installed in artemis-osgi
            </li>
        </ul>
        <p>Improvements:</p>
        <ul>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-814'>ARTEMIS-814</a>] -         Support outgoing connections for AMQP
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-841'>ARTEMIS-841</a>] -         Hash Processors lock free lazy singleton instantiation
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-845'>ARTEMIS-845</a>] -         Making Default Acceptor Protocols a bit more clear
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-846'>ARTEMIS-846</a>] -         Once the disk is full the blocked producer should log about disk full
            </li>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-863'>ARTEMIS-863</a>] -         The broker should deal with Network Failures.
            </li>
        </ul>
        <p>Tasks:</p>
        <ul>
            <li>[<a href='https://issues.apache.org/jira/browse/ARTEMIS-865'>ARTEMIS-865</a>] -         Remove e.printStackTrace() from code
            </li>
        </ul>
    </div>
</div>
</body>
</html>
