:doctype: book

Title:     Board Report 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 2011 Board report

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

Users have asked for a release of the Aries JPA bundles and hence the snapshot bundles it depends on (Aries Util) - in particular due to:

* the new 'runtime enhancer' that will mean entities can be enhanced as they are used in the runtime, rather than at development time.
* the support for EclipseLink (in addition to Apache OpenJPA) as a JPA provider

The release process has just started.
This will exercise our per bundle release process adhering to the OSGi Alliance Semantic Versioning recommendations.

There have also been enhancements to the Aries JMX (whiteboard pattern) and Aries Subsystem (to use OSGi Core 4.3).

Apache Geronimo, which consumes Apache Aries to implement its enterprise OSGi application programming model, has been readying a release.
The performance enhancements in the Aries Proxy module which now makes use of the new Weaving Hooks OSGi specification, has had a few teething problems for Geronimo.
All known problems are now resolved.

##Project Branding Board Report Checklist

We've been reminded of this work and are reporting this checklist for the first time.
We appreciate we're a bit behind the curve here, and are doing our best to catch up.

* 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 (pending - some minor updates needed)

##Community update

Roughly same number of dev@ subscribers at 119, user@ 148 subscribers up 14 since last report.
John Ross was voted in as a committer after his significant work to the 'subsystem' module.

There are no board level issues.
