<!--
 * Copyright 2001-2009 The Apache Software Foundation.
 *
 * Licensed 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.
 *
 * -->
 

        
        Release Notes - jUDDI - Version 3.3.3
                                
<h2>        Bug
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-945'>JUDDI-945</a>] -         Validation error in the JUDDI web.xml (non-Tomcat containers)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-946'>JUDDI-946</a>] -         Incorrect annotation on JPA entity classes
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-951'>JUDDI-951</a>] -         EntityManagerFactory not closed when undeploying juddi
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-953'>JUDDI-953</a>] -         juddi-core and juddi-core-openjpa do not use the same JPA version
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-956'>JUDDI-956</a>] -         Adding a tModel without category as Keyed Reference Groups to another tModel generates an exception.
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-958'>JUDDI-958</a>] -         Running mvn clean install -Pdist fails (validation of apache licences by rat plugin fails)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-959'>JUDDI-959</a>] -         Running mvn clean install -Pdist fails with java 1.8 (javadocs generation problem)
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-965'>JUDDI-965</a>] -         DispositionReportFaultMessage is hiding exception messages
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-966'>JUDDI-966</a>] -         sources jars are no longer installed while building juddi
</li>
</ul>
                        
<h2>        Improvement
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-947'>JUDDI-947</a>] -         Avoid copying the source juddi-core in juddi-core-openjpa
</li>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-952'>JUDDI-952</a>] -         Add unit test code coverage reports
</li>
</ul>
                                                                    
<h2>        Task
</h2>
<ul>
<li>[<a href='https://issues.apache.org/jira/browse/JUDDI-944'>JUDDI-944</a>] -         update the gitignore file
</li>
</ul>
                