Copyright 1999-2012 Alibaba Group.
 
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.

================================================================
Dependencies:

Spring:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://www.springsource.org

Javassist:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://www.jboss.org/javassist

Netty:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://netty.io

Mina:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://mina.apache.org

Grizzly:

  * LICENSE:
    * http://www.gnu.org/licenses/gpl-2.0.html (General Public License 2.0)
  * HOMEPAGE:
    * http://grizzly.java.net

HttpClient:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://hc.apache.org

Hessian:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://hessian.caucho.com

XStream:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://xstream.codehaus.org

FastJson:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://code.alibabatech.com/wiki/fastjson

Zookeeper:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://zookeeper.apache.org

Jedis:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://code.google.com/p/jedis

XMemcached:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://code.google.com/p/xmemcached

Jetty:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://jetty.mortbay.org

Thrift:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://thrift.apache.org

CXF:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://cxf.apache.org

ZKClient:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * https://github.com/sgroschupf/zkclient
	
Curator 

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * https://github.com/Netflix/curator

JFreeChart:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://www.jfree.org

HibernateValidator:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://www.hibernate.org/subprojects/validator.html

CommonsLogging:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://commons.apache.org/logging

SLF4J:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://www.slf4j.org

Log4j:

  * LICENSE:
    * http://www.apache.org/licenses/LICENSE-2.0 (Apache License 2.0)
  * HOMEPAGE:
    * http://log4j.apache.org
