Welcome to Apache ActiveMQ 
=======================================================================
Apache ActiveMQ is a high performance Apache 2.0 licensed Message 
Broker and JMS 1.1 implementation.

Getting Started
===============
To help you get started, try the following links:-

Getting Started
http://activemq.apache.org/getting-started.html

Building
http://activemq.apache.org/getting-started.html#GettingStarted-WindowsSourceInstallation
http://activemq.apache.org/getting-started.html#GettingStarted-UnixSourceInstallation

Examples
http://activemq.apache.org/examples.html

We welcome contributions of all kinds, for details of how you can help
http://activemq.apache.org/contributing.html

Please refer to the website for details of finding the issue tracker, 
email lists, wiki or IRC channel at http://activemq.apache.org/

Please help us make Apache ActiveMQ better - we appreciate any feedback 
you may have.

Enjoy!

Licensing
=======================================================================

   This software is licensed under the terms you may find in the file 
   named "LICENSE.txt" in this directory.

   This distribution includes cryptographic software.  The country in 
   which you currently reside may have restrictions on the import, 
   possession, use, and/or re-export to another country, of 
   encryption software.  BEFORE using any encryption software, please 
   check your country's laws, regulations and policies concerning the
   import, possession, or use, and re-export of encryption software, to 
   see if this is permitted.  See <http://www.wassenaar.org/> for more
   information.

   The U.S. Government Department of Commerce, Bureau of Industry and
   Security (BIS), has classified this software as Export Commodity 
   Control Number (ECCN) 5D002.C.1, which includes information security
   software using or performing cryptographic functions with asymmetric
   algorithms.  The form and manner of this Apache Software Foundation
   distribution makes it eligible for export under the License Exception
   ENC Technology Software Unrestricted (TSU) exception (see the BIS 
   Export Administration Regulations, Section 740.13) for both object 
   code and source code.

   The following provides more details on the included cryptographic
   software:
   
   ActiveMQ supports the use of SSL TCP connections when used with 
   with a JVM supporting the Java Cryptography extensions
   <http://java.sun.com/javase/technologies/security/>.  ActiveMQ does 
   not include these libraries itself, but is designed to use them.

