:doctype: book

Title: Notice:    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.

= July 2012 Board report

Apache Aries delivers a set of pluggable Java components enabling an enterprise OSGi application programming model.

##Releases

The following bug fix releases:

* Apache Aries Proxy 0.3.1
* Apache Aries Proxy 0.4.1

As indicated in the last report, bundles and packages are now being  brought up from 0.x to 1.0 to better reflect the stability and level of confidence we have in them.
This will also bring our versioning policy inline with that described in the OSGi Alliance semantic versioning whitepaper.
The 1.0 releases have started.
We have approx 118 OSGi bundles so these are being done in logical phases.
These have completed:

* Apache Aries Test Support 1.0.0
* Apache Aries JNDI API 1.0.0
* Apache Aries JMX API 1.0.0
* Apache Aries JPA Container API 1.0.0
* Apache Aries Quiesce API 1.0.0

In addition there has been significant activity in the Aries Subsystems module which will be an implementation of the OSGi Subsystem Service Specification.

##Project Branding Board Report Checklist

* Project Website Basics : homepage is aries.apache.org (done)
* Project Naming And Descriptions : use proper Apache forms, describe product, etc.
(pending)
* Website Navigation Links : navbar links included, link to www.apache.org included (pending - feather link done)
* Trademark Attributions : attribution for all ASF marks included in footers, etc.
(pending)
* Logos and Graphics : include TM, use consistent product logo on your site (pending)
* Project Metadata : DOAP file checkedin and up to date (done)

##Community update

No new committers since the last report.
The user/dev lists and JIRAs continue to be moderately active, with new patches being posted by contributors.

There are no board level issues.
