<?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://commons.apache.org/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>
