<?xml version="1.0"?>
<!---
 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.
-->

<document>

  <properties>
    <title>Powered By Jelly</title>
    <author email="jstrachan@apache.org">James Strachan</author>
  </properties>

  <body>
    <section name="Powered By Jelly">
      <p>
        This page contains a list of known projects successfully using
        Jelly.  We would be very interested if you would drop us a note
        if you are using Jelly with your project and would like to be
        added to this list.
      </p>
      <subsection name="Projects Using Jelly">
      <table>
        <tr><th>Project</th><th>Overview</th></tr>
        <tr>
          <td><a href="http://aft.sourceforge.net/">Anteater</a></td>
          <td>
            A testing framework which provides an easy way to write tests for checking the functionality of a 
            Web application or of an XML Web service.
          </td>
        </tr>
        <tr>
          <td><a href="http://drools.org/">Drools</a></td>
          <td>
            A Java rules engine.
          </td>
        </tr>
        <tr>
          <td><a href="http://blissed.werken.com/">Blissed</a></td>
          <td>
            A Java process and state framework.
          </td>
        </tr>
        <tr>
          <td><a href="http://jakarta.apache.org/commons/latka/">Latka</a></td>
          <td>
            A functional (end-to-end) testing tool implemented in Java, and using an XML syntax to 
            define a series of HTTP (or HTTPS) requests and a set of validations used to verify that 
            the request was processed correctly. 
          </td>
        </tr>
        <tr>
          <td><a href="http://maven.apache.org/">Maven</a></td>
          <td>
            A java project management and project comprehension tool.
          </td>
        </tr>
        <tr>
          <td><a href="http://nanning.sourceforge.net/">Nanning</a></td>
          <td>
            A simple yet scaleable aspect-oriented framework for Java
          </td>
        </tr>
        <tr>
          <td><a href="http://seedling.sourceforge.net">Seedling</a></td>
          <td>
            A generic application platform that enables streamlined development of Java applications from 
            reusable components. In particular JellyUnit and JellySwing are used to implement Swing based
            unit testing.
          </td>
        </tr>
        <tr>
          <td><a href="http://werkflow.werken.com/">Werkflow</a></td>
          <td>
            A Java workflow system.
          </td>
        </tr>
      </table>
    </subsection>
    </section>
  </body>
</document>
