<?xml version="1.0" encoding="UTF-8"?>
<!--
 * 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.
-->
<project>
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.apache.tuscany.sca</groupId>
		<artifactId>tuscany-modules</artifactId>
		<version>2.0.1</version>
		<relativePath>../pom.xml</relativePath>
	</parent>

	<groupId>org.apache.tuscany.sca</groupId>
	<artifactId>tuscany-binding-comet-runtime</artifactId>
	<name>Apache Tuscany SCA Comet Binding Runtime</name>
	<packaging>jar</packaging>

	<dependencies>
		<dependency>
			<groupId>org.apache.tuscany.sca</groupId>
			<artifactId>tuscany-base-runtime</artifactId>
			<version>2.0.1</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>com.google.code.gson</groupId>
			<artifactId>gson</artifactId>
			<version>1.4</version>
		</dependency>
		<dependency>
			<groupId>org.apache.geronimo.specs</groupId>
			<artifactId>geronimo-servlet_3.0_spec</artifactId>
			<version>1.0</version>
			<scope>provided</scope>
		</dependency>

        <dependency>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty</artifactId>
            <version>6.1.26</version>
			<scope>test</scope>
        </dependency>

        <dependency>
           <groupId>org.slf4j</groupId>
           <artifactId>slf4j-log4j12</artifactId>
           <version>1.6.1</version>
           <scope>test</scope>
        </dependency>

        <dependency>
        	<groupId>org.atmosphere</groupId>
        	<artifactId>atmosphere-jersey</artifactId>
        	<version>0.7.2</version>
        	<scope>compile</scope>
        </dependency>
	</dependencies>

</project>
