You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ta...@apache.org on 2013/12/17 23:56:19 UTC
svn commit: r1551749 [2/4] - in
/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk: ./ keyfile/ src/ src/main/
src/main/csharp/ src/main/ndoc/ src/main/sandcastle/
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant-common.xml
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant-common.xml?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant-common.xml (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant-common.xml Tue Dec 17 22:56:18 2013
@@ -0,0 +1,633 @@
+<?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.
+-->
+<project xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">
+
+ <!-- ============================================================================================ -->
+ <!-- P R O P E R T Y D E F I N I T I O N S -->
+ <!-- ============================================================================================ -->
+
+ <!-- global project settings -->
+ <property name="project.cls.compliant" value="true" unless="${property::exists('project.cls.compliant')}" />
+ <property name="project.release.type" value="SNAPSHOT" unless="${property::exists('project.release.type')}" />
+ <property name="project.version.full" value="${project.version + if(project.release.type == 'snapshot', '-' + project.release.type, '')}" dynamic="true" />
+ <property name="project.startyear" value="2005" />
+ <property name="build.dir" value="${basedir}/build" />
+ <property name="doc.dir" value="${build.dir}/doc" />
+ <property name="lib.dir" value="${path::combine(basedir, 'lib')}" dynamic="true" />
+ <property name="lib.family.dir" value="${path::combine(lib.dir, framework::get-family(framework::get-target-framework()))}" dynamic="true" />
+ <property name="lib.framework.dir" value="${path::combine(lib.family.dir, version::to-string(framework::get-version(framework::get-target-framework())))}" dynamic="true" />
+ <property name="package.dir" value="${basedir}/package" />
+ <property name="src.package.name" value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-src.zip'}" />
+ <property name="bin.package.name" value="${project.name + '-' + project.version + if(project.release.type == 'SNAPSHOT', '-' + project.release.type, '') + '-bin.zip'}" />
+
+ <!-- default configuration -->
+ <property name="build.defines" value="" />
+ <property name="build.noskip" value="false" />
+ <property name="build.skip" value="false" />
+ <property name="build.skip.release" value="false" unless="${property::exists('build.skip.release')}" />
+ <property name="download.skip" value="false" unless="${property::exists('download.skip')}"/>
+ <property name="compile.skip" value="false" unless="${property::exists('compile.skip')}" />
+ <property name="current.build.config" value="${if(project.release.type == 'release', 'release', 'debug')}" overwrite="false" />
+ <property name="current.build.framework" value="${framework::get-target-framework()}" overwrite="false" />
+ <property name="current.build.defines" value="${build.defines}" />
+ <property name="build.framework.strings" value="net-2.0,net-3.5,net-4.0,mono-2.0,netcf-2.0,netcf-3.5" unless="${property::exists('build.framework.strings')}"/>
+ <property name="current.build.framework.assembly.dir" value="${framework::get-assembly-directory(framework::get-target-framework())}" dynamic="true" />
+
+ <property name="build.config.strings" value="${if(property::exists('configuration'), configuration, if(build.skip.release == 'true', 'debug', 'debug,release'))}" dynamic="true" />
+
+ <!-- Figure out the user's HOME directory -->
+ <property name="user.home" value="${environment::get-variable('HOME')}"
+ if="${environment::variable-exists('HOME') and platform::is-unix()}"
+ unless="${property::exists('user.home')}" />
+ <property name="user.home" value="${environment::get-variable('USERPROFILE')}"
+ if="${environment::variable-exists('USERPROFILE') and platform::is-windows()}"
+ unless="${property::exists('user.home')}" />
+ <fail message="The HOME environment variable is not defined. Please set it to your home directory."
+ unless="${property::exists('user.home')}" if="${platform::is-unix()}" />
+ <fail message="The USERPROFILE environment variable is not defined. Please set it to your home directory."
+ unless="${property::exists('user.home')}" if="${platform::is-windows()}" />
+
+ <!-- Figure out the NANT repositories -->
+ <property name="nant.remote.repo" value="${environment::get-variable('NANT_REMOTE_REPO')}"
+ if="${environment::variable-exists('NANT_REMOTE_REPO')}"
+ unless="${property::exists('nant.remote.repo')}" />
+ <property name="nant.local.repo" value="${environment::get-variable('NANT_REPO')}/local"
+ if="${environment::variable-exists('NANT_REPO')}"
+ unless="${property::exists('nant.local.repo')}" />
+ <property name="nant.local.repo" value="${user.home}/.nant/repository/local"
+ unless="${property::exists('nant.local.repo')}" />
+
+ <!-- Figure out the keyfile location -->
+ <property name="snk.file" value="${environment::get-variable('ACTIVEMQ_DOTNET_SNK')}"
+ if="${environment::variable-exists('ACTIVEMQ_DOTNET_SNK')}"
+ unless="${property::exists('snk.file')}" />
+ <property name="snk.file" value="${basedir}/keyfile/NMSKey.snk"
+ if="${not property::exists('snk.file')}" />
+
+ <!-- ============================================================================================ -->
+ <!-- I N I T I A L I Z A T I O N T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="init" description="Initializes build properties">
+ <!-- enabled the release or debug configuration -->
+ <call target="set-${current.build.config}-configuration" />
+
+ <!-- Check to see if our build setup for the target framework -->
+ <if test="${not(target::exists('set-'+current.build.framework+'-framework-configuration'))}">
+ <fail message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />
+ </if>
+ <call target="set-${current.build.framework}-framework-configuration" />
+
+ <!-- Check to see current platform supports the target framework -->
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="build.skip" value="false" />
+ </if>
+ <if test="${not framework::exists(current.build.framework)}">
+ <if test="${build.noskip}">
+ <fail message="${current.build.framework.name} is not available." />
+ </if>
+ <if test="${not(build.noskip)}">
+ <echo message="${current.build.framework.name} is not available. Build skipped." />
+ <property name="build.skip" value="true" />
+ </if>
+ </if>
+
+ <!-- Check to see if we should skip this build framework. -->
+ <if test="${not(build.skip)}">
+ <if test="${property::exists('build.'+current.build.framework+'.skip')}">
+ <property name="build.skip" value="true" />
+ <echo message="The '${current.build.framework}' framework is not supported by this version of ActiveMQ .NET" />
+ </if>
+ </if>
+
+ <property name="current.build.keysign" value="${current.build.framework.sign}" />
+ <property name="build.bin.dir" value="${build.dir}/${current.build.framework}/${current.build.config}" />
+ <if test="${not(build.skip)}">
+ <echo message="Doing ${if(current.build.keysign,'a signed','an unsigned')} ${current.build.config} build for the ${current.build.framework.name} framework" />
+ <mkdir dir="${build.bin.dir}" />
+ </if>
+ <call target="dependency-init" />
+ </target>
+
+ <!-- Generate four-digit build number -->
+ <target name="generate-build-number">
+ <if test="${not property::exists('project.version.numeric')}">
+ <script language="C#">
+ <imports>
+ <import namespace="System.Globalization" />
+ <import namespace="System.Threading" />
+ </imports>
+ <code>
+ <!-- Format for assembly revision is the number of days from the year the project 'started', property project.startyear. -->
+ <![CDATA[
+ public static void ScriptMain(Project project)
+ {
+ int startYear = Convert.ToInt32(project.Properties["project.startyear"]);
+ DateTime start = new DateTime(startYear, 1, 1);
+ TimeSpan ts = DateTime.Now - start;
+ project.Properties["project.version.numeric"] = project.Properties["project.version"].ToString() + "." + ts.Days.ToString();
+ }
+ ]]>
+ </code>
+ </script>
+ </if>
+ </target>
+
+ <!-- Generate assemblyinfo.cs files -->
+ <target name="generate-assemblyinfo" depends="generate-build-number" description="Generate the assembly info for the path in assemblyinfo.filename">
+ <asminfo output="${assemblyinfo.filename}" language="CSharp">
+ <imports>
+ <import namespace="System" />
+ <import namespace="System.Reflection" />
+ <import namespace="System.Runtime.InteropServices" />
+ </imports>
+ <attributes>
+ <attribute type="ComVisibleAttribute" value="false" />
+ <attribute type="CLSCompliantAttribute" value="${project.cls.compliant}" />
+ <attribute type="AssemblyTitleAttribute" value="${project.short_description}" />
+ <attribute type="AssemblyDescriptionAttribute" value="${project.description}" />
+ <attribute type="AssemblyConfigurationAttribute" value="${project.release.type}" />
+ <attribute type="AssemblyCompanyAttribute" value="http://activemq.apache.org/nms" />
+ <attribute type="AssemblyProductAttribute" value="${project.short_description}" />
+ <attribute type="AssemblyCopyrightAttribute" value="Copyright (C) ${project.startyear}-${datetime::get-year(datetime::now())} Apache Software Foundation" />
+ <attribute type="AssemblyTrademarkAttribute" value="" />
+ <attribute type="AssemblyCultureAttribute" value="" />
+ <attribute type="AssemblyVersionAttribute" value="${project.version.numeric}" />
+ <attribute type="AssemblyInformationalVersionAttribute" value="${project.version}" />
+ </attributes>
+ </asminfo>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- C O N F I G U R A T I O N T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="set-noskip-configuration" description="Disable skipping builds">
+ <property name="project.noskip" value="true" />
+ </target>
+
+ <target name="set-debug-configuration" description="Enabled 'debug' builds">
+ <property name="current.build.config" value="debug" />
+ <property name="current.build.config.debug" value="true" />
+ <property name="current.build.config.release" value="false" />
+ <property name="current.build.defines" value="${build.defines}DEBUG,TRACE," dynamic="true" />
+ <property name="csc.debug" value="Full" />
+ <property name="csc.optimize" value="false" />
+ </target>
+
+ <target name="set-release-configuration" description="Enabled 'release' builds">
+ <property name="current.build.config" value="release" />
+ <property name="current.build.config.release" value="true" />
+ <property name="current.build.config.debug" value="false" />
+ <property name="csc.debug" value="Full" />
+ <property name="csc.optimize" value="true" />
+ </target>
+
+ <target name="set-net-2.0-framework-configuration">
+ <property name="current.build.framework" value="net-2.0" />
+ <property name="current.build.framework.name" value=".NET 2.0" />
+ <property name="current.build.defines" value="${build.defines}NET,NET_2_0" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v2_0" />
+ <property name="link.sdkdoc.web" value="true" />
+ <!-- Use the .NET 3.5 compiler for improved language features. Still targets same runtime. -->
+ <if test="${framework::exists('net-3.5')}">
+ <property name="nant.settings.currentframework" value="net-3.5" />
+ </if>
+ </target>
+
+ <target name="set-net-3.5-framework-configuration">
+ <property name="current.build.framework" value="net-3.5" />
+ <property name="current.build.framework.name" value=".NET 3.5" />
+ <property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v6_1" />
+ <property name="link.sdkdoc.web" value="true" />
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="nant.settings.currentframework" value="${current.build.framework}" />
+ </if>
+ </target>
+
+ <target name="set-net-4.0-framework-configuration">
+ <property name="current.build.framework" value="net-4.0" />
+ <property name="current.build.framework.name" value=".NET 4.0" />
+ <property name="current.build.defines" value="${build.defines}NET,NET_2_0,NET_3_5,NET_4_0" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v7_0" />
+ <property name="link.sdkdoc.web" value="true" />
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="nant.settings.currentframework" value="${current.build.framework}" />
+ </if>
+ </target>
+
+ <target name="set-netcf-2.0-framework-configuration">
+ <property name="current.build.framework" value="netcf-2.0" />
+ <property name="current.build.framework.name" value=".NET Compact Framework 2.0" />
+ <property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_2_0" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v1_1" />
+ <property name="link.sdkdoc.web" value="true" />
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="nant.settings.currentframework" value="${current.build.framework}" />
+ </if>
+ </target>
+
+ <target name="set-netcf-3.5-framework-configuration">
+ <property name="current.build.framework" value="netcf-3.5" />
+ <property name="current.build.framework.name" value=".NET Compact Framework 3.5" />
+ <property name="current.build.defines" value="${build.defines}PocketPC,NETCF,NETCF_3_5" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v3_5" />
+ <property name="link.sdkdoc.web" value="true" />
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="nant.settings.currentframework" value="${current.build.framework}" />
+ </if>
+ </target>
+
+ <target name="set-mono-2.0-framework-configuration">
+ <property name="current.build.framework" value="mono-2.0" />
+ <property name="current.build.framework.name" value="Mono 2.0" />
+ <property name="current.build.defines" value="${build.defines}MONO,MONO_2_0" dynamic="true" />
+ <property name="current.build.framework.sign" value="true" />
+ <property name="link.sdkdoc.version" value="SDK_v1_1" />
+ <property name="link.sdkdoc.web" value="true" />
+ <if test="${framework::exists(current.build.framework)}">
+ <property name="nant.settings.currentframework" value="${current.build.framework}" />
+ </if>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- C O M P I L E T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="compile-all" description="Compile all build configurations for all runtime configurations">
+ <echo message="Compiling all build configurations for all runtime configurations." />
+ <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
+ <foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">
+ <call target="compile-target" />
+ </foreach>
+ </foreach>
+ </target>
+
+ <target name="compile-target" depends="init, download-vendor, conditional-compile" />
+
+ <target name="conditional-compile" depends="init" unless="${build.skip or compile.skip}"
+ description="Conditionaly compiles all the modules if build framework and type are supported">
+ <call target="compile" />
+ </target>
+
+ <target name="compile" description="Compile everything">
+ <call target="compile-main" cascade="false" />
+ <call target="compile-test" cascade="false" />
+ </target>
+
+ <target name="compile-main" depends="init" description="Build the main library">
+ <echo message="Building the ${project.name} library" />
+ <property name="assemblyinfo.filename" value="src/main/csharp/CommonAssemblyInfo.cs" />
+ <call target="generate-assemblyinfo" />
+
+ <csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"
+ define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
+ output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">
+ <nowarn>
+ <warning number="1591" /> <!-- do not report warnings for missing XML comments -->
+ </nowarn>
+ <sources failonempty="true">
+ <include name="src/main/csharp/**.cs" />
+ </sources>
+ <references refid="dependencies" />
+ </csc>
+ <csc if="${not current.build.keysign}" target="library"
+ define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
+ output="${build.bin.dir}/${project.name}.dll" doc="${build.bin.dir}/${project.name}.xml">
+ <nowarn>
+ <warning number="1591" /> <!-- do not report warnings for missing XML comments -->
+ </nowarn>
+ <sources failonempty="true">
+ <include name="src/main/csharp/**.cs" />
+ </sources>
+ <references refid="dependencies" />
+ </csc>
+ <call target="copy-content" />
+ </target>
+
+ <!-- Compile the nms-test module -->
+ <target name="compile-test" depends="compile-main" description="Build the test library">
+ <echo message="Building the ${project.name}.Test library" />
+ <property name="assemblyinfo.filename" value="src/test/csharp/CommonAssemblyInfo.cs" />
+ <call target="generate-assemblyinfo" />
+
+ <csc if="${current.build.keysign}" keyfile="${snk.file}" target="library"
+ define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
+ output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">
+ <nowarn>
+ <warning number="1591" /> <!-- do not report warnings for missing XML comments -->
+ <warning number="3016" /> <!-- do not report warnings for array parameters -->
+ </nowarn>
+ <sources failonempty="true">
+ <include name="src/test/csharp/**.cs" />
+ </sources>
+ <references refid="test.dependencies" />
+ </csc>
+ <csc if="${not current.build.keysign}" target="library"
+ define="${current.build.defines}" warnaserror="false" debug="${csc.debug}" optimize="${csc.optimize}"
+ output="${build.bin.dir}/${project.name}.Test.dll" doc="${build.bin.dir}/${project.name}.Test.xml">
+ <nowarn>
+ <warning number="1591" /> <!-- do not report warnings for missing XML comments -->
+ <warning number="3016" /> <!-- do not report warnings for array parameters -->
+ </nowarn>
+ <sources failonempty="true">
+ <include name="src/test/csharp/**.cs" />
+ </sources>
+ <references refid="test.dependencies" />
+ </csc>
+ <call target="copy-content" />
+ </target>
+
+ <target name="copy-content">
+ <foreach item="File" property="content.filename">
+ <in>
+ <items refid="content.filenames" />
+ </in>
+ <do>
+ <copy todir="${build.bin.dir}" file="${content.filename}" if="${not file::up-to-date(content.filename, '${build.bin.dir}/${content.filename}')}" />
+ </do>
+ </foreach>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- I N S T A L L T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="install-all" description="Install all build configurations for all runtime configurations">
+ <echo message="Installing all build configurations for all runtime configurations." />
+ <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
+ <foreach item="String" in="${build.config.strings}" delim="," property="current.build.config">
+ <call target="install" />
+ </foreach>
+ </foreach>
+ </target>
+
+ <!-- Install the modules to the local repo -->
+ <target name="install" depends="init, compile-target, conditional-install"
+ description="Install the artifacts into the nant repo" />
+
+ <target name="conditional-install" unless="${build.skip}"
+ description="Install the artifacts into the nant repo">
+ <property name="path" value="${project.group}/${project.name}/${project.version.full}/${current.build.framework}/${current.build.config}" />
+ <foreach item="File" property="install.filename">
+ <in>
+ <items refid="install.filenames" />
+ </in>
+ <do>
+ <property name="repo.task.artifact" value="${path}/${path::get-file-name(install.filename)}" />
+ <property name="repo.task.src" value="${install.filename}" />
+ <property name="repo.task.dest" value="${nant.local.repo}/${repo.task.artifact}" />
+ <mkdir dir="${directory::get-parent-directory(repo.task.dest)}" />
+ <copy file="${repo.task.src}" tofile="${repo.task.dest}" />
+ </do>
+ </foreach>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- R E P O D O W N L O A D T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="download-vendor-all" description="Download vendor files for all runtime configurations">
+ <echo message="Downloading vendor files for all runtime configurations." />
+ <property name="current.build.config" value="release" />
+ <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
+ <call target="download-vendor" />
+ </foreach>
+ </target>
+
+ <target name="download-vendor" depends="vendor-init, conditional-download"
+ description="Download the vendor artifacts from the nant repo" />
+
+ <target name="conditional-download" unless="${build.skip or download.skip}"
+ description="Download the artifacts from the nant repo">
+ <!-- Iterate over the defined vendor filesets. -->
+ <foreach item="String" in="${vendor.fileset.names}" delim="," property="current.vendor">
+ <property name="vendor.name" value="${property::get-value(current.vendor + '.name')}" />
+ <property name="vendor.group" value="${property::get-value(current.vendor + '.group')}" />
+ <property name="vendor.version" value="${property::get-value(current.vendor + '.version')}" />
+ <property name="vendor.filenames" value="${property::get-value(current.vendor + '.filenames')}" />
+ <property name="local.repo.vendor.path" value="${nant.local.repo}/${vendor.group}/${vendor.name}/${vendor.version}/${current.build.framework}/${current.build.config}" />
+ <property name="lib.path" value="lib/${vendor.name}/${current.build.framework}" />
+ <!--
+ Update the LIB folder with the latest version of the file. If there is a newer version
+ installed in the local repository, then that version will be copied into the LIB folder.
+ -->
+ <foreach item="String" in="${vendor.filenames}" delim="," property="repo.task.artifact">
+ <property name="lib.task.dest" value="${lib.path}/${repo.task.artifact}" />
+ <mkdir dir="${directory::get-parent-directory(lib.task.dest)}" />
+ <property name="repo.task.src" value="${local.repo.vendor.path}/${repo.task.artifact}" />
+ <copy file="${repo.task.src}" tofile="${lib.task.dest}" if="${file::exists(repo.task.src)}" />
+ <if test="${not file::exists(lib.task.dest)}">
+ <echo message="Required dependent assembly ${repo.task.artifact} from ${vendor.name} for ${current.build.framework} is not available. Build skipped." />
+ <property name="build.skip" value="true" />
+ </if>
+ </foreach>
+ </foreach>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- T E S T T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="test" depends="test-debug" description="Alias test target to test-debug" />
+
+ <target name="test-all" depends="test-debug, test-release" description="Test all build configurations for all runtime configurations" />
+
+ <target name="test-debug" depends="" description="Test debug build configurations for all runtime configurations">
+ <property name="current.build.config" value="debug" />
+ <call target="test-frameworks" />
+ </target>
+
+ <target name="test-release" depends="" description="Test release build configurations for all runtime configurations">
+ <property name="current.build.config" value="release" />
+ <call target="test-frameworks" />
+ </target>
+
+ <target name="test-frameworks">
+ <foreach item="String" in="${build.framework.strings}" delim="," property="current.build.framework">
+ <call target="init" />
+ <if test="${not build.skip}">
+ <exec program="nunit-console" failonerror="true" workingdir="build/${current.build.framework}/${current.build.config}">
+ <arg value="${NUnit.Projectfile}" />
+ <arg value="-labels" />
+ <arg value="-exclude=LongRunning" />
+ <arg value="-xml=Nunit.TestOutput.xml" />
+ </exec>
+ </if>
+ </foreach>
+ </target>
+
+ <!-- ============================================================================================ -->
+ <!-- M I S C E L L A N E O U S T A R G E T S -->
+ <!-- ============================================================================================ -->
+
+ <target name="build" depends="default" description="Build the project." />
+
+ <target name="rebuild" depends="clean,build" description="Rebuild the project." />
+
+ <target name="clean" description="Deletes build">
+ <if test="${target::exists('clean-init')}">
+ <call target="clean-init" />
+ </if>
+ <delete dir="build" if="${directory::exists('build')}" />
+ <delete dir="obj" if="${directory::exists('obj')}" />
+ <delete dir="package" if="${directory::exists('package')}" />
+ </target>
+
+ <target name="package" description="Bundle the source and binary distributions.">
+ <mkdir dir="${package.dir}"
+ if="${not directory::exists(package.dir)}" />
+ <zip zipfile="${package.dir}/${bin.package.name}">
+ <fileset refid="bin.package.contents"/>
+ </zip>
+ <zip zipfile="${package.dir}/${src.package.name}">
+ <fileset refid="src.package.contents"/>
+ </zip>
+ </target>
+
+ <target name="doc" depends="build">
+ <mkdir dir="${doc.dir}" />
+ <ndoc failonerror="false">
+ <assemblies basedir="${build.bin.dir}">
+ <include name="${project.name}.dll" />
+ </assemblies>
+ <summaries basedir="${basedir}/src/main/ndoc">
+ <include name="NamespaceSummary.xml" />
+ </summaries>
+ <documenters>
+ <documenter name="MSDN">
+ <property name="OutputDirectory" value="${doc.dir}" />
+ <property name="HtmlHelpName" value="${project.name}" />
+ <property name="HtmlHelpCompilerFilename" value="hhc.exe" />
+ <property name="IncludeFavorites" value="False" />
+ <property name="Title" value="${project.short_description}" />
+ <property name="SplitTOCs" value="False" />
+ <property name="DefaulTOC" value="" />
+ <!--
+ <property name="ShowVisualBasic" value="True" />
+ <property name="ShowMissingSummaries" value="True" />
+ <property name="ShowMissingRemarks" value="True" />
+ <property name="ShowMissingParams" value="True" />
+ <property name="ShowMissingReturns" value="True" />
+ <property name="ShowMissingValues" value="True" />
+ -->
+ <property name="DocumentInternals" value="False" />
+ <property name="DocumentProtected" value="True" />
+ <property name="DocumentPrivates" value="False" />
+ <property name="DocumentEmptyNamespaces" value="False" />
+ <property name="IncludeAssemblyVersion" value="True" />
+ <property name="CopyrightText" value="" />
+ <property name="CopyrightHref" value="" />
+ </documenter>
+ </documenters>
+ </ndoc>
+ </target>
+
+ <target name="sandcastle" depends="set-release-configuration, init, conditional-compile">
+ <!-- Directories -->
+ <property name="sandcastle.style" value="vs2005" unless="${property::exists('sandcastle.style')}" />
+ <property name="documentation.dir" value="${build.bin.dir}" />
+ <property name="bin.intern.dir" value="${build.bin.dir}" />
+ <property name="bin.extern.dir" value="${basedir}\lib\NUnit\net-2.0" />
+ <property name="sandcastle.dir" value="${environment::get-variable('DXROOT')}" />
+ <property name="sandcastle.workingdir" value="${build.dir}\doc\${sandcastle.style}" />
+ <property name="sandcastle.output.dir" value="${sandcastle.workingdir}\Output" />
+
+ <!-- Executables -->
+ <property name="sandcastle.mrefbuilder.exe" value="${sandcastle.dir}\productiontools\mrefbuilder.exe" />
+ <property name="sandcastle.buildassembler.exe" value="${sandcastle.dir}\productiontools\buildassembler.exe" />
+ <property name="sandcastle.xsltransform.exe" value="${sandcastle.dir}\productiontools\xsltransform.exe" />
+ <property name="sandcastle.productiontransforms.dir" value="${sandcastle.dir}\ProductionTransforms" />
+
+ <!-- Create or Cleanup Working Directory -->
+ <mkdir dir="${sandcastle.workingdir}"
+ if="${not directory::exists(sandcastle.workingdir)}" />
+ <delete>
+ <fileset basedir="${sandcastle.workingdir}">
+ <include name="**\*" />
+ </fileset>
+ </delete>
+
+ <!-- Copy configuration file, and hard code references -->
+ <copy file="${sandcastle.dir}/Presentation/${sandcastle.style}/Configuration/Sandcastle.config"
+ tofile="${sandcastle.workingdir}/Sandcastle.config">
+ <filterchain>
+ <replacestring from=""..\..\" to=""${sandcastle.dir}\" />
+ <replacestring from=""..\" to=""${sandcastle.dir}\Examples\" />
+ <replacestring from="".\comments.xml" to=""${documentation.dir}\${project.name}.xml" />
+ <replacestring from=""%DXROOT%\Presentation\${sandcastle.style}\content\feedback_content.xml"" to=""${basedir}/src/main/sandcastle/feedback_content.xml"" />
+ </filterchain>
+ </copy>
+
+ <!-- Run MRefBuilder (introspection on assemblies) to create basic Reflection XML -->
+ <exec program="${sandcastle.mrefbuilder.exe}" workingdir="${sandcastle.workingdir}">
+ <arg value="${bin.intern.dir}/${project.name}.dll" />
+ <arg value="/out:reflection.int.xml" />
+ <arg value="/dep:${bin.extern.dir}\*.dll" />
+ </exec>
+
+ <!-- Create Reflection XML -->
+ <exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">
+ <arg value="/xsl:"${sandcastle.productiontransforms.dir}\ApplyVSDocModel.xsl"" if="${sandcastle.style != 'prototype'}" />
+ <arg value="/xsl:"${sandcastle.productiontransforms.dir}\ApplyPrototypeDocModel.xsl"" if="${sandcastle.style == 'prototype'}" />
+ <arg value="/xsl:"${sandcastle.productiontransforms.dir}\AddFriendlyFilenames.xsl"" /> <!-- if="${sandcastle.style != 'prototype'}" /> -->
+ <arg value="/xsl:"${sandcastle.productiontransforms.dir}\AddGuidFilenames.xsl"" if="${sandcastle.style == 'disabled'}" />
+ <arg value="reflection.int.xml" />
+ <arg value="/out:reflection.xml" />
+ <arg value="/arg:IncludeAllMembersTopic=true" />
+ <arg value="/arg:IncludeInheritedOverloadTopics=true" />
+ </exec>
+
+ <!-- Create Manifest (list of Topics) -->
+ <exec program="${sandcastle.xsltransform.exe}" workingdir="${sandcastle.workingdir}">
+ <arg value="/xsl:"${sandcastle.productiontransforms.dir}\ReflectionToManifest.xsl"" />
+ <arg value="reflection.xml" />
+ <arg value="/out:manifest.xml" />
+ </exec>
+
+ <!-- Create Output Environment -->
+ <mkdir dir="${sandcastle.output.dir}" />
+ <mkdir dir="${sandcastle.output.dir}/html" />
+ <copy todir="${sandcastle.output.dir}">
+ <fileset basedir="${sandcastle.dir}/Presentation/${sandcastle.style}">
+ <include name="icons/*" />
+ <include name="media/*" />
+ <include name="scripts/*" />
+ <include name="styles/*" />
+ </fileset>
+ </copy>
+
+ <!-- Run BuildAssembler (create html topic files) -->
+ <exec program="${sandcastle.buildassembler.exe}" workingdir="${sandcastle.workingdir}">
+ <arg value="/config:Sandcastle.config" />
+ <arg value="manifest.xml" />
+ </exec>
+ </target>
+
+ <target name="sandcastle-all" description="Generate all formats of the Sandcastle documentation files.">
+ <foreach item="String" in="vs2005,prototype,hana" delim="," property="sandcastle.style">
+ <call target="sandcastle" />
+ </foreach>
+ </target>
+</project>
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant-common.xml
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant.build
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant.build?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant.build (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nant.build Tue Dec 17 22:56:18 2013
@@ -0,0 +1,162 @@
+<?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.
+-->
+<project name="Apache.NMS.AMQP" default="default" xmlns="http://nant.sourceforge.net/release/0.85/nant.xsd">
+ <!-- ============================================================================================ -->
+ <!-- I N I T I A L I Z A T I O N -->
+ <!-- ============================================================================================ -->
+ <property name="basedir" value="${project::get-base-directory()}" />
+ <property name="project.name" value="Apache.NMS.AMQP" />
+ <property name="project.group" value="org.apache.activemq" />
+ <property name="project.version" value="1.6.0" unless="${property::exists('project.version')}" />
+ <property name="project.release.type" value="SNAPSHOT" unless="${property::exists('project.release.type')}" />
+ <property name="project.short_description" value="Apache NMS for AMQP Class Library" />
+ <property name="project.description" value="Apache NMS for AMQP Class Library (.Net Messaging Library Implementation): An implementation of the NMS API for AMQP using Apache QPID and Proton" />
+
+ <!-- Native Qpid DLLs -->
+ <property name="boost_chrono" value="boost_chrono-${vcver}-mt${boostdebug}-1_47.dll" dynamic="true" />
+ <property name="boost_date_time" value="boost_date_time-${vcver}-mt${boostdebug}-1_47.dll" dynamic="true" />
+ <property name="boost_program_options" value="boost_program_options-${vcver}-mt${boostdebug}-1_47.dll" dynamic="true" />
+ <property name="boost_system" value="boost_system-${vcver}-mt${boostdebug}-1_47.dll" dynamic="true" />
+ <property name="boost_thread" value="boost_thread-${vcver}-mt${boostdebug}-1_47.dll" dynamic="true" />
+ <property name="qpidclient" value="qpidclient${debugsuffix}.dll" dynamic="true" />
+ <property name="qpidcommon" value="qpidcommon${debugsuffix}.dll" dynamic="true" />
+ <property name="qpidmessaging" value="qpidmessaging${debugsuffix}.dll" dynamic="true" />
+ <property name="qpid-proton" value="qpid-proton${debugsuffix}.dll" dynamic="true" />
+ <property name="qpidtypes" value="qpidtypes${debugsuffix}.dll" dynamic="true" />
+
+ <!-- Repository organized as: organization/module/version/plaform/artifact, platform might be something like 'all' or 'net-2.0/release' -->
+ <property name="nunit.dll" value="${basedir}/lib/NUnit/${current.build.framework}/nunit.framework.dll" dynamic="true" />
+ <property name="Apache.NMS.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.dll" dynamic="true" />
+ <property name="Apache.NMS.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.pdb" dynamic="true" />
+ <property name="Apache.NMS.Test.dll" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.Test.dll" dynamic="true" />
+ <property name="Apache.NMS.Test.pdb" value="${basedir}/lib/Apache.NMS/${current.build.framework}/Apache.NMS.Test.pdb" dynamic="true" />
+ <property name="Apache.Qpid.dll" value="${basedir}/lib/Apache.Qpid/${current.build.framework}/org.apache.qpid.messaging.dll" dynamic="true" />
+ <property name="NUnit.Projectfile" value="Apache.NMS.AMQP.Test.nunit" />
+
+ <!-- Skip certain frameworks, since Apache Qpid is not supported on those platforms. -->
+ <property name="build.netcf-2.0.skip" value="true" />
+ <property name="build.netcf-3.5.skip" value="true" />
+ <property name="build.mono-2.0.skip" value="true" />
+ <property name="build.net-3.5.skip" value="true" />
+ <property name="build.net-2.0.skip" value="true" />
+ <property name="build.framework.strings" value="net-4.0"/>
+
+ <target name="vendor-init" description="Initializes Vendor library from local repository.">
+ <!--
+ Vendor specific info. The prefix of 'vendor.apache.org' is taken from the property
+ 'vendor.fileset.names'. This comma-delimited list is iterated, and properties with
+ well-known suffixes are used to access and copy down vendor file dependencies.
+ -->
+ <property name="vendor.fileset.names" value="vendor.apache.org,vendor.nunit.org,vendor.qpid.apache.org" />
+
+ <!-- Property grouping for 'vendor.apache.org' -->
+ <property name="vendor.apache.org.name" value="Apache.NMS" />
+ <property name="vendor.apache.org.group" value="org.apache.activemq" />
+ <property name="vendor.apache.org.version" value="1.7.0" />
+ <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.pdb,Apache.NMS.Test.dll,Apache.NMS.Test.pdb" />
+
+ <!-- Property grouping for 'vendor.nunit.org' -->
+ <property name="vendor.nunit.org.name" value="NUnit" />
+ <property name="vendor.nunit.org.group" value="org.nunit" />
+ <property name="vendor.nunit.org.version" value="2.5.8" />
+ <property name="vendor.nunit.org.filenames" value="nunit.framework.dll" />
+
+ <!-- Property grouping for 'vendor.qpid.apache.org' -->
+ <property name="vendor.qpid.apache.org.name" value="Apache.Qpid" />
+ <property name="vendor.qpid.apache.org.group" value="org.apache.qpid" />
+ <property name="vendor.qpid.apache.org.version" value="0.27.0.16034" />
+ <property name="vcver" value="${if(current.build.framework == 'net-4.0', 'vc100', 'vc90')}" />
+ <property name="debugsuffix" value="${if(project.release.type == 'release', '', 'd')}" />
+ <property name="boostdebug" value="${if(project.release.type == 'release', '', '-gd')}" />
+ <echo message="Vendor-init current.build.framework = ${current.build.framework}, project.release.type = ${project.release.type}" />
+ <echo message="vcver = ${vcver}, debugsuffix = ${debugsuffix}, boostdebug = ${boostdebug}" />
+
+ <property name="vendor.qpid.apache.org.filenames" value="org.apache.qpid.messaging.dll,${boost_chrono},${boost_date_time},${boost_program_options},${boost_system},${boost_thread},${qpidclient},${qpidcommon},${qpidmessaging},${qpid-proton},${qpidtypes}" dynamic="true"/>
+ </target>
+
+ <target name="dependency-init" description="Initializes build dependencies">
+ <assemblyfileset failonempty="true" id="dependencies">
+ <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
+ <include name="${current.build.framework.assembly.dir}/System.dll" />
+ <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
+ <include name="${Apache.NMS.dll}" />
+ <include name="${Apache.Qpid.dll}" />
+ </assemblyfileset>
+
+ <assemblyfileset failonempty="true" id="test.dependencies">
+ <include name="${current.build.framework.assembly.dir}/mscorlib.dll" />
+ <include name="${current.build.framework.assembly.dir}/System.dll" />
+ <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
+ <include name="${Apache.NMS.dll}" />
+ <include name="${Apache.NMS.Test.dll}" />
+ <include name="${Apache.Qpid.dll}" />
+ <include name="${build.bin.dir}/${project.name}.dll" />
+ <include name="${nunit.dll}" />
+ </assemblyfileset>
+
+ <fileset id="content.filenames">
+ <include name="LICENSE.txt" />
+ <include name="NOTICE.txt" />
+ <include name="nmsprovider-*.config" />
+ <include name="${Apache.NMS.dll}" />
+ <include name="${Apache.NMS.pdb}" />
+ <include name="${Apache.NMS.Test.dll}" />
+ <include name="${Apache.NMS.Test.pdb}" />
+ <include name="${Apache.Qpid.dll}" />
+ <include name="${nunit.dll}" />
+ <include name="${NUnit.Projectfile}" />
+ </fileset>
+
+ <fileset id="install.filenames">
+ <include name="LICENSE.txt" />
+ <include name="NOTICE.txt" />
+ <include name="${build.bin.dir}/${project.name}.dll" />
+ <include name="${build.bin.dir}/${project.name}.pdb" />
+ </fileset>
+
+ </target>
+
+ <target name="default" depends="install-all" />
+
+ <zipfileset id="src.package.contents" basedir="${basedir}">
+ <include name="LICENSE.txt" />
+ <include name="NOTICE.txt" />
+ <include name="nant-common.xml" />
+ <include name="nant.build" />
+ <include name="nant.build" />
+ <include name="nmsprovider*.config" />
+ <include name="vs2008-*.csproj" />
+ <include name="vs2008-*.csproj" />
+ <include name="vs2008-*.sln" />
+ <include name="keyfile/*" />
+ <include name="src/**/*.cs" />
+ <exclude name="src/sandbox/**" />
+ </zipfileset>
+
+ <zipfileset id="bin.package.contents" basedir="${basedir}">
+ <include name="LICENSE.txt" />
+ <include name="NOTICE.txt" />
+ <include name="build/**/nmsprovider*" />
+ <include name="build/**/${project.name}*" />
+ <include name="lib/**/*" />
+ <exclude name="build/**/%temp%/**" />
+ </zipfileset>
+
+ <!-- Load the common target definitions -->
+ <include buildfile="${basedir}/nant-common.xml" />
+</project>
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-amqp.config
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-amqp.config?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-amqp.config (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-amqp.config Tue Dec 17 22:56:18 2013
@@ -0,0 +1,20 @@
+<?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.
+-->
+<configuration>
+ <provider assembly="Apache.NMS.AMQP" classFactory="Apache.NMS.AMQP.ConnectionFactory"/>
+</configuration>
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-amqp.config
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-test.config
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-test.config?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-test.config (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-test.config Tue Dec 17 22:56:18 2013
@@ -0,0 +1,35 @@
+<?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.
+-->
+<configuration>
+ <defaultURI value="amqp:tcp://${activemqhost}:61613"/>
+ <InvalidCredentials-BogusUser value="qpid:failover:tcp://${activemqhost}:61613">
+ <factoryParams>
+ <param type="string" value="InvalidCredentialsTestClient"/>
+ </factoryParams>
+ <userName value="BogusUser"/>
+ <passWord value="BogusPassword"/>
+ </InvalidCredentials-BogusUser>
+
+ <InvalidCredentials-AuthenticUser value="amqp:failover:tcp://${activemqhost}:61613">
+ <factoryParams>
+ <param type="string" value="InvalidCredentialsTestClient"/>
+ </factoryParams>
+ <userName value="system"/>
+ <passWord value="manager"/>
+ </InvalidCredentials-AuthenticUser>
+</configuration>
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/nmsprovider-test.config
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/package.ps1
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/package.ps1?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/package.ps1 (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/package.ps1 Tue Dec 17 22:56:18 2013
@@ -0,0 +1,69 @@
+# 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.
+
+$pkgname = "Apache.NMS.AMQP"
+$pkgver = "1.6-SNAPSHOT"
+$configurations = "release", "debug"
+$frameworks = "net-2.0", "net-4.0"
+
+write-progress "Creating package directory." "Initializing..."
+if(!(test-path package))
+{
+ md package
+}
+
+if(test-path build)
+{
+ pushd build
+
+ $pkgdir = "..\package"
+
+ write-progress "Packaging Application files." "Scanning..."
+ $zipfile = "$pkgdir\$pkgname-$pkgver-bin.zip"
+ zip -9 -u -j "$zipfile" ..\LICENSE.txt
+ zip -9 -u -j "$zipfile" ..\NOTICE.txt
+ foreach($configuration in $configurations)
+ {
+ foreach($framework in $frameworks)
+ {
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.dll"
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.xml"
+ zip -9 -u "$zipfile" "$framework\$configuration\nmsprovider*.config"
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.dll"
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.xml"
+ if($framework -ieq "mono-2.0")
+ {
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.dll.mdb"
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.dll.mdb"
+ }
+ else
+ {
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.pdb"
+ zip -9 -u "$zipfile" "$framework\$configuration\$pkgname.Test.pdb"
+ }
+ }
+ }
+
+ popd
+}
+
+write-progress "Packaging Source code files." "Scanning..."
+$pkgdir = "package"
+$zipfile = "$pkgdir\$pkgname-$pkgver-src.zip"
+
+zip -9 -u "$zipfile" LICENSE.txt NOTICE.txt nant-common.xml nant.build package.ps1 vs2008-amqp-test.csproj vs2008-amqp.csproj vs2008-amqp.sln vs2010-amqp-test.csproj vs2010-amqp.csproj vs2010-amqp.sln nmsprovider*.config
+zip -9 -u -r "$zipfile" keyfile src
+
+write-progress -Completed "Packaging" "Complete."
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BaseMessage.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BaseMessage.cs?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BaseMessage.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BaseMessage.cs Tue Dec 17 22:56:18 2013
@@ -0,0 +1,215 @@
+/*
+ * 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.
+ */
+
+using System;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.Amqp
+{
+ public delegate void AcknowledgeHandler(BaseMessage baseMessage);
+
+ public class BaseMessage : IMessage
+ {
+ private PrimitiveMap propertiesMap = new PrimitiveMap();
+ private IDestination destination;
+ private string correlationId;
+ private TimeSpan timeToLive;
+ private string messageId;
+ private MsgDeliveryMode deliveryMode;
+ private MsgPriority priority;
+ private Destination replyTo;
+ private byte[] content;
+ private string type;
+ private event AcknowledgeHandler Acknowledger;
+ private DateTime timestamp = new DateTime();
+ private bool readOnlyMsgBody = false;
+
+ public bool ReadOnlyBody
+ {
+ get { return readOnlyMsgBody; }
+ set { readOnlyMsgBody = value; }
+ }
+
+ // IMessage interface
+
+ public void Acknowledge()
+ {
+ if(null != Acknowledger)
+ {
+ Acknowledger(this);
+ }
+ }
+
+ /// <summary>
+ /// Clears out the message body. Clearing a message's body does not clear its header
+ /// values or property entries.
+ ///
+ /// If this message body was read-only, calling this method leaves the message body in
+ /// the same state as an empty body in a newly created message.
+ /// </summary>
+ public virtual void ClearBody()
+ {
+ this.Content = null;
+ this.readOnlyMsgBody = false;
+ }
+
+ /// <summary>
+ /// Clears a message's properties.
+ ///
+ /// The message's header fields and body are not cleared.
+ /// </summary>
+ public virtual void ClearProperties()
+ {
+ propertiesMap.Clear();
+ }
+
+ // Properties
+
+ public IPrimitiveMap Properties
+ {
+ get { return propertiesMap; }
+ }
+
+
+ // NMS headers
+
+ /// <summary>
+ /// The correlation ID used to correlate messages with conversations or long running business processes
+ /// </summary>
+ public string NMSCorrelationID
+ {
+ get { return correlationId; }
+ set { correlationId = value; }
+ }
+
+ /// <summary>
+ /// The destination of the message
+ /// </summary>
+ public IDestination NMSDestination
+ {
+ get { return destination; }
+ set { destination = value; }
+ }
+
+ /// <summary>
+ /// The time in milliseconds that this message should expire in
+ /// </summary>
+ public TimeSpan NMSTimeToLive
+ {
+ get { return timeToLive; }
+ set { timeToLive = value; }
+ }
+
+ /// <summary>
+ /// The message ID which is set by the provider
+ /// </summary>
+ public string NMSMessageId
+ {
+ get { return messageId; }
+ set { messageId = value; }
+ }
+
+ /// <summary>
+ /// Whether or not this message is persistent
+ /// </summary>
+ public MsgDeliveryMode NMSDeliveryMode
+ {
+ get { return deliveryMode; }
+ set { deliveryMode = value; }
+ }
+
+ /// <summary>
+ /// The Priority on this message
+ /// </summary>
+ public MsgPriority NMSPriority
+ {
+ get { return priority; }
+ set { priority = value; }
+ }
+
+ /// <summary>
+ /// Returns true if this message has been redelivered to this or another consumer before being acknowledged successfully.
+ /// </summary>
+ public bool NMSRedelivered
+ {
+ get { return false; }
+ set { }
+ }
+
+
+ /// <summary>
+ /// The destination that the consumer of this message should send replies to
+ /// </summary>
+ public IDestination NMSReplyTo
+ {
+ get { return replyTo; }
+ set { replyTo = (Destination) value; }
+ }
+
+
+ /// <summary>
+ /// The timestamp the broker added to the message
+ /// </summary>
+ public DateTime NMSTimestamp
+ {
+ get { return timestamp; }
+ set { timestamp = value; }
+ }
+
+ public byte[] Content
+ {
+ get { return content; }
+ set { this.content = value; }
+ }
+
+ /// <summary>
+ /// The type name of this message
+ /// </summary>
+ public string NMSType
+ {
+ get { return type; }
+ set { type = value; }
+ }
+
+
+ public object GetObjectProperty(string name)
+ {
+ return null;
+ }
+
+ public void SetObjectProperty(string name, object value)
+ {
+ }
+
+ protected void FailIfReadOnlyBody()
+ {
+ if(ReadOnlyBody == true)
+ {
+ throw new MessageNotWriteableException("Message is in Read-Only mode.");
+ }
+ }
+
+ protected void FailIfWriteOnlyBody()
+ {
+ if( ReadOnlyBody == false )
+ {
+ throw new MessageNotReadableException("Message is in Write-Only mode.");
+ }
+ }
+ }
+}
+
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BaseMessage.cs
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BytesMessage.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BytesMessage.cs?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BytesMessage.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BytesMessage.cs Tue Dec 17 22:56:18 2013
@@ -0,0 +1,511 @@
+/*
+ * 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.
+ */
+
+
+using Apache.NMS.Util;
+using System.IO;
+using System;
+namespace Apache.NMS.Amqp
+{
+ /// <summary>
+ ///
+ /// A BytesMessage object is used to send a message containing a stream of uninterpreted
+ /// bytes. It inherits from the Message interface and adds a bytes message body. The
+ /// receiver of the message supplies the interpretation of the bytes.
+ ///
+ /// This message type is for client encoding of existing message formats. If possible,
+ /// one of the other self-defining message types should be used instead.
+ ///
+ /// Although the NMS API allows the use of message properties with byte messages, they
+ /// are typically not used, since the inclusion of properties may affect the format.
+ ///
+ /// When the message is first created, and when ClearBody is called, the body of the
+ /// message is in write-only mode. After the first call to Reset has been made, the
+ /// message body is in read-only mode. After a message has been sent, the client that
+ /// sent it can retain and modify it without affecting the message that has been sent.
+ /// The same message object can be sent multiple times. When a message has been received,
+ /// the provider has called Reset so that the message body is in read-only mode for the
+ /// client.
+ ///
+ /// If ClearBody is called on a message in read-only mode, the message body is cleared and
+ /// the message is in write-only mode.
+ ///
+ /// If a client attempts to read a message in write-only mode, a MessageNotReadableException
+ /// is thrown.
+ ///
+ /// If a client attempts to write a message in read-only mode, a MessageNotWriteableException
+ /// is thrown.
+ /// </summary>
+ public class BytesMessage : BaseMessage, IBytesMessage
+ {
+ private EndianBinaryReader dataIn = null;
+ private EndianBinaryWriter dataOut = null;
+ private MemoryStream outputBuffer = null;
+
+ // Need this later when we add compression to store true content length.
+ private long length = 0;
+
+ public override void ClearBody()
+ {
+ base.ClearBody();
+ this.outputBuffer = null;
+ this.dataIn = null;
+ this.dataOut = null;
+ this.length = 0;
+ }
+
+ public long BodyLength
+ {
+ get
+ {
+ InitializeReading();
+ return this.length;
+ }
+ }
+
+ public byte ReadByte()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadByte();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteByte( byte value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public bool ReadBoolean()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadBoolean();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteBoolean( bool value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public char ReadChar()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadChar();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteChar( char value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public short ReadInt16()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadInt16();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteInt16( short value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public int ReadInt32()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadInt32();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteInt32( int value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public long ReadInt64()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadInt64();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteInt64( long value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public float ReadSingle()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadSingle();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteSingle( float value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public double ReadDouble()
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.ReadDouble();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteDouble( double value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public int ReadBytes( byte[] value )
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.Read( value, 0, value.Length );
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public int ReadBytes( byte[] value, int length )
+ {
+ InitializeReading();
+ try
+ {
+ return dataIn.Read( value, 0, length );
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteBytes( byte[] value )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value, 0, value.Length );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteBytes( byte[] value, int offset, int length )
+ {
+ InitializeWriting();
+ try
+ {
+ dataOut.Write( value, offset, length );
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public string ReadString()
+ {
+ InitializeReading();
+ try
+ {
+ // JMS, CMS and NMS all encode the String using a 16 bit size header.
+ return dataIn.ReadString16();
+ }
+ catch(EndOfStreamException e)
+ {
+ throw NMSExceptionSupport.CreateMessageEOFException(e);
+ }
+ catch(IOException e)
+ {
+ throw NMSExceptionSupport.CreateMessageFormatException(e);
+ }
+ }
+
+ public void WriteString( string value )
+ {
+ InitializeWriting();
+ try
+ {
+ // JMS, CMS and NMS all encode the String using a 16 bit size header.
+ dataOut.WriteString16(value);
+ }
+ catch(Exception e)
+ {
+ throw NMSExceptionSupport.Create(e);
+ }
+ }
+
+ public void WriteObject( System.Object value )
+ {
+ InitializeWriting();
+ if( value is System.Byte )
+ {
+ this.dataOut.Write( (byte) value );
+ }
+ else if( value is Char )
+ {
+ this.dataOut.Write( (char) value );
+ }
+ else if( value is Boolean )
+ {
+ this.dataOut.Write( (bool) value );
+ }
+ else if( value is Int16 )
+ {
+ this.dataOut.Write( (short) value );
+ }
+ else if( value is Int32 )
+ {
+ this.dataOut.Write( (int) value );
+ }
+ else if( value is Int64 )
+ {
+ this.dataOut.Write( (long) value );
+ }
+ else if( value is Single )
+ {
+ this.dataOut.Write( (float) value );
+ }
+ else if( value is Double )
+ {
+ this.dataOut.Write( (double) value );
+ }
+ else if( value is byte[] )
+ {
+ this.dataOut.Write( (byte[]) value );
+ }
+ else if( value is String )
+ {
+ this.dataOut.WriteString16( (string) value );
+ }
+ else
+ {
+ throw new MessageFormatException("Cannot write non-primitive type:" + value.GetType());
+ }
+ }
+
+ public void Reset()
+ {
+ StoreContent();
+ this.dataIn = null;
+ this.dataOut = null;
+ this.outputBuffer = null;
+ this.ReadOnlyBody = true;
+ }
+
+ private void InitializeReading()
+ {
+ FailIfWriteOnlyBody();
+ if(this.dataIn == null)
+ {
+ if(this.Content != null)
+ {
+ this.length = this.Content.Length;
+ }
+
+ // TODO - Add support for Message Compression.
+ MemoryStream bytesIn = new MemoryStream(this.Content, false);
+ dataIn = new EndianBinaryReader(bytesIn);
+ }
+ }
+
+ private void InitializeWriting()
+ {
+ FailIfReadOnlyBody();
+ if(this.dataOut == null)
+ {
+ // TODO - Add support for Message Compression.
+ this.outputBuffer = new MemoryStream();
+ this.dataOut = new EndianBinaryWriter(outputBuffer);
+ }
+ }
+
+ private void StoreContent()
+ {
+ if( dataOut != null)
+ {
+ dataOut.Close();
+ // TODO - Add support for Message Compression.
+
+ this.Content = outputBuffer.ToArray();
+ this.dataOut = null;
+ this.outputBuffer = null;
+ }
+ }
+ }
+}
+
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/BytesMessage.cs
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/CommonAssemblyInfo.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/CommonAssemblyInfo.cs?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/CommonAssemblyInfo.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/CommonAssemblyInfo.cs Tue Dec 17 22:56:18 2013
@@ -0,0 +1,28 @@
+using System;
+using System.Reflection;
+using System.Runtime.InteropServices;
+
+//------------------------------------------------------------------------------
+// <auto-generated>
+// This code was generated by a tool.
+// Runtime Version:4.0.30319.18408
+//
+// Changes to this file may cause incorrect behavior and will be lost if
+// the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+[assembly: ComVisibleAttribute(false)]
+[assembly: CLSCompliantAttribute(true)]
+[assembly: AssemblyTitleAttribute("Apache NMS for AMQP Class Library")]
+[assembly: AssemblyDescriptionAttribute("Apache NMS for AMQP Class Library (.Net Messaging Library Implementation): An imp" +
+ "lementation of the NMS API for AMQP using Apache QPID and Proton")]
+[assembly: AssemblyConfigurationAttribute("SNAPSHOT")]
+[assembly: AssemblyCompanyAttribute("http://activemq.apache.org/nms")]
+[assembly: AssemblyProductAttribute("Apache NMS for AMQP Class Library")]
+[assembly: AssemblyCopyrightAttribute("Copyright (C) 2005-2013 Apache Software Foundation")]
+[assembly: AssemblyTrademarkAttribute("")]
+[assembly: AssemblyCultureAttribute("")]
+[assembly: AssemblyVersionAttribute("1.6.0.3264")]
+[assembly: AssemblyInformationalVersionAttribute("1.6.0")]
+
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/CommonAssemblyInfo.cs
------------------------------------------------------------------------------
svn:eol-style = native
Added: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Connection.cs
URL: http://svn.apache.org/viewvc/activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Connection.cs?rev=1551749&view=auto
==============================================================================
--- activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Connection.cs (added)
+++ activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Connection.cs Tue Dec 17 22:56:18 2013
@@ -0,0 +1,363 @@
+/*
+ * 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.
+ */
+
+using System;
+using System.Collections;
+using System.Threading;
+using Apache.NMS.Util;
+using Org.Apache.Qpid.Messaging;
+
+namespace Apache.NMS.Amqp
+{
+ /// <summary>
+ /// Represents a NMS Qpid/Amqp connection.
+ /// </summary>
+ ///
+ public class Connection : IConnection
+ {
+ private static readonly TimeSpan InfiniteTimeSpan = TimeSpan.FromMilliseconds(Timeout.Infinite);
+
+ private AcknowledgementMode acknowledgementMode = AcknowledgementMode.AutoAcknowledge;
+ private IMessageConverter messageConverter = new DefaultMessageConverter();
+
+ private IRedeliveryPolicy redeliveryPolicy;
+ private ConnectionMetaData metaData = null;
+
+ private readonly object connectedLock = new object();
+ private readonly Atomic<bool> connected = new Atomic<bool>(false);
+ private readonly Atomic<bool> closed = new Atomic<bool>(false);
+ private readonly Atomic<bool> closing = new Atomic<bool>(false);
+
+ private readonly Atomic<bool> started = new Atomic<bool>(false);
+ private bool disposed = false;
+ private string clientId;
+ private Uri brokerUri;
+
+ private int sessionCounter = 0;
+ private readonly IList sessions = ArrayList.Synchronized(new ArrayList());
+
+ Org.Apache.Qpid.Messaging.Connection qpidConnection = null; // Don't create until Start()
+
+ /// <summary>
+ /// Creates new connection
+ /// </summary>
+ /// <param name="connectionUri"></param>
+ public Connection(Uri connectionUri)
+ {
+ this.brokerUri = connectionUri;
+ }
+
+ /// <summary>
+ /// Destroys connection
+ /// </summary>
+ ~Connection()
+ {
+ Dispose(false);
+ }
+
+ /// <summary>
+ /// Starts message delivery for this connection.
+ /// </summary>
+ public void Start()
+ {
+ CheckConnected();
+ if (started.CompareAndSet(false, true))
+ {
+ lock (sessions.SyncRoot)
+ {
+ foreach (Session session in sessions)
+ {
+ //session.Start();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// This property determines if the asynchronous message delivery of incoming
+ /// messages has been started for this connection.
+ /// </summary>
+ public bool IsStarted
+ {
+ get { return started.Value; }
+ }
+
+ /// <summary>
+ /// Temporarily stop asynchronous delivery of inbound messages for this connection.
+ /// The sending of outbound messages is unaffected.
+ /// </summary>
+ public void Stop()
+ {
+ if (started.CompareAndSet(true, false))
+ {
+ lock (sessions.SyncRoot)
+ {
+ foreach (Session session in sessions)
+ {
+ //session.Stop();
+ }
+ }
+ }
+ }
+
+ /// <summary>
+ /// Creates a new session to work on this connection
+ /// </summary>
+ public ISession CreateSession()
+ {
+ return CreateSession(acknowledgementMode);
+ }
+
+ /// <summary>
+ /// Creates a new session to work on this connection
+ /// </summary>
+ public ISession CreateSession(AcknowledgementMode mode)
+ {
+ CheckConnected();
+ return new Session(this, GetNextSessionId(), mode);
+ }
+
+ internal void AddSession(Session session)
+ {
+ if (!this.closing.Value)
+ {
+ sessions.Add(session);
+ }
+ }
+
+ internal void RemoveSession(Session session)
+ {
+ if (!this.closing.Value)
+ {
+ sessions.Remove(session);
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ protected void Dispose(bool disposing)
+ {
+ if (disposed)
+ {
+ return;
+ }
+
+ if (disposing)
+ {
+ // Dispose managed code here.
+ }
+
+ try
+ {
+ Close();
+ }
+ catch
+ {
+ // Ignore network errors.
+ }
+
+ disposed = true;
+ }
+
+ /// <summary>
+ /// Get/or set the broker Uri.
+ /// </summary>
+ public Uri BrokerUri
+ {
+ get { return brokerUri; }
+ set { brokerUri = value; }
+ }
+
+ /// <summary>
+ /// The default timeout for network requests.
+ /// </summary>
+ public TimeSpan RequestTimeout
+ {
+ get { return NMSConstants.defaultRequestTimeout; }
+ set { }
+ }
+
+ public AcknowledgementMode AcknowledgementMode
+ {
+ get { return acknowledgementMode; }
+ set { acknowledgementMode = value; }
+ }
+
+ public IMessageConverter MessageConverter
+ {
+ get { return messageConverter; }
+ set { messageConverter = value; }
+ }
+
+ public string ClientId
+ {
+ get { return clientId; }
+ set
+ {
+ if(connected.Value)
+ {
+ throw new NMSException("You cannot change the ClientId once the Connection is connected");
+ }
+ clientId = value;
+ }
+ }
+
+ /// <summary>
+ /// Get/or set the redelivery policy for this connection.
+ /// </summary>
+ public IRedeliveryPolicy RedeliveryPolicy
+ {
+ get { return this.redeliveryPolicy; }
+ set { this.redeliveryPolicy = value; }
+ }
+
+ private ConsumerTransformerDelegate consumerTransformer;
+ public ConsumerTransformerDelegate ConsumerTransformer
+ {
+ get { return this.consumerTransformer; }
+ set { this.consumerTransformer = value; }
+ }
+
+ private ProducerTransformerDelegate producerTransformer;
+ public ProducerTransformerDelegate ProducerTransformer
+ {
+ get { return this.producerTransformer; }
+ set { this.producerTransformer = value; }
+ }
+
+ /// <summary>
+ /// Gets the Meta Data for the NMS Connection instance.
+ /// </summary>
+ public IConnectionMetaData MetaData
+ {
+ get { return this.metaData ?? (this.metaData = new ConnectionMetaData()); }
+ }
+
+ /// <summary>
+ /// A delegate that can receive transport level exceptions.
+ /// </summary>
+ public event ExceptionListener ExceptionListener;
+
+ /// <summary>
+ /// An asynchronous listener that is notified when a Fault tolerant connection
+ /// has been interrupted.
+ /// </summary>
+ public event ConnectionInterruptedListener ConnectionInterruptedListener;
+
+ /// <summary>
+ /// An asynchronous listener that is notified when a Fault tolerant connection
+ /// has been resumed.
+ /// </summary>
+ public event ConnectionResumedListener ConnectionResumedListener;
+
+ /// <summary>
+ /// Check and ensure that the connection object is connected.
+ /// New connections are established for the first time.
+ /// Subsequent calls verify that connection is connected and is not closed or closing.
+ /// This function returns only if connection is successfully opened else
+ /// a ConnectionClosedException is thrown.
+ /// </summary>
+ internal void CheckConnected()
+ {
+ if (closed.Value || closing.Value)
+ {
+ throw new ConnectionClosedException();
+ }
+ if (connected.Value)
+ {
+ return;
+ }
+ DateTime timeoutTime = DateTime.Now + this.RequestTimeout;
+ int waitCount = 1;
+
+ while (!connected.Value && !closed.Value && !closing.Value)
+ {
+ if (Monitor.TryEnter(connectedLock))
+ {
+ try // strictly for Monitor unlock
+ {
+ // Create and open the Qpid connection
+ try
+ {
+ // TODO: embellish the brokerUri with other connection options
+ // Allocate a new Qpid connection
+ qpidConnection = new Org.Apache.Qpid.Messaging.Connection(brokerUri.ToString());
+
+ // Open the connection
+ qpidConnection.Open();
+
+ connected.Value = true;
+ }
+ catch (Org.Apache.Qpid.Messaging.QpidException e)
+ {
+ throw new ConnectionClosedException( e.Message );
+ }
+ }
+ finally
+ {
+ Monitor.Exit(connectedLock);
+ }
+ }
+
+ if (connected.Value || closed.Value || closing.Value
+ || (DateTime.Now > timeoutTime && this.RequestTimeout != InfiniteTimeSpan))
+ {
+ break;
+ }
+
+ // Back off from being overly aggressive. Having too many threads
+ // aggressively trying to connect to a down broker pegs the CPU.
+ Thread.Sleep(5 * (waitCount++));
+ }
+
+ if (!connected.Value)
+ {
+ throw new ConnectionClosedException();
+ }
+ }
+
+ public void Close()
+ {
+ Dispose();
+ }
+
+ public void PurgeTempDestinations()
+ {
+ }
+
+ public void HandleException(Exception e)
+ {
+ if(ExceptionListener != null && !this.closed.Value)
+ {
+ ExceptionListener(e);
+ }
+ else
+ {
+ Tracer.Error(e);
+ }
+ }
+
+ public int GetNextSessionId()
+ {
+ return Interlocked.Increment(ref sessionCounter);
+ }
+ }
+}
Propchange: activemq/activemq-dotnet/Apache.NMS.AMQP/trunk/src/main/csharp/Connection.cs
------------------------------------------------------------------------------
svn:eol-style = native