Welcome to Apache Etch 1.1.0. Etch is incubating at apache.org. You can find
us here:

Project info:

    http://incubator.apache.org/projects/etch.html

Documentation info:

    http://cwiki.apache.org/ETCH/

Issues:

    https://issues.apache.org/jira/browse/ETCH

SVN:

    http://svn.apache.org/repos/asf/incubator/etch/

Mailing lists:

    mailto:etch-dev@incubator.apache.org (etch developers)
    mailto:etch-user@incubator.apache.org (etch users)

Subscribing to the mailing lists:

    mailto:etch-dev-subscribe@incubator.apache.org (etch developers)
    mailto:etch-user-subscribe@incubator.apache.org (etch users)

This release of Apache Etch resolves issues related to our new home at Apache.
One Apache requirement is that the java (and csharp) name spaces look something
like org.apache.etch... These changes have been made, however, they will break
existing users of etch. All that need be done for java is to correct the package
names from etch.* to org.apache.etch.*. For C#, the namespace has changed from
Etch.* to Org.Apache.Etch.*. In both cases, you will need to re-etch your *.etch
source files.

There are also some new components in this release, the biggest of which are the
contribution of the python and c bindings from Cisco. There is also an
interoperability testing framework, also from Cisco. While these components are
not yet fully functional, getting them here is an important milestone. There is
still some work to be done, interested parties should send inquiries to
etch-dev@incubator.apache.org.

There are a few bugs fixed in this release, too, as detailed below. Some of
these fixes are compiler changes. Please be sure to recompile all your etch
source files.

Here are the issues resolved in this release:

Key         Summary
---         -------
** Bug
    * [ETCH-56] - UnwantedMessage.ToString method attempts to format using the
                  java style formatting instead of csharp style
    * [ETCH-57] - Sometimes closing a TlsConnection normally will result in an
                  IOException with Socket is closed.
    * [ETCH-69] - Compiler throws URISyntaxException if there are spaces in the
                  classpath
    * [ETCH-76] - Build problems if Etch source is downloaded to a path with
                  spaces
    * [ETCH-77] - Incompatibility in the READMEs for the bundled examples

** Improvement
    * [ETCH-54] - TransportFactory.newTransport returns stack topped by
                  DeliveryService which makes it hard to implement meta transports
    * [ETCH-59] - Listener stack is built 1/2 upside down and strange inhibiting
                  name service and other transport filters
    * [ETCH-63] - Change maven groupId to "org.apache.etch" from "etch.etch"

** New Feature
    * [ETCH-15] - design and implement a framework for interoperability testing,
                  plus a simple demonstration test

** Task
    * [ETCH-22] - Change Java (and C#) package names to org.apache.etch
    * [ETCH-32] - import the c binding
    * [ETCH-35] - import the python binding
    * [ETCH-38] - import interoperability tester
    * [ETCH-44] - put header comments in order per apache standard
    * [ETCH-49] - merge changes from 1.0.2 branch to trunk
    * [ETCH-70] - Rename jar file build products to include incubating in the
                  name.
    * [ETCH-71] - repair license header in c binding
    * [ETCH-72] - repair license header in interop tester
    * [ETCH-73] - repair license header in tests
    * [ETCH-74] - repair license header in scripts

Here are the outstanding bugs in this release:

Key         Summary
---         -------
ETCH-12     An exception return value from a message is indistinguishable from a
            thrown exception.
ETCH-26     Some unexpected exceptions are thrown if .Net Framework Language
            Pack is installed.
