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.