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 2016 Board report

   Apache Aries delivers a set of pluggable Java components enabling an
   enterprise OSGi application programming model.
   
## Activity: 
 - TODO - the PMC MUST provide this information. new modules & # releases goes here
   
## Health report: 
 - TODO - Please use this paragraph to elaborate on why 
   the current project activity (mails, commits, bugs etc) is at its current 
   level - Maybe geese took over and are now controlling the project? 
was:
 - Mailing list discussion and project contributions continue to be healthy.

   
## PMC changes: 
   
 - Currently 37 PMC members. 
 - No new PMC members added in the last 3 months 
 - Last PMC addition was Christian Schneider on Fri Apr 10 2015 
   
## Committer base changes: 
   
 - Currently 51 committers. 
 - New commmitters: 
    - Dominik Przybysz was added as a committer on Mon May 30 2016 
    - Carlos Sierra Andrés was added as a committer on Fri Jun 17 2016 
   
## Releases: 
   
 - TODO. was:
   
 - Aries JPA container (jpa-container) 1.0.4 2016-03-08
 - Apache Aries Proxy Service (proxy-impl) 1.0.5 2016-03-25
 - Apache Aries JMX Core (jmx-core) 1.1.6 2016-03-25
 - Aries Blueprint Core (blueprint-core) 1.6.0 2016-03-25
 - Aries Blueprint Spring Support (blueprint-spring) 0.2.0 2016-03-25
 - Aries Blueprint Spring Extender Support (blueprint-spring-extender) 0.2.0 2016-03-25
 - Aries Blueprint no-OSGI (blueprint-noosgi) 1.1.2 2016-03-25
 - Aries Blueprint CM (blueprint-cm) 1.0.8 2016-03-25
   
## Mailing list activity: 
   
 - TODO Please explain what the following statistics mean 
   for the project. If there is nothing significant in the figures, omit this 
   section. 
   
 - dev@aries.apache.org:  
    - 134 subscribers (up 4 in the last 3 months): 
    - 552 emails sent to list (399 in previous quarter) 
   
 - user@aries.apache.org:  
    - 241 subscribers (up 4 in the last 3 months): 
    - 193 emails sent to list (36 in previous quarter) 
   
   
## JIRA activity: 
   
 - 56 JIRA tickets created in the last 3 months 
 - 46 JIRA tickets closed/resolved in the last 3 months 
   
   
