
Apache ActiveMQ
Copyright 2005-2008 The Apache Software Foundation

This product includes software developed by
The Apache Software Foundation (http://www.apache.org/).


=========================================================================
==  Spring Notice                                                      ==
=========================================================================

This product includes software developed by
the Apache Software Foundation (http://www.apache.org).

This product also includes software developed by
Clinton Begin (http://www.ibatis.com).

The end-user documentation included with a redistribution, if any,
must include the following acknowledgement:

 "This product includes software developed by the Spring Framework
  Project (http://www.springframework.org)."

Alternately, this acknowledgement may appear in the software itself,
if and wherever such third-party acknowledgements normally appear.

The names "Spring" and "Spring Framework" must not be used to
endorse or promote products derived from this software without
prior written permission. For written permission, please contact
rod.johnson@interface21.com or juergen.hoeller@interface21.com.


=========================================================================
==  MX4J Notice                                                        ==
=========================================================================

This product includes software developed by the MX4J project
(http://sourceforge.net/projects/mx4j).

==============================================================
 Jetty Web Container
 Copyright 1995-2006 Mort Bay Consulting Pty Ltd
==============================================================

This product includes some software developed at The Apache Software
Foundation (http://www.apache.org/).

The javax.servlet package used by Jetty is copyright
Sun Microsystems, Inc and Apache Software Foundation. It is
distributed under the Common Development and Distribution License.
You can obtain a copy of the license at
https://glassfish.dev.java.net/public/CDDLv1.0.html.

The UnixCrypt.java code ~Implements the one way cryptography used by
Unix systems for simple password protection.  Copyright 1996 Aki Yoshida,
modified April 2001  by Iris Van den Broeke, Daniel Deville.

The default JSP implementation is provided by the Glassfish JSP engine
from project Glassfish http://glassfish.dev.java.net.  Copyright 2005
Sun Microsystems, Inc. and portions Copyright Apache Software Foundation.

Some portions of the code are Copyright:
  2006 Tim Vernum
  1999 Jason Gilbert.

The jboss integration module contains some LGPL code.

===============================================================
==     NOTICE File for JmDNS                                 ==
===============================================================

Java Multicast Domain Name Server (JmDNS)

This project was originally developed by Arthur van Hoff under the GNU
Lesser General Public License as jRendevous.  It was moved to Sourceforge
by Rick Blair and renamed to JmDNS with the Arthur's kind permission.

Currently it has  been re-released under the Apache License, Version 2.0.

Details of the Apache License, Version 2.0 can be found at:
http://www.apache.org/licenses/


For other details please see the README.txt file.
