Merge pull request #9 from killnine/master
[AMQNET-565] - .net standard conversion, project reorganization
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..31429b5
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,21 @@
+################################################################################
+# This .gitignore file was automatically created by Microsoft(R) Visual Studio.
+################################################################################
+
+/.vs
+*.user
+/src/obj
+/test/bin/Debug/netcoreapp2.2
+/test/obj
+/src/bin/Debug/netstandard2.0
+
+bin/
+obj/
+build/
+.idea/
+*.csproj.user
+nms.sln.startup.json
+build/
+package/
+nms.sln.DotSettings.user
+tools/
\ No newline at end of file
diff --git a/Apache.NMS.ActiveMQ.Test.nunit b/Apache.NMS.ActiveMQ.Test.nunit
deleted file mode 100644
index cc5b019..0000000
--- a/Apache.NMS.ActiveMQ.Test.nunit
+++ /dev/null
@@ -1,7 +0,0 @@
-<NUnitProject>
- <Settings activeconfig="Default" />
- <Config name="Default" binpathtype="Auto">
- <assembly path="Apache.NMS.Test.dll" />
- <assembly path="Apache.NMS.ActiveMQ.Test.dll" />
- </Config>
-</NUnitProject>
\ No newline at end of file
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..9a60bf8
--- /dev/null
+++ b/README.md
@@ -0,0 +1,13 @@
+# Apache.NMS: The .NET Messaging Service Client API
+For more information see http://activemq.apache.org/nms
+
+### Building
+Visual Studio 2017 or above is required to build Apache.NMS. To build, launch Visual Studio with the nms.sln file and build the solution.
+
+### Testing
+Tests use the NUnit Framework.
+
+### Documentation
+NMS documentation is generated automatically using [DocFX](https://dotnet.github.io/docfx/) after build. Documentation files are available under folder:
+
+`<root_directory>\docs\_site`
\ No newline at end of file
diff --git a/README.txt b/README.txt
deleted file mode 100644
index 4e4e1df..0000000
--- a/README.txt
+++ /dev/null
@@ -1,58 +0,0 @@
-=======================================================================
-Welcome to:
- * Apache.NMS.ActiveMQ : Apache NMS for ActiveMQ Client Library
-=======================================================================
-
-For more information see http://activemq.apache.org/nms
-
-=======================================================================
-Building With NAnt 0.86 see http://nant.sourceforge.net/
-=======================================================================
-
-NAnt version 0.86 or newer is required to build Apache.NMS.ActiveMQ. Version 0.90
-or newer is highly recommended.
-To build the code using NAnt, run:
-
- nant
-
-To run the unit tests you need to run an Apache ActiveMQ Broker first then run:
-
- nant test
-
-The NMS documentation can be generated into three different formats using
-Microsoft's Sandcastle open source product. The Sandcastle Styles project
-was used to enhance the output generated from the current release of Sandcastle.
-
-The Sandcastle project is located here:
-
-http://sandcastle.codeplex.com/
-
-The Sandcastle Styles project is located here:
-
-http://sandcastlestyles.codeplex.com/
-
-To generate the documentation, run:
-
- nant sandcastle-all
-
-=======================================================================
-Building With Visual Studio 2008
-=======================================================================
-
-First build the project with nant, this will download and install
-all the 3rd party dependencies for you.
-
-Open the solution File. Build using "Build"->"Build Solution"
-menu option.
-
-The resulting DLLs will be in build\${framework}\debug or the
-build\${framework}\release directories depending on your settings
-under "Build"->"Configuration Manager"
-
-If you have the Resharper plugin installed in Visual Studio, you can run
-all the Unit Tests by using the "ReSharper"->"Unit Testing"->"Run All
-Tests from Solution" menu option. Please note that you must run an
-Apache ActiveMQ Broker before kicking off the unit tests. Otherwise,
-the standalone NUnit test runner can be used. NUnit version 2.5.8
-is required to build and run the unit tests.
-
diff --git a/RELEASE.md b/RELEASE.md
new file mode 100644
index 0000000..6600efd
--- /dev/null
+++ b/RELEASE.md
@@ -0,0 +1,21 @@
+replace <rc-version> in the below steps with your rc version, e.g. 1.8.0-rc3
+
+git clone https://gitbox.apache.org/repos/asf/activemq-nms-openwire.git
+
+ensure versions (csproj files, and package.ps1)
+
+build project
+
+git tag -m "tag <rc-version>" <rc-version> git push origin <rc-version>
+
+svn checkout rc dist dev https://dist.apache.org/repos/dist/dev/activemq/activemq-nms-openwire
+
+create folder for rc, e.g. mkdir <rc-version>
+
+copy all contents from package dir from project into the rc folder.
+
+sign the files, you will find a helper script "sign-release.sh", invoke it as
+
+./sign-release.sh <rc-version> <your-gpg-password>
+
+commit all files into the rc dist dev repo.
\ No newline at end of file
diff --git a/docs/.gitignore b/docs/.gitignore
new file mode 100644
index 0000000..6858b98
--- /dev/null
+++ b/docs/.gitignore
@@ -0,0 +1,10 @@
+###############
+# folder #
+###############
+/**/DROP/
+/**/TEMP/
+/**/packages/
+/**/bin/
+/**/obj/
+_site
+log.txt
diff --git a/docs/api/.gitignore b/docs/api/.gitignore
new file mode 100644
index 0000000..e8079a3
--- /dev/null
+++ b/docs/api/.gitignore
@@ -0,0 +1,5 @@
+###############
+# temp file #
+###############
+*.yml
+.manifest
diff --git a/docs/api/index.md b/docs/api/index.md
new file mode 100644
index 0000000..78dc9c0
--- /dev/null
+++ b/docs/api/index.md
@@ -0,0 +1,2 @@
+# PLACEHOLDER
+TODO: Add .NET projects to the *src* folder and run `docfx` to generate **REAL** *API Documentation*!
diff --git a/docs/articles/intro.md b/docs/articles/intro.md
new file mode 100644
index 0000000..c0478ce
--- /dev/null
+++ b/docs/articles/intro.md
@@ -0,0 +1 @@
+# Add your introductions here!
diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml
new file mode 100644
index 0000000..ff89ef1
--- /dev/null
+++ b/docs/articles/toc.yml
@@ -0,0 +1,2 @@
+- name: Introduction
+ href: intro.md
diff --git a/docs/docfx.json b/docs/docfx.json
new file mode 100644
index 0000000..7a6f8bd
--- /dev/null
+++ b/docs/docfx.json
@@ -0,0 +1,75 @@
+{
+ "metadata": [
+ {
+ "src": [
+ {
+ "files": [
+ "src/nms-openwire.csproj"
+ ],
+ "src": ".."
+ }
+ ],
+ "dest": "api",
+ "disableGitFeatures": false,
+ "disableDefaultFilter": false,
+ "properties": {
+ "TargetFramework": "netstandard2.0"
+ }
+ }
+ ],
+ "build": {
+ "content": [
+ {
+ "files": [
+ "api/**.yml",
+ "api/index.md"
+ ]
+ },
+ {
+ "files": [
+ "articles/**.md",
+ "articles/**/toc.yml",
+ "toc.yml",
+ "*.md"
+ ]
+ }
+ ],
+ "resource": [
+ {
+ "files": [
+ "images/**"
+ ]
+ }
+ ],
+ "overwrite": [
+ {
+ "files": [
+ "apidoc/**.md"
+ ],
+ "exclude": [
+ "obj/**",
+ "_site/**"
+ ]
+ }
+ ],
+ "globalMetadata": {
+ "_appTitle": "Apache NMS Openwire Documentation",
+ "_appLogoPath": "/images/activemq_logo_icon.png",
+ "_appFooter": "Copyright © 2005-2019 Apache Software Foundation project<br>Generated by <strong>DocFX</strong>",
+ "_enableSearch": "true"
+ },
+ "dest": "_site",
+ "globalMetadataFiles": [],
+ "fileMetadataFiles": [],
+ "template": [
+ "default",
+ "template"
+ ],
+ "postProcessors": [],
+ "markdownEngineName": "markdig",
+ "noLangKeyword": false,
+ "keepFileLink": false,
+ "cleanupCacheHistory": false,
+ "disableGitFeatures": false
+ }
+}
\ No newline at end of file
diff --git a/docs/images/activemq_logo_icon.png b/docs/images/activemq_logo_icon.png
new file mode 100644
index 0000000..c2b43f5
--- /dev/null
+++ b/docs/images/activemq_logo_icon.png
Binary files differ
diff --git a/docs/index.md b/docs/index.md
new file mode 100644
index 0000000..3ae2506
--- /dev/null
+++ b/docs/index.md
@@ -0,0 +1,4 @@
+# This is the **HOMEPAGE**.
+Refer to [Markdown](http://daringfireball.net/projects/markdown/) for how to write markdown files.
+## Quick Start Notes:
+1. Add images to the *images* folder if the file is referencing an image.
diff --git a/docs/nms-openwire-docs.csproj b/docs/nms-openwire-docs.csproj
new file mode 100644
index 0000000..f7c714f
--- /dev/null
+++ b/docs/nms-openwire-docs.csproj
@@ -0,0 +1,20 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFramework>netstandard2.0</TargetFramework>
+ <RootNamespace>nms_openwire_docs</RootNamespace>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <PackageReference Include="docfx.console" Version="2.43.2">
+ <PrivateAssets>all</PrivateAssets>
+ <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
+ </PackageReference>
+ </ItemGroup>
+
+ <ItemGroup>
+ <Folder Include="images\" />
+ <Folder Include="template\" />
+ </ItemGroup>
+
+</Project>
diff --git a/docs/template/partials/logo.tmpl.partial b/docs/template/partials/logo.tmpl.partial
new file mode 100644
index 0000000..f430ce2
--- /dev/null
+++ b/docs/template/partials/logo.tmpl.partial
@@ -0,0 +1,24 @@
+{{! 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.}}
+
+<style>
+img.activemq-logo {
+ height: 51px;
+}
+</style>
+
+<a class="navbar-brand" href="{{_rel}}index.html">
+ <img id="logo" class="svg activemq-logo" src="{{_rel}}{{{_appLogoPath}}}{{^_appLogoPath}}logo.svg{{/_appLogoPath}}" alt="{{_appName}}" >
+</a>
diff --git a/docs/toc.yml b/docs/toc.yml
new file mode 100644
index 0000000..59f8010
--- /dev/null
+++ b/docs/toc.yml
@@ -0,0 +1,5 @@
+- name: Articles
+ href: articles/
+- name: Api Documentation
+ href: api/
+ homepage: api/index.md
diff --git a/ext_bin/Apache.NMS.Test.dll b/ext_bin/Apache.NMS.Test.dll
new file mode 100644
index 0000000..5d8eee3
--- /dev/null
+++ b/ext_bin/Apache.NMS.Test.dll
Binary files differ
diff --git a/ext_bin/Apache.NMS.Test.pdb b/ext_bin/Apache.NMS.Test.pdb
new file mode 100644
index 0000000..57432f8
--- /dev/null
+++ b/ext_bin/Apache.NMS.Test.pdb
Binary files differ
diff --git a/nant-common.xml b/nant-common.xml
deleted file mode 100644
index 3e5a8fc..0000000
--- a/nant-common.xml
+++ /dev/null
@@ -1,658 +0,0 @@
-<?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="install.skip" value="false" unless="${property::exists('install.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,mono-4.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" />
- <if test="${framework::exists(current.build.framework)}">
- <property name="nant.settings.currentframework" value="${current.build.framework}" />
- </if>
- <!-- 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>
-
- <target name="set-mono-4.0-framework-configuration">
- <property name="current.build.framework" value="mono-4.0" />
- <property name="current.build.framework.name" value="Mono 4.0" />
- <property name="current.build.defines" value="${build.defines}MONO,MONO_4_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 or install.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=Manual,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>
- <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="clean-proj" />
- </foreach>
- </foreach>
- </target>
-
- <target name="clean-proj" depends="init" description="Deletes specific project build">
- <property name="clean.dir" value="build/${current.build.framework}/${current.build.config}" />
- <delete dir="${clean.dir}" if="${directory::exists(clean.dir)}" />
- <property name="clean.dir" value="package/${current.build.config}" />
- <delete dir="${clean.dir}" if="${directory::exists(clean.dir)}" />
- </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>
diff --git a/nant.build b/nant.build
deleted file mode 100644
index 16dd773..0000000
--- a/nant.build
+++ /dev/null
@@ -1,150 +0,0 @@
-<?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.ActiveMQ" 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.ActiveMQ" />
- <property name="project.group" value="org.apache.activemq" />
- <property name="project.version" value="1.8.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 ActiveMQ Class Library" />
- <property name="project.description" value="Apache NMS for ActiveMQ Class Library (.Net Messaging Library Implementation): An implementation of the NMS API for ActiveMQ" />
-
- <!-- Lib organized as: module/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="dotnetzip.dll" value="${basedir}/lib/DotNetZip/${current.build.framework}/Ionic.Zlib.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="NUnit.Projectfile" value="Apache.NMS.ActiveMQ.Test.nunit" />
-
- <!-- Skip certain frameworks, since ActiveMQ OpenWire is not supported on those platforms. -->
- <property name="build.netcf-2.0.skip" value="true" />
- <property name="build.netcf-3.5.skip" value="true" />
-
- <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.dotnetzip.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.8.0" />
- <if test="${current.build.framework == 'mono-2.0' or current.build.framework == 'mono-4.0'}">
- <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.dll.mdb,Apache.NMS.Test.dll,Apache.NMS.Test.dll.mdb" />
- </if>
- <if test="${not (current.build.framework == 'mono-2.0' or current.build.framework == 'mono-4.0')}">
- <property name="vendor.apache.org.filenames" value="Apache.NMS.dll,Apache.NMS.pdb,Apache.NMS.Test.dll,Apache.NMS.Test.pdb" />
- </if>
-
- <!-- 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.dotnetzip.org' -->
- <property name="vendor.dotnetzip.org.name" value="DotNetZip" />
- <property name="vendor.dotnetzip.org.group" value="org.dotnetzip" />
- <property name="vendor.dotnetzip.org.version" value="1.9.1.8" />
- <property name="vendor.dotnetzip.org.filenames" value="Ionic.Zlib.dll" />
- </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.Web.dll" />
- <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
- <include name="${current.build.framework.assembly.dir}/System.Transactions.dll" />
- <include name="${Apache.NMS.dll}" />
- <include name="${dotnetzip.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.Data.dll" />
- <include name="${current.build.framework.assembly.dir}/System.Xml.dll" />
- <include name="${current.build.framework.assembly.dir}/System.Transactions.dll" />
- <include name="${Apache.NMS.dll}" />
- <include name="${Apache.NMS.Test.dll}" />
- <include name="${build.bin.dir}/${project.name}.dll" />
- <include name="${nunit.dll}" />
- <include name="${dotnetzip.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="${dotnetzip.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" />
- <include name="${build.bin.dir}/${project.name}.dll.mdb" />
- </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>
diff --git a/nms-openwire.sln b/nms-openwire.sln
new file mode 100644
index 0000000..4748084
--- /dev/null
+++ b/nms-openwire.sln
@@ -0,0 +1,37 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio Version 16
+VisualStudioVersion = 16.0.29009.5
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire", "src\nms-openwire.csproj", "{039BDF35-7466-4AD6-A487-460DAA279CDE}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire-test", "test\nms-openwire-test.csproj", "{D4034BFD-21F1-4836-B0A0-1C4161AB0110}"
+EndProject
+Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "nms-openwire-docs", "docs\nms-openwire-docs.csproj", "{D0D49AC7-FCD9-4BE6-9A72-310852D473AC}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {039BDF35-7466-4AD6-A487-460DAA279CDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {039BDF35-7466-4AD6-A487-460DAA279CDE}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {039BDF35-7466-4AD6-A487-460DAA279CDE}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {039BDF35-7466-4AD6-A487-460DAA279CDE}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D4034BFD-21F1-4836-B0A0-1C4161AB0110}.Release|Any CPU.Build.0 = Release|Any CPU
+ {D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {D0D49AC7-FCD9-4BE6-9A72-310852D473AC}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+ GlobalSection(ExtensibilityGlobals) = postSolution
+ SolutionGuid = {52BEA1C3-F7CA-46DA-9FF3-8257391C258C}
+ EndGlobalSection
+EndGlobal
diff --git a/package.ps1 b/package.ps1
index 09be8bf..5427fbb 100644
--- a/package.ps1
+++ b/package.ps1
@@ -15,55 +15,72 @@
$pkgname = "Apache.NMS.ActiveMQ"
$pkgver = "1.8-SNAPSHOT"
-$configurations = "release", "debug"
-$frameworks = "mono-2.0", "net-2.0", "net-3.5", "net-4.0"
+$frameworks = "net35", "net40", "netstandard2.0"
write-progress "Creating package directory." "Initializing..."
-if(!(test-path package))
-{
- md package
+if (!(test-path package)) {
+ mkdir package
+}
+else {
+ # Clean package content if exists
+ Remove-Item package\* -Recurse
}
-if(test-path build)
-{
- pushd build
+if (test-path build) {
+ Push-Location 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
+ Compress-Archive -Path ..\LICENSE.txt, ..\NOTICE.txt -Update -DestinationPath $zipfile
+
+ # clean up temp
+ Remove-Item temp -Recurse -ErrorAction Ignore
+
+ foreach ($framework in $frameworks) {
+ Copy-Item $framework -Destination temp\$framework -Recurse
+
+ # clean up third party binaries
+ Get-ChildItem temp -File -Exclude "*Apache.NMS*" -Recurse | Remove-Item -Recurse
+
+ Compress-Archive -Path "temp\$framework" -Update -DestinationPath $zipfile
+ }
+
+ $nupkg = "$pkgname.$pkgver.nupkg"
+ $nupkgdestination = "$pkgdir\$nupkg"
+ Copy-Item -Path $nupkg -Destination $nupkgdestination
+
+ # clean up temp
+ Remove-Item temp -Recurse -ErrorAction Inquire
+
+ Pop-Location
}
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-activemq-test.csproj vs2008-activemq.csproj vs2008-activemq.sln nmsprovider*.config
-zip -9 -u -r "$zipfile" keyfile src
+# clean temp dir if exists
+Remove-Item temp -Recurse -ErrorAction Ignore
-write-progress -Completed "Packaging" "Complete."
+# copy files to temp dir
+Copy-Item src -Destination temp\src -Recurse
+Copy-Item test -Destination temp\test -Recurse
+
+# clean up debug artifacts if there are any
+Get-ChildItem temp -Include bin, obj -Recurse | Remove-Item -Recurse
+
+Compress-Archive -Path temp\*, LICENSE.txt, NOTICE.txt, keyfile, nms-openwire.sln, package.ps1 -Update -DestinationPath $zipfile
+
+write-progress "Removing temp files"
+Remove-Item temp -Recurse
+
+write-progress "Packaging Docs" "Scanning..."
+$pkgdir = "package"
+$zipfile = "$pkgdir\$pkgname-$pkgver-docs.zip"
+
+Compress-Archive -Path "docs\_site\*", "LICENSE.txt", "NOTICE.txt" -Update -DestinationPath $zipfile
+
+write-progress -Completed "Packaging" "Complete."
\ No newline at end of file
diff --git a/src/main/csharp/AdvisoryConsumer.cs b/src/AdvisoryConsumer.cs
similarity index 100%
rename from src/main/csharp/AdvisoryConsumer.cs
rename to src/AdvisoryConsumer.cs
diff --git a/src/main/csharp/BrokerException.cs b/src/BrokerException.cs
similarity index 100%
rename from src/main/csharp/BrokerException.cs
rename to src/BrokerException.cs
diff --git a/src/main/csharp/Commands/ActiveMQBlobMessage.cs b/src/Commands/ActiveMQBlobMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQBlobMessage.cs
rename to src/Commands/ActiveMQBlobMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQBytesMessage.cs b/src/Commands/ActiveMQBytesMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQBytesMessage.cs
rename to src/Commands/ActiveMQBytesMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQDestination.cs b/src/Commands/ActiveMQDestination.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQDestination.cs
rename to src/Commands/ActiveMQDestination.cs
diff --git a/src/main/csharp/Commands/ActiveMQMapMessage.cs b/src/Commands/ActiveMQMapMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQMapMessage.cs
rename to src/Commands/ActiveMQMapMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQMessage.cs b/src/Commands/ActiveMQMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQMessage.cs
rename to src/Commands/ActiveMQMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQObjectMessage.cs b/src/Commands/ActiveMQObjectMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQObjectMessage.cs
rename to src/Commands/ActiveMQObjectMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQQueue.cs b/src/Commands/ActiveMQQueue.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQQueue.cs
rename to src/Commands/ActiveMQQueue.cs
diff --git a/src/main/csharp/Commands/ActiveMQStreamMessage.cs b/src/Commands/ActiveMQStreamMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQStreamMessage.cs
rename to src/Commands/ActiveMQStreamMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempDestination.cs b/src/Commands/ActiveMQTempDestination.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempDestination.cs
rename to src/Commands/ActiveMQTempDestination.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempQueue.cs b/src/Commands/ActiveMQTempQueue.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempQueue.cs
rename to src/Commands/ActiveMQTempQueue.cs
diff --git a/src/main/csharp/Commands/ActiveMQTempTopic.cs b/src/Commands/ActiveMQTempTopic.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTempTopic.cs
rename to src/Commands/ActiveMQTempTopic.cs
diff --git a/src/main/csharp/Commands/ActiveMQTextMessage.cs b/src/Commands/ActiveMQTextMessage.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTextMessage.cs
rename to src/Commands/ActiveMQTextMessage.cs
diff --git a/src/main/csharp/Commands/ActiveMQTopic.cs b/src/Commands/ActiveMQTopic.cs
similarity index 100%
rename from src/main/csharp/Commands/ActiveMQTopic.cs
rename to src/Commands/ActiveMQTopic.cs
diff --git a/src/main/csharp/Commands/BaseCommand.cs b/src/Commands/BaseCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/BaseCommand.cs
rename to src/Commands/BaseCommand.cs
diff --git a/src/main/csharp/Commands/BaseDataStructure.cs b/src/Commands/BaseDataStructure.cs
similarity index 100%
rename from src/main/csharp/Commands/BaseDataStructure.cs
rename to src/Commands/BaseDataStructure.cs
diff --git a/src/main/csharp/Commands/BooleanExpression.cs b/src/Commands/BooleanExpression.cs
similarity index 100%
rename from src/main/csharp/Commands/BooleanExpression.cs
rename to src/Commands/BooleanExpression.cs
diff --git a/src/main/csharp/Commands/BrokerError.cs b/src/Commands/BrokerError.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/BrokerError.cs
rename to src/Commands/BrokerError.cs
diff --git a/src/main/csharp/Commands/BrokerId.cs b/src/Commands/BrokerId.cs
similarity index 100%
rename from src/main/csharp/Commands/BrokerId.cs
rename to src/Commands/BrokerId.cs
diff --git a/src/main/csharp/Commands/BrokerInfo.cs b/src/Commands/BrokerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/BrokerInfo.cs
rename to src/Commands/BrokerInfo.cs
diff --git a/src/main/csharp/Commands/Command.cs b/src/Commands/Command.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/Command.cs
rename to src/Commands/Command.cs
diff --git a/src/main/csharp/Commands/ConnectionControl.cs b/src/Commands/ConnectionControl.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionControl.cs
rename to src/Commands/ConnectionControl.cs
diff --git a/src/main/csharp/Commands/ConnectionError.cs b/src/Commands/ConnectionError.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionError.cs
rename to src/Commands/ConnectionError.cs
diff --git a/src/main/csharp/Commands/ConnectionId.cs b/src/Commands/ConnectionId.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionId.cs
rename to src/Commands/ConnectionId.cs
diff --git a/src/main/csharp/Commands/ConnectionInfo.cs b/src/Commands/ConnectionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ConnectionInfo.cs
rename to src/Commands/ConnectionInfo.cs
diff --git a/src/main/csharp/Commands/ConsumerControl.cs b/src/Commands/ConsumerControl.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerControl.cs
rename to src/Commands/ConsumerControl.cs
diff --git a/src/main/csharp/Commands/ConsumerId.cs b/src/Commands/ConsumerId.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerId.cs
rename to src/Commands/ConsumerId.cs
diff --git a/src/main/csharp/Commands/ConsumerInfo.cs b/src/Commands/ConsumerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ConsumerInfo.cs
rename to src/Commands/ConsumerInfo.cs
diff --git a/src/main/csharp/Commands/ControlCommand.cs b/src/Commands/ControlCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/ControlCommand.cs
rename to src/Commands/ControlCommand.cs
diff --git a/src/main/csharp/Commands/DataArrayResponse.cs b/src/Commands/DataArrayResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/DataArrayResponse.cs
rename to src/Commands/DataArrayResponse.cs
diff --git a/src/main/csharp/Commands/DataResponse.cs b/src/Commands/DataResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/DataResponse.cs
rename to src/Commands/DataResponse.cs
diff --git a/src/main/csharp/Commands/DataStructure.cs b/src/Commands/DataStructure.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/DataStructure.cs
rename to src/Commands/DataStructure.cs
diff --git a/src/main/csharp/Commands/DataStructureSupport.cs b/src/Commands/DataStructureSupport.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Commands/DataStructureSupport.cs
rename to src/Commands/DataStructureSupport.cs
diff --git a/src/main/csharp/Commands/DestinationInfo.cs b/src/Commands/DestinationInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/DestinationInfo.cs
rename to src/Commands/DestinationInfo.cs
diff --git a/src/main/csharp/Commands/DiscoveryEvent.cs b/src/Commands/DiscoveryEvent.cs
similarity index 100%
rename from src/main/csharp/Commands/DiscoveryEvent.cs
rename to src/Commands/DiscoveryEvent.cs
diff --git a/src/main/csharp/Commands/ExceptionResponse.cs b/src/Commands/ExceptionResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/ExceptionResponse.cs
rename to src/Commands/ExceptionResponse.cs
diff --git a/src/main/csharp/Commands/FlushCommand.cs b/src/Commands/FlushCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/FlushCommand.cs
rename to src/Commands/FlushCommand.cs
diff --git a/src/main/csharp/Commands/IntegerResponse.cs b/src/Commands/IntegerResponse.cs
similarity index 100%
rename from src/main/csharp/Commands/IntegerResponse.cs
rename to src/Commands/IntegerResponse.cs
diff --git a/src/main/csharp/Commands/JournalQueueAck.cs b/src/Commands/JournalQueueAck.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalQueueAck.cs
rename to src/Commands/JournalQueueAck.cs
diff --git a/src/main/csharp/Commands/JournalTopicAck.cs b/src/Commands/JournalTopicAck.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTopicAck.cs
rename to src/Commands/JournalTopicAck.cs
diff --git a/src/main/csharp/Commands/JournalTrace.cs b/src/Commands/JournalTrace.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTrace.cs
rename to src/Commands/JournalTrace.cs
diff --git a/src/main/csharp/Commands/JournalTransaction.cs b/src/Commands/JournalTransaction.cs
similarity index 100%
rename from src/main/csharp/Commands/JournalTransaction.cs
rename to src/Commands/JournalTransaction.cs
diff --git a/src/main/csharp/Commands/KeepAliveInfo.cs b/src/Commands/KeepAliveInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/KeepAliveInfo.cs
rename to src/Commands/KeepAliveInfo.cs
diff --git a/src/main/csharp/Commands/LastPartialCommand.cs b/src/Commands/LastPartialCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/LastPartialCommand.cs
rename to src/Commands/LastPartialCommand.cs
diff --git a/src/main/csharp/Commands/LocalTransactionId.cs b/src/Commands/LocalTransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/LocalTransactionId.cs
rename to src/Commands/LocalTransactionId.cs
diff --git a/src/main/csharp/Commands/MarshallAware.cs b/src/Commands/MarshallAware.cs
similarity index 100%
rename from src/main/csharp/Commands/MarshallAware.cs
rename to src/Commands/MarshallAware.cs
diff --git a/src/main/csharp/Commands/Message.cs b/src/Commands/Message.cs
similarity index 100%
rename from src/main/csharp/Commands/Message.cs
rename to src/Commands/Message.cs
diff --git a/src/main/csharp/Commands/MessageAck.cs b/src/Commands/MessageAck.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageAck.cs
rename to src/Commands/MessageAck.cs
diff --git a/src/main/csharp/Commands/MessageDispatch.cs b/src/Commands/MessageDispatch.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageDispatch.cs
rename to src/Commands/MessageDispatch.cs
diff --git a/src/main/csharp/Commands/MessageDispatchNotification.cs b/src/Commands/MessageDispatchNotification.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageDispatchNotification.cs
rename to src/Commands/MessageDispatchNotification.cs
diff --git a/src/main/csharp/Commands/MessageId.cs b/src/Commands/MessageId.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageId.cs
rename to src/Commands/MessageId.cs
diff --git a/src/main/csharp/Commands/MessagePull.cs b/src/Commands/MessagePull.cs
similarity index 100%
rename from src/main/csharp/Commands/MessagePull.cs
rename to src/Commands/MessagePull.cs
diff --git a/src/main/csharp/Commands/MessageReference.cs b/src/Commands/MessageReference.cs
similarity index 100%
rename from src/main/csharp/Commands/MessageReference.cs
rename to src/Commands/MessageReference.cs
diff --git a/src/main/csharp/Commands/NetworkBridgeFilter.cs b/src/Commands/NetworkBridgeFilter.cs
similarity index 100%
rename from src/main/csharp/Commands/NetworkBridgeFilter.cs
rename to src/Commands/NetworkBridgeFilter.cs
diff --git a/src/main/csharp/Commands/PartialCommand.cs b/src/Commands/PartialCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/PartialCommand.cs
rename to src/Commands/PartialCommand.cs
diff --git a/src/main/csharp/Commands/ProducerAck.cs b/src/Commands/ProducerAck.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerAck.cs
rename to src/Commands/ProducerAck.cs
diff --git a/src/main/csharp/Commands/ProducerId.cs b/src/Commands/ProducerId.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerId.cs
rename to src/Commands/ProducerId.cs
diff --git a/src/main/csharp/Commands/ProducerInfo.cs b/src/Commands/ProducerInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ProducerInfo.cs
rename to src/Commands/ProducerInfo.cs
diff --git a/src/main/csharp/Commands/RemoveInfo.cs b/src/Commands/RemoveInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/RemoveInfo.cs
rename to src/Commands/RemoveInfo.cs
diff --git a/src/main/csharp/Commands/RemoveSubscriptionInfo.cs b/src/Commands/RemoveSubscriptionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/RemoveSubscriptionInfo.cs
rename to src/Commands/RemoveSubscriptionInfo.cs
diff --git a/src/main/csharp/Commands/ReplayCommand.cs b/src/Commands/ReplayCommand.cs
similarity index 100%
rename from src/main/csharp/Commands/ReplayCommand.cs
rename to src/Commands/ReplayCommand.cs
diff --git a/src/main/csharp/Commands/Response.cs b/src/Commands/Response.cs
similarity index 100%
rename from src/main/csharp/Commands/Response.cs
rename to src/Commands/Response.cs
diff --git a/src/main/csharp/Commands/SessionId.cs b/src/Commands/SessionId.cs
similarity index 100%
rename from src/main/csharp/Commands/SessionId.cs
rename to src/Commands/SessionId.cs
diff --git a/src/main/csharp/Commands/SessionInfo.cs b/src/Commands/SessionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/SessionInfo.cs
rename to src/Commands/SessionInfo.cs
diff --git a/src/main/csharp/Commands/ShutdownInfo.cs b/src/Commands/ShutdownInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/ShutdownInfo.cs
rename to src/Commands/ShutdownInfo.cs
diff --git a/src/main/csharp/Commands/SubscriptionInfo.cs b/src/Commands/SubscriptionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/SubscriptionInfo.cs
rename to src/Commands/SubscriptionInfo.cs
diff --git a/src/main/csharp/Commands/TransactionId.cs b/src/Commands/TransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/TransactionId.cs
rename to src/Commands/TransactionId.cs
diff --git a/src/main/csharp/Commands/TransactionInfo.cs b/src/Commands/TransactionInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/TransactionInfo.cs
rename to src/Commands/TransactionInfo.cs
diff --git a/src/main/csharp/Commands/WireFormatInfo.cs b/src/Commands/WireFormatInfo.cs
similarity index 100%
rename from src/main/csharp/Commands/WireFormatInfo.cs
rename to src/Commands/WireFormatInfo.cs
diff --git a/src/main/csharp/Commands/XATransactionId.cs b/src/Commands/XATransactionId.cs
similarity index 100%
rename from src/main/csharp/Commands/XATransactionId.cs
rename to src/Commands/XATransactionId.cs
diff --git a/src/main/csharp/Commands/Xid.cs b/src/Commands/Xid.cs
similarity index 100%
rename from src/main/csharp/Commands/Xid.cs
rename to src/Commands/Xid.cs
diff --git a/src/main/csharp/CompressionPolicy.cs b/src/CompressionPolicy.cs
similarity index 72%
rename from src/main/csharp/CompressionPolicy.cs
rename to src/CompressionPolicy.cs
index 7c99ff5..68d864a 100644
--- a/src/main/csharp/CompressionPolicy.cs
+++ b/src/CompressionPolicy.cs
@@ -16,24 +16,20 @@
*/
using System.IO;
+using System.IO.Compression;
namespace Apache.NMS.ActiveMQ
{
- /// <summary>
- /// Default Compression policy for NMS.ActiveMQ uses the built in GZipStream
- /// to compress and decompress the message body. This is not compatible with
- /// compression used by ActiveMQ so users should use this with caution.
- /// </summary>
public class CompressionPolicy : ICompressionPolicy
{
public Stream CreateCompressionStream(Stream data)
{
- return new Ionic.Zlib.ZlibStream(data, Ionic.Zlib.CompressionMode.Compress);
+ return new GZipStream(data, CompressionMode.Compress);
}
public Stream CreateDecompressionStream(Stream data)
{
- return new Ionic.Zlib.ZlibStream(data, Ionic.Zlib.CompressionMode.Decompress);
+ return new GZipStream(data, CompressionMode.Decompress);
}
public object Clone()
diff --git a/src/main/csharp/Connection.cs b/src/Connection.cs
old mode 100755
new mode 100644
similarity index 99%
rename from src/main/csharp/Connection.cs
rename to src/Connection.cs
index 10832b3..adae483
--- a/src/main/csharp/Connection.cs
+++ b/src/Connection.cs
@@ -21,7 +21,6 @@
using System.Collections.Generic;
using System.Threading;
using System.Reflection;
-using System.Runtime.Remoting;
using Apache.NMS.ActiveMQ.Commands;
using Apache.NMS.ActiveMQ.Threads;
using Apache.NMS.ActiveMQ.Transport;
diff --git a/src/main/csharp/ConnectionClosedException.cs b/src/ConnectionClosedException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConnectionClosedException.cs
rename to src/ConnectionClosedException.cs
diff --git a/src/main/csharp/ConnectionFactory.cs b/src/ConnectionFactory.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConnectionFactory.cs
rename to src/ConnectionFactory.cs
diff --git a/src/main/csharp/ConnectionFailedException.cs b/src/ConnectionFailedException.cs
similarity index 100%
rename from src/main/csharp/ConnectionFailedException.cs
rename to src/ConnectionFailedException.cs
diff --git a/src/main/csharp/ConnectionMetaData.cs b/src/ConnectionMetaData.cs
similarity index 100%
rename from src/main/csharp/ConnectionMetaData.cs
rename to src/ConnectionMetaData.cs
diff --git a/src/main/csharp/ConsumerClosedException.cs b/src/ConsumerClosedException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/ConsumerClosedException.cs
rename to src/ConsumerClosedException.cs
diff --git a/src/main/csharp/DestinationFilter.cs b/src/DestinationFilter.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/DestinationFilter.cs
rename to src/DestinationFilter.cs
diff --git a/src/main/csharp/ICompressionPolicy.cs b/src/ICompressionPolicy.cs
similarity index 100%
rename from src/main/csharp/ICompressionPolicy.cs
rename to src/ICompressionPolicy.cs
diff --git a/src/main/csharp/IDispatcher.cs b/src/IDispatcher.cs
similarity index 100%
rename from src/main/csharp/IDispatcher.cs
rename to src/IDispatcher.cs
diff --git a/src/main/csharp/IOException.cs b/src/IOException.cs
similarity index 99%
rename from src/main/csharp/IOException.cs
rename to src/IOException.cs
index ae8c47a..4494a76 100644
--- a/src/main/csharp/IOException.cs
+++ b/src/IOException.cs
@@ -1,45 +1,45 @@
-/*
- * 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;
-
-namespace Apache.NMS.ActiveMQ
-{
-
- /// <summary>
- /// Exception thrown when an IO error occurs
- /// </summary>
- public class IOException : NMSException
- {
- public IOException()
- : base("IO Exception failed with missing exception log")
- {
- }
-
- public IOException(String msg)
- : base(msg)
- {
- }
-
- public IOException(String msg, Exception inner)
- : base(msg, inner)
- {
- }
- }
-}
-
-
+/*
+ * 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;
+
+namespace Apache.NMS.ActiveMQ
+{
+
+ /// <summary>
+ /// Exception thrown when an IO error occurs
+ /// </summary>
+ public class IOException : NMSException
+ {
+ public IOException()
+ : base("IO Exception failed with missing exception log")
+ {
+ }
+
+ public IOException(String msg)
+ : base(msg)
+ {
+ }
+
+ public IOException(String msg, Exception inner)
+ : base(msg, inner)
+ {
+ }
+ }
+}
+
+
diff --git a/src/main/csharp/ISynchronization.cs b/src/ISynchronization.cs
similarity index 100%
rename from src/main/csharp/ISynchronization.cs
rename to src/ISynchronization.cs
diff --git a/src/main/csharp/MessageConsumer.cs b/src/MessageConsumer.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/MessageConsumer.cs
rename to src/MessageConsumer.cs
diff --git a/src/main/csharp/MessageProducer.cs b/src/MessageProducer.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/MessageProducer.cs
rename to src/MessageProducer.cs
diff --git a/src/NMSKey.snk b/src/NMSKey.snk
new file mode 100644
index 0000000..fdd5b24
--- /dev/null
+++ b/src/NMSKey.snk
Binary files differ
diff --git a/src/main/csharp/NetTxConnection.cs b/src/NetTxConnection.cs
similarity index 100%
rename from src/main/csharp/NetTxConnection.cs
rename to src/NetTxConnection.cs
diff --git a/src/main/csharp/NetTxConnectionFactory.cs b/src/NetTxConnectionFactory.cs
similarity index 100%
rename from src/main/csharp/NetTxConnectionFactory.cs
rename to src/NetTxConnectionFactory.cs
diff --git a/src/main/csharp/NetTxMessageConsumer.cs b/src/NetTxMessageConsumer.cs
similarity index 99%
rename from src/main/csharp/NetTxMessageConsumer.cs
rename to src/NetTxMessageConsumer.cs
index f4ef109..e0b16e7 100644
--- a/src/main/csharp/NetTxMessageConsumer.cs
+++ b/src/NetTxMessageConsumer.cs
@@ -1,115 +1,115 @@
-/*
- * 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.Generic;
-using System.Text;
-using System.Transactions;
-using Apache.NMS.ActiveMQ.Commands;
-
-namespace Apache.NMS.ActiveMQ
-{
- public sealed class NetTxMessageConsumer : MessageConsumer
- {
- private readonly NetTxSession session;
- private readonly NetTxTransactionContext transactionContext;
-
- internal NetTxMessageConsumer(Session session, ConsumerId id, ActiveMQDestination destination,
- string name, string selector, int prefetch, int maxPendingMessageCount,
- bool noLocal, bool browser, bool dispatchAsync) :
- base(session, id, destination, name, selector, prefetch,
- maxPendingMessageCount, noLocal, browser, dispatchAsync)
- {
- this.session = session as NetTxSession;
- this.transactionContext = session.TransactionContext as NetTxTransactionContext;
- }
-
- public override void Close()
- {
- if (this.Closed)
- {
- return;
- }
-
- lock (this.transactionContext.SyncRoot)
- {
- if (this.session.IsTransacted || this.session.TransactionContext.InTransaction)
- {
- Tracer.DebugFormat("Consumer {0} Registering new ConsumerCloseSynchronization",
- this.ConsumerId);
- this.session.TransactionContext.AddSynchronization(
- new ConsumerCloseSynchronization(this));
- }
- else
- {
- Tracer.DebugFormat("Consumer {0} No Active TX closing normally.",
- this.ConsumerId);
- this.DoClose();
- }
- }
- }
-
- public override void BeforeMessageIsConsumed(MessageDispatch dispatch)
- {
- if (!IsAutoAcknowledgeBatch)
- {
- if (this.session.IsTransacted)
- {
- bool waitForDtcWaitHandle = false;
- lock (this.transactionContext.SyncRoot)
- {
- // In the case where the consumer is operating in concert with a
- // distributed TX manager we need to wait whenever the TX is being
- // controlled by the DTC as it completes all operations async and
- // we cannot start consumption again until all its tasks have completed.)
- var currentTransactionId = transactionContext.TransactionId as XATransactionId;
- string currentLocalTxId = currentTransactionId != null
- ? UTF8Encoding.UTF8.GetString(currentTransactionId.GlobalTransactionId)
- : "NONE";
-
- if (Transaction.Current != null)
- {
- waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
- this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending ||
- currentLocalTxId != Transaction.Current.TransactionInformation.LocalIdentifier;
- }
- else
- {
- waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
- this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending;
- }
-
- }
-
- //if session EnlistMsDtcNativeResource the transaction does not need to wait
- if (this.session.EnlistsMsDtcNativeResource)
- {
- waitForDtcWaitHandle = false;
- }
-
- if (waitForDtcWaitHandle)
- {
- this.transactionContext.DtcWaitHandle.WaitOne();
- }
- }
- }
-
- base.BeforeMessageIsConsumed(dispatch);
- }
-
- }
-}
+/*
+ * 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.Generic;
+using System.Text;
+using System.Transactions;
+using Apache.NMS.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ
+{
+ public sealed class NetTxMessageConsumer : MessageConsumer
+ {
+ private readonly NetTxSession session;
+ private readonly NetTxTransactionContext transactionContext;
+
+ internal NetTxMessageConsumer(Session session, ConsumerId id, ActiveMQDestination destination,
+ string name, string selector, int prefetch, int maxPendingMessageCount,
+ bool noLocal, bool browser, bool dispatchAsync) :
+ base(session, id, destination, name, selector, prefetch,
+ maxPendingMessageCount, noLocal, browser, dispatchAsync)
+ {
+ this.session = session as NetTxSession;
+ this.transactionContext = session.TransactionContext as NetTxTransactionContext;
+ }
+
+ public override void Close()
+ {
+ if (this.Closed)
+ {
+ return;
+ }
+
+ lock (this.transactionContext.SyncRoot)
+ {
+ if (this.session.IsTransacted || this.session.TransactionContext.InTransaction)
+ {
+ Tracer.DebugFormat("Consumer {0} Registering new ConsumerCloseSynchronization",
+ this.ConsumerId);
+ this.session.TransactionContext.AddSynchronization(
+ new ConsumerCloseSynchronization(this));
+ }
+ else
+ {
+ Tracer.DebugFormat("Consumer {0} No Active TX closing normally.",
+ this.ConsumerId);
+ this.DoClose();
+ }
+ }
+ }
+
+ public override void BeforeMessageIsConsumed(MessageDispatch dispatch)
+ {
+ if (!IsAutoAcknowledgeBatch)
+ {
+ if (this.session.IsTransacted)
+ {
+ bool waitForDtcWaitHandle = false;
+ lock (this.transactionContext.SyncRoot)
+ {
+ // In the case where the consumer is operating in concert with a
+ // distributed TX manager we need to wait whenever the TX is being
+ // controlled by the DTC as it completes all operations async and
+ // we cannot start consumption again until all its tasks have completed.)
+ var currentTransactionId = transactionContext.TransactionId as XATransactionId;
+ string currentLocalTxId = currentTransactionId != null
+ ? UTF8Encoding.UTF8.GetString(currentTransactionId.GlobalTransactionId)
+ : "NONE";
+
+ if (Transaction.Current != null)
+ {
+ waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
+ this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending ||
+ currentLocalTxId != Transaction.Current.TransactionInformation.LocalIdentifier;
+ }
+ else
+ {
+ waitForDtcWaitHandle = this.transactionContext.InNetTransaction &&
+ this.transactionContext.NetTxState == NetTxTransactionContext.TxState.Pending;
+ }
+
+ }
+
+ //if session EnlistMsDtcNativeResource the transaction does not need to wait
+ if (this.session.EnlistsMsDtcNativeResource)
+ {
+ waitForDtcWaitHandle = false;
+ }
+
+ if (waitForDtcWaitHandle)
+ {
+ this.transactionContext.DtcWaitHandle.WaitOne();
+ }
+ }
+ }
+
+ base.BeforeMessageIsConsumed(dispatch);
+ }
+
+ }
+}
diff --git a/src/main/csharp/NetTxRecoveryPolicy.cs b/src/NetTxRecoveryPolicy.cs
similarity index 100%
rename from src/main/csharp/NetTxRecoveryPolicy.cs
rename to src/NetTxRecoveryPolicy.cs
diff --git a/src/main/csharp/NetTxSession.cs b/src/NetTxSession.cs
similarity index 100%
rename from src/main/csharp/NetTxSession.cs
rename to src/NetTxSession.cs
diff --git a/src/main/csharp/NetTxTransactionContext.cs b/src/NetTxTransactionContext.cs
similarity index 99%
rename from src/main/csharp/NetTxTransactionContext.cs
rename to src/NetTxTransactionContext.cs
index f0eb5f6..92b2f71 100644
--- a/src/main/csharp/NetTxTransactionContext.cs
+++ b/src/NetTxTransactionContext.cs
@@ -301,7 +301,7 @@
Tracer.DebugFormat("Transaction[{0}] Commit failed with error: {1}",
this.TransactionId, ex.Message);
try
- {
+ {
this.connection.OnAsyncException(ex);
}
catch (Exception error)
@@ -362,7 +362,7 @@
AfterRollback();
enlistment.Done();
try
- {
+ {
this.connection.OnAsyncException(ex);
}
catch (Exception error)
@@ -422,7 +422,7 @@
this.TransactionId, ex.Message);
AfterRollback();
try
- {
+ {
this.connection.OnAsyncException(ex);
}
catch (Exception error)
diff --git a/src/main/csharp/OpenWire/BaseDataStreamMarshaller.cs b/src/OpenWire/BaseDataStreamMarshaller.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/BaseDataStreamMarshaller.cs
rename to src/OpenWire/BaseDataStreamMarshaller.cs
diff --git a/src/main/csharp/OpenWire/BooleanStream.cs b/src/OpenWire/BooleanStream.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/BooleanStream.cs
rename to src/OpenWire/BooleanStream.cs
diff --git a/src/main/csharp/OpenWire/IMarshallerFactory.cs b/src/OpenWire/IMarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/IMarshallerFactory.cs
rename to src/OpenWire/IMarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/OpenWireFormat.cs b/src/OpenWire/OpenWireFormat.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/OpenWire/OpenWireFormat.cs
rename to src/OpenWire/OpenWireFormat.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V1/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V1/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQQueueMarshaller.cs b/src/OpenWire/V1/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V1/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ActiveMQTopicMarshaller.cs b/src/OpenWire/V1/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V1/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BaseCommandMarshaller.cs b/src/OpenWire/V1/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BaseCommandMarshaller.cs
rename to src/OpenWire/V1/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BrokerIdMarshaller.cs b/src/OpenWire/V1/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BrokerIdMarshaller.cs
rename to src/OpenWire/V1/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/BrokerInfoMarshaller.cs b/src/OpenWire/V1/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/BrokerInfoMarshaller.cs
rename to src/OpenWire/V1/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionControlMarshaller.cs b/src/OpenWire/V1/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionControlMarshaller.cs
rename to src/OpenWire/V1/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionErrorMarshaller.cs b/src/OpenWire/V1/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V1/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionIdMarshaller.cs b/src/OpenWire/V1/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionIdMarshaller.cs
rename to src/OpenWire/V1/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConnectionInfoMarshaller.cs b/src/OpenWire/V1/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V1/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerControlMarshaller.cs b/src/OpenWire/V1/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerControlMarshaller.cs
rename to src/OpenWire/V1/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerIdMarshaller.cs b/src/OpenWire/V1/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerIdMarshaller.cs
rename to src/OpenWire/V1/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ConsumerInfoMarshaller.cs b/src/OpenWire/V1/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V1/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ControlCommandMarshaller.cs b/src/OpenWire/V1/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ControlCommandMarshaller.cs
rename to src/OpenWire/V1/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataArrayResponseMarshaller.cs b/src/OpenWire/V1/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V1/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataResponseMarshaller.cs b/src/OpenWire/V1/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataResponseMarshaller.cs
rename to src/OpenWire/V1/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DataStructureSupportMarshaller.cs b/src/OpenWire/V1/DataStructureSupportMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DataStructureSupportMarshaller.cs
rename to src/OpenWire/V1/DataStructureSupportMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DestinationInfoMarshaller.cs b/src/OpenWire/V1/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DestinationInfoMarshaller.cs
rename to src/OpenWire/V1/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/DiscoveryEventMarshaller.cs b/src/OpenWire/V1/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V1/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ExceptionResponseMarshaller.cs b/src/OpenWire/V1/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V1/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/FlushCommandMarshaller.cs b/src/OpenWire/V1/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/FlushCommandMarshaller.cs
rename to src/OpenWire/V1/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/IntegerResponseMarshaller.cs b/src/OpenWire/V1/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/IntegerResponseMarshaller.cs
rename to src/OpenWire/V1/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalQueueAckMarshaller.cs b/src/OpenWire/V1/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V1/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTopicAckMarshaller.cs b/src/OpenWire/V1/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V1/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTraceMarshaller.cs b/src/OpenWire/V1/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTraceMarshaller.cs
rename to src/OpenWire/V1/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/JournalTransactionMarshaller.cs b/src/OpenWire/V1/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/JournalTransactionMarshaller.cs
rename to src/OpenWire/V1/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/KeepAliveInfoMarshaller.cs b/src/OpenWire/V1/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V1/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/LastPartialCommandMarshaller.cs b/src/OpenWire/V1/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V1/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/LocalTransactionIdMarshaller.cs b/src/OpenWire/V1/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V1/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MarshallerFactory.cs b/src/OpenWire/V1/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MarshallerFactory.cs
rename to src/OpenWire/V1/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageAckMarshaller.cs b/src/OpenWire/V1/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageAckMarshaller.cs
rename to src/OpenWire/V1/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageDispatchMarshaller.cs b/src/OpenWire/V1/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageDispatchMarshaller.cs
rename to src/OpenWire/V1/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V1/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageIdMarshaller.cs b/src/OpenWire/V1/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageIdMarshaller.cs
rename to src/OpenWire/V1/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessageMarshaller.cs b/src/OpenWire/V1/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessageMarshaller.cs
rename to src/OpenWire/V1/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/MessagePullMarshaller.cs b/src/OpenWire/V1/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/MessagePullMarshaller.cs
rename to src/OpenWire/V1/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V1/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/PartialCommandMarshaller.cs b/src/OpenWire/V1/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/PartialCommandMarshaller.cs
rename to src/OpenWire/V1/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerAckMarshaller.cs b/src/OpenWire/V1/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerAckMarshaller.cs
rename to src/OpenWire/V1/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerIdMarshaller.cs b/src/OpenWire/V1/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerIdMarshaller.cs
rename to src/OpenWire/V1/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ProducerInfoMarshaller.cs b/src/OpenWire/V1/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ProducerInfoMarshaller.cs
rename to src/OpenWire/V1/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/RemoveInfoMarshaller.cs b/src/OpenWire/V1/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/RemoveInfoMarshaller.cs
rename to src/OpenWire/V1/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V1/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ReplayCommandMarshaller.cs b/src/OpenWire/V1/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ReplayCommandMarshaller.cs
rename to src/OpenWire/V1/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ResponseMarshaller.cs b/src/OpenWire/V1/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ResponseMarshaller.cs
rename to src/OpenWire/V1/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SessionIdMarshaller.cs b/src/OpenWire/V1/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SessionIdMarshaller.cs
rename to src/OpenWire/V1/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SessionInfoMarshaller.cs b/src/OpenWire/V1/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SessionInfoMarshaller.cs
rename to src/OpenWire/V1/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/ShutdownInfoMarshaller.cs b/src/OpenWire/V1/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V1/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/SubscriptionInfoMarshaller.cs b/src/OpenWire/V1/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V1/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/TransactionIdMarshaller.cs b/src/OpenWire/V1/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/TransactionIdMarshaller.cs
rename to src/OpenWire/V1/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/TransactionInfoMarshaller.cs b/src/OpenWire/V1/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/TransactionInfoMarshaller.cs
rename to src/OpenWire/V1/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/WireFormatInfoMarshaller.cs b/src/OpenWire/V1/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V1/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V1/XATransactionIdMarshaller.cs b/src/OpenWire/V1/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V1/XATransactionIdMarshaller.cs
rename to src/OpenWire/V1/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V10/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V10/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs b/src/OpenWire/V10/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V10/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs b/src/OpenWire/V10/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V10/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs b/src/OpenWire/V10/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BaseCommandMarshaller.cs
rename to src/OpenWire/V10/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs b/src/OpenWire/V10/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BrokerIdMarshaller.cs
rename to src/OpenWire/V10/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs b/src/OpenWire/V10/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/BrokerInfoMarshaller.cs
rename to src/OpenWire/V10/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs b/src/OpenWire/V10/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionControlMarshaller.cs
rename to src/OpenWire/V10/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs b/src/OpenWire/V10/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V10/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs b/src/OpenWire/V10/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionIdMarshaller.cs
rename to src/OpenWire/V10/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs b/src/OpenWire/V10/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V10/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs b/src/OpenWire/V10/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerControlMarshaller.cs
rename to src/OpenWire/V10/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs b/src/OpenWire/V10/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerIdMarshaller.cs
rename to src/OpenWire/V10/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs b/src/OpenWire/V10/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V10/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs b/src/OpenWire/V10/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ControlCommandMarshaller.cs
rename to src/OpenWire/V10/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs b/src/OpenWire/V10/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V10/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs b/src/OpenWire/V10/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DataResponseMarshaller.cs
rename to src/OpenWire/V10/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs b/src/OpenWire/V10/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DestinationInfoMarshaller.cs
rename to src/OpenWire/V10/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs b/src/OpenWire/V10/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V10/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs b/src/OpenWire/V10/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V10/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs b/src/OpenWire/V10/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/FlushCommandMarshaller.cs
rename to src/OpenWire/V10/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs b/src/OpenWire/V10/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/IntegerResponseMarshaller.cs
rename to src/OpenWire/V10/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs b/src/OpenWire/V10/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V10/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs b/src/OpenWire/V10/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V10/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs b/src/OpenWire/V10/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTraceMarshaller.cs
rename to src/OpenWire/V10/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs b/src/OpenWire/V10/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/JournalTransactionMarshaller.cs
rename to src/OpenWire/V10/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs b/src/OpenWire/V10/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V10/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs b/src/OpenWire/V10/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V10/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs b/src/OpenWire/V10/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V10/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MarshallerFactory.cs b/src/OpenWire/V10/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MarshallerFactory.cs
rename to src/OpenWire/V10/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs b/src/OpenWire/V10/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageAckMarshaller.cs
rename to src/OpenWire/V10/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs b/src/OpenWire/V10/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageDispatchMarshaller.cs
rename to src/OpenWire/V10/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V10/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs b/src/OpenWire/V10/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageIdMarshaller.cs
rename to src/OpenWire/V10/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessageMarshaller.cs b/src/OpenWire/V10/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessageMarshaller.cs
rename to src/OpenWire/V10/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs b/src/OpenWire/V10/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/MessagePullMarshaller.cs
rename to src/OpenWire/V10/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V10/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs b/src/OpenWire/V10/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/PartialCommandMarshaller.cs
rename to src/OpenWire/V10/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs b/src/OpenWire/V10/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerAckMarshaller.cs
rename to src/OpenWire/V10/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs b/src/OpenWire/V10/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerIdMarshaller.cs
rename to src/OpenWire/V10/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs b/src/OpenWire/V10/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ProducerInfoMarshaller.cs
rename to src/OpenWire/V10/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs b/src/OpenWire/V10/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/RemoveInfoMarshaller.cs
rename to src/OpenWire/V10/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V10/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs b/src/OpenWire/V10/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ReplayCommandMarshaller.cs
rename to src/OpenWire/V10/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ResponseMarshaller.cs b/src/OpenWire/V10/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ResponseMarshaller.cs
rename to src/OpenWire/V10/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs b/src/OpenWire/V10/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SessionIdMarshaller.cs
rename to src/OpenWire/V10/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs b/src/OpenWire/V10/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SessionInfoMarshaller.cs
rename to src/OpenWire/V10/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs b/src/OpenWire/V10/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V10/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs b/src/OpenWire/V10/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V10/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs b/src/OpenWire/V10/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/TransactionIdMarshaller.cs
rename to src/OpenWire/V10/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs b/src/OpenWire/V10/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/TransactionInfoMarshaller.cs
rename to src/OpenWire/V10/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs b/src/OpenWire/V10/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V10/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs b/src/OpenWire/V10/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V10/XATransactionIdMarshaller.cs
rename to src/OpenWire/V10/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V2/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V2/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQQueueMarshaller.cs b/src/OpenWire/V2/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V2/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ActiveMQTopicMarshaller.cs b/src/OpenWire/V2/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V2/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BaseCommandMarshaller.cs b/src/OpenWire/V2/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BaseCommandMarshaller.cs
rename to src/OpenWire/V2/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BrokerIdMarshaller.cs b/src/OpenWire/V2/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BrokerIdMarshaller.cs
rename to src/OpenWire/V2/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/BrokerInfoMarshaller.cs b/src/OpenWire/V2/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/BrokerInfoMarshaller.cs
rename to src/OpenWire/V2/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionControlMarshaller.cs b/src/OpenWire/V2/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionControlMarshaller.cs
rename to src/OpenWire/V2/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionErrorMarshaller.cs b/src/OpenWire/V2/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V2/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionIdMarshaller.cs b/src/OpenWire/V2/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionIdMarshaller.cs
rename to src/OpenWire/V2/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConnectionInfoMarshaller.cs b/src/OpenWire/V2/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V2/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerControlMarshaller.cs b/src/OpenWire/V2/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerControlMarshaller.cs
rename to src/OpenWire/V2/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerIdMarshaller.cs b/src/OpenWire/V2/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerIdMarshaller.cs
rename to src/OpenWire/V2/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ConsumerInfoMarshaller.cs b/src/OpenWire/V2/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V2/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ControlCommandMarshaller.cs b/src/OpenWire/V2/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ControlCommandMarshaller.cs
rename to src/OpenWire/V2/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DataArrayResponseMarshaller.cs b/src/OpenWire/V2/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V2/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DataResponseMarshaller.cs b/src/OpenWire/V2/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DataResponseMarshaller.cs
rename to src/OpenWire/V2/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DestinationInfoMarshaller.cs b/src/OpenWire/V2/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DestinationInfoMarshaller.cs
rename to src/OpenWire/V2/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/DiscoveryEventMarshaller.cs b/src/OpenWire/V2/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V2/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ExceptionResponseMarshaller.cs b/src/OpenWire/V2/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V2/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/FlushCommandMarshaller.cs b/src/OpenWire/V2/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/FlushCommandMarshaller.cs
rename to src/OpenWire/V2/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/IntegerResponseMarshaller.cs b/src/OpenWire/V2/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/IntegerResponseMarshaller.cs
rename to src/OpenWire/V2/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalQueueAckMarshaller.cs b/src/OpenWire/V2/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V2/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTopicAckMarshaller.cs b/src/OpenWire/V2/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V2/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTraceMarshaller.cs b/src/OpenWire/V2/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTraceMarshaller.cs
rename to src/OpenWire/V2/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/JournalTransactionMarshaller.cs b/src/OpenWire/V2/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/JournalTransactionMarshaller.cs
rename to src/OpenWire/V2/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/KeepAliveInfoMarshaller.cs b/src/OpenWire/V2/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V2/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/LastPartialCommandMarshaller.cs b/src/OpenWire/V2/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V2/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/LocalTransactionIdMarshaller.cs b/src/OpenWire/V2/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V2/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MarshallerFactory.cs b/src/OpenWire/V2/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MarshallerFactory.cs
rename to src/OpenWire/V2/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageAckMarshaller.cs b/src/OpenWire/V2/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageAckMarshaller.cs
rename to src/OpenWire/V2/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageDispatchMarshaller.cs b/src/OpenWire/V2/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageDispatchMarshaller.cs
rename to src/OpenWire/V2/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V2/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageIdMarshaller.cs b/src/OpenWire/V2/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageIdMarshaller.cs
rename to src/OpenWire/V2/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessageMarshaller.cs b/src/OpenWire/V2/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessageMarshaller.cs
rename to src/OpenWire/V2/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/MessagePullMarshaller.cs b/src/OpenWire/V2/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/MessagePullMarshaller.cs
rename to src/OpenWire/V2/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V2/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/PartialCommandMarshaller.cs b/src/OpenWire/V2/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/PartialCommandMarshaller.cs
rename to src/OpenWire/V2/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerAckMarshaller.cs b/src/OpenWire/V2/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerAckMarshaller.cs
rename to src/OpenWire/V2/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerIdMarshaller.cs b/src/OpenWire/V2/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerIdMarshaller.cs
rename to src/OpenWire/V2/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ProducerInfoMarshaller.cs b/src/OpenWire/V2/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ProducerInfoMarshaller.cs
rename to src/OpenWire/V2/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/RemoveInfoMarshaller.cs b/src/OpenWire/V2/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/RemoveInfoMarshaller.cs
rename to src/OpenWire/V2/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V2/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ReplayCommandMarshaller.cs b/src/OpenWire/V2/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ReplayCommandMarshaller.cs
rename to src/OpenWire/V2/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ResponseMarshaller.cs b/src/OpenWire/V2/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ResponseMarshaller.cs
rename to src/OpenWire/V2/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SessionIdMarshaller.cs b/src/OpenWire/V2/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SessionIdMarshaller.cs
rename to src/OpenWire/V2/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SessionInfoMarshaller.cs b/src/OpenWire/V2/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SessionInfoMarshaller.cs
rename to src/OpenWire/V2/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/ShutdownInfoMarshaller.cs b/src/OpenWire/V2/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V2/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/SubscriptionInfoMarshaller.cs b/src/OpenWire/V2/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V2/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/TransactionIdMarshaller.cs b/src/OpenWire/V2/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/TransactionIdMarshaller.cs
rename to src/OpenWire/V2/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/TransactionInfoMarshaller.cs b/src/OpenWire/V2/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/TransactionInfoMarshaller.cs
rename to src/OpenWire/V2/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/WireFormatInfoMarshaller.cs b/src/OpenWire/V2/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V2/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V2/XATransactionIdMarshaller.cs b/src/OpenWire/V2/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V2/XATransactionIdMarshaller.cs
rename to src/OpenWire/V2/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V3/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V3/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQQueueMarshaller.cs b/src/OpenWire/V3/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V3/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ActiveMQTopicMarshaller.cs b/src/OpenWire/V3/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V3/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BaseCommandMarshaller.cs b/src/OpenWire/V3/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BaseCommandMarshaller.cs
rename to src/OpenWire/V3/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BrokerIdMarshaller.cs b/src/OpenWire/V3/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BrokerIdMarshaller.cs
rename to src/OpenWire/V3/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/BrokerInfoMarshaller.cs b/src/OpenWire/V3/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/BrokerInfoMarshaller.cs
rename to src/OpenWire/V3/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionControlMarshaller.cs b/src/OpenWire/V3/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionControlMarshaller.cs
rename to src/OpenWire/V3/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionErrorMarshaller.cs b/src/OpenWire/V3/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V3/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionIdMarshaller.cs b/src/OpenWire/V3/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionIdMarshaller.cs
rename to src/OpenWire/V3/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConnectionInfoMarshaller.cs b/src/OpenWire/V3/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V3/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerControlMarshaller.cs b/src/OpenWire/V3/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerControlMarshaller.cs
rename to src/OpenWire/V3/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerIdMarshaller.cs b/src/OpenWire/V3/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerIdMarshaller.cs
rename to src/OpenWire/V3/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ConsumerInfoMarshaller.cs b/src/OpenWire/V3/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V3/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ControlCommandMarshaller.cs b/src/OpenWire/V3/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ControlCommandMarshaller.cs
rename to src/OpenWire/V3/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DataArrayResponseMarshaller.cs b/src/OpenWire/V3/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V3/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DataResponseMarshaller.cs b/src/OpenWire/V3/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DataResponseMarshaller.cs
rename to src/OpenWire/V3/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DestinationInfoMarshaller.cs b/src/OpenWire/V3/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DestinationInfoMarshaller.cs
rename to src/OpenWire/V3/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/DiscoveryEventMarshaller.cs b/src/OpenWire/V3/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V3/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ExceptionResponseMarshaller.cs b/src/OpenWire/V3/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V3/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/FlushCommandMarshaller.cs b/src/OpenWire/V3/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/FlushCommandMarshaller.cs
rename to src/OpenWire/V3/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/IntegerResponseMarshaller.cs b/src/OpenWire/V3/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/IntegerResponseMarshaller.cs
rename to src/OpenWire/V3/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalQueueAckMarshaller.cs b/src/OpenWire/V3/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V3/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTopicAckMarshaller.cs b/src/OpenWire/V3/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V3/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTraceMarshaller.cs b/src/OpenWire/V3/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTraceMarshaller.cs
rename to src/OpenWire/V3/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/JournalTransactionMarshaller.cs b/src/OpenWire/V3/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/JournalTransactionMarshaller.cs
rename to src/OpenWire/V3/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/KeepAliveInfoMarshaller.cs b/src/OpenWire/V3/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V3/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/LastPartialCommandMarshaller.cs b/src/OpenWire/V3/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V3/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/LocalTransactionIdMarshaller.cs b/src/OpenWire/V3/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V3/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MarshallerFactory.cs b/src/OpenWire/V3/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MarshallerFactory.cs
rename to src/OpenWire/V3/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageAckMarshaller.cs b/src/OpenWire/V3/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageAckMarshaller.cs
rename to src/OpenWire/V3/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageDispatchMarshaller.cs b/src/OpenWire/V3/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageDispatchMarshaller.cs
rename to src/OpenWire/V3/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V3/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageIdMarshaller.cs b/src/OpenWire/V3/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageIdMarshaller.cs
rename to src/OpenWire/V3/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessageMarshaller.cs b/src/OpenWire/V3/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessageMarshaller.cs
rename to src/OpenWire/V3/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/MessagePullMarshaller.cs b/src/OpenWire/V3/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/MessagePullMarshaller.cs
rename to src/OpenWire/V3/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V3/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/PartialCommandMarshaller.cs b/src/OpenWire/V3/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/PartialCommandMarshaller.cs
rename to src/OpenWire/V3/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerAckMarshaller.cs b/src/OpenWire/V3/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerAckMarshaller.cs
rename to src/OpenWire/V3/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerIdMarshaller.cs b/src/OpenWire/V3/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerIdMarshaller.cs
rename to src/OpenWire/V3/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ProducerInfoMarshaller.cs b/src/OpenWire/V3/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ProducerInfoMarshaller.cs
rename to src/OpenWire/V3/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/RemoveInfoMarshaller.cs b/src/OpenWire/V3/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/RemoveInfoMarshaller.cs
rename to src/OpenWire/V3/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V3/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ReplayCommandMarshaller.cs b/src/OpenWire/V3/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ReplayCommandMarshaller.cs
rename to src/OpenWire/V3/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ResponseMarshaller.cs b/src/OpenWire/V3/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ResponseMarshaller.cs
rename to src/OpenWire/V3/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SessionIdMarshaller.cs b/src/OpenWire/V3/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SessionIdMarshaller.cs
rename to src/OpenWire/V3/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SessionInfoMarshaller.cs b/src/OpenWire/V3/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SessionInfoMarshaller.cs
rename to src/OpenWire/V3/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/ShutdownInfoMarshaller.cs b/src/OpenWire/V3/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V3/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/SubscriptionInfoMarshaller.cs b/src/OpenWire/V3/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V3/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/TransactionIdMarshaller.cs b/src/OpenWire/V3/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/TransactionIdMarshaller.cs
rename to src/OpenWire/V3/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/TransactionInfoMarshaller.cs b/src/OpenWire/V3/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/TransactionInfoMarshaller.cs
rename to src/OpenWire/V3/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/WireFormatInfoMarshaller.cs b/src/OpenWire/V3/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V3/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V3/XATransactionIdMarshaller.cs b/src/OpenWire/V3/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V3/XATransactionIdMarshaller.cs
rename to src/OpenWire/V3/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V4/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V4/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQQueueMarshaller.cs b/src/OpenWire/V4/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V4/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ActiveMQTopicMarshaller.cs b/src/OpenWire/V4/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V4/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BaseCommandMarshaller.cs b/src/OpenWire/V4/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BaseCommandMarshaller.cs
rename to src/OpenWire/V4/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BrokerIdMarshaller.cs b/src/OpenWire/V4/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BrokerIdMarshaller.cs
rename to src/OpenWire/V4/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/BrokerInfoMarshaller.cs b/src/OpenWire/V4/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/BrokerInfoMarshaller.cs
rename to src/OpenWire/V4/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionControlMarshaller.cs b/src/OpenWire/V4/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionControlMarshaller.cs
rename to src/OpenWire/V4/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionErrorMarshaller.cs b/src/OpenWire/V4/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V4/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionIdMarshaller.cs b/src/OpenWire/V4/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionIdMarshaller.cs
rename to src/OpenWire/V4/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConnectionInfoMarshaller.cs b/src/OpenWire/V4/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V4/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerControlMarshaller.cs b/src/OpenWire/V4/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerControlMarshaller.cs
rename to src/OpenWire/V4/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerIdMarshaller.cs b/src/OpenWire/V4/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerIdMarshaller.cs
rename to src/OpenWire/V4/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ConsumerInfoMarshaller.cs b/src/OpenWire/V4/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V4/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ControlCommandMarshaller.cs b/src/OpenWire/V4/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ControlCommandMarshaller.cs
rename to src/OpenWire/V4/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DataArrayResponseMarshaller.cs b/src/OpenWire/V4/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V4/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DataResponseMarshaller.cs b/src/OpenWire/V4/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DataResponseMarshaller.cs
rename to src/OpenWire/V4/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DestinationInfoMarshaller.cs b/src/OpenWire/V4/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DestinationInfoMarshaller.cs
rename to src/OpenWire/V4/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/DiscoveryEventMarshaller.cs b/src/OpenWire/V4/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V4/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ExceptionResponseMarshaller.cs b/src/OpenWire/V4/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V4/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/FlushCommandMarshaller.cs b/src/OpenWire/V4/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/FlushCommandMarshaller.cs
rename to src/OpenWire/V4/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/IntegerResponseMarshaller.cs b/src/OpenWire/V4/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/IntegerResponseMarshaller.cs
rename to src/OpenWire/V4/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalQueueAckMarshaller.cs b/src/OpenWire/V4/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V4/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTopicAckMarshaller.cs b/src/OpenWire/V4/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V4/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTraceMarshaller.cs b/src/OpenWire/V4/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTraceMarshaller.cs
rename to src/OpenWire/V4/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/JournalTransactionMarshaller.cs b/src/OpenWire/V4/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/JournalTransactionMarshaller.cs
rename to src/OpenWire/V4/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/KeepAliveInfoMarshaller.cs b/src/OpenWire/V4/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V4/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/LastPartialCommandMarshaller.cs b/src/OpenWire/V4/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V4/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/LocalTransactionIdMarshaller.cs b/src/OpenWire/V4/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V4/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MarshallerFactory.cs b/src/OpenWire/V4/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MarshallerFactory.cs
rename to src/OpenWire/V4/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageAckMarshaller.cs b/src/OpenWire/V4/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageAckMarshaller.cs
rename to src/OpenWire/V4/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageDispatchMarshaller.cs b/src/OpenWire/V4/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageDispatchMarshaller.cs
rename to src/OpenWire/V4/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V4/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageIdMarshaller.cs b/src/OpenWire/V4/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageIdMarshaller.cs
rename to src/OpenWire/V4/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessageMarshaller.cs b/src/OpenWire/V4/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessageMarshaller.cs
rename to src/OpenWire/V4/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/MessagePullMarshaller.cs b/src/OpenWire/V4/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/MessagePullMarshaller.cs
rename to src/OpenWire/V4/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V4/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/PartialCommandMarshaller.cs b/src/OpenWire/V4/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/PartialCommandMarshaller.cs
rename to src/OpenWire/V4/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerAckMarshaller.cs b/src/OpenWire/V4/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerAckMarshaller.cs
rename to src/OpenWire/V4/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerIdMarshaller.cs b/src/OpenWire/V4/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerIdMarshaller.cs
rename to src/OpenWire/V4/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ProducerInfoMarshaller.cs b/src/OpenWire/V4/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ProducerInfoMarshaller.cs
rename to src/OpenWire/V4/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/RemoveInfoMarshaller.cs b/src/OpenWire/V4/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/RemoveInfoMarshaller.cs
rename to src/OpenWire/V4/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V4/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ReplayCommandMarshaller.cs b/src/OpenWire/V4/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ReplayCommandMarshaller.cs
rename to src/OpenWire/V4/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ResponseMarshaller.cs b/src/OpenWire/V4/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ResponseMarshaller.cs
rename to src/OpenWire/V4/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SessionIdMarshaller.cs b/src/OpenWire/V4/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SessionIdMarshaller.cs
rename to src/OpenWire/V4/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SessionInfoMarshaller.cs b/src/OpenWire/V4/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SessionInfoMarshaller.cs
rename to src/OpenWire/V4/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/ShutdownInfoMarshaller.cs b/src/OpenWire/V4/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V4/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/SubscriptionInfoMarshaller.cs b/src/OpenWire/V4/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V4/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/TransactionIdMarshaller.cs b/src/OpenWire/V4/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/TransactionIdMarshaller.cs
rename to src/OpenWire/V4/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/TransactionInfoMarshaller.cs b/src/OpenWire/V4/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/TransactionInfoMarshaller.cs
rename to src/OpenWire/V4/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/WireFormatInfoMarshaller.cs b/src/OpenWire/V4/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V4/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V4/XATransactionIdMarshaller.cs b/src/OpenWire/V4/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V4/XATransactionIdMarshaller.cs
rename to src/OpenWire/V4/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V5/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V5/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQQueueMarshaller.cs b/src/OpenWire/V5/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V5/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ActiveMQTopicMarshaller.cs b/src/OpenWire/V5/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V5/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BaseCommandMarshaller.cs b/src/OpenWire/V5/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BaseCommandMarshaller.cs
rename to src/OpenWire/V5/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BrokerIdMarshaller.cs b/src/OpenWire/V5/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BrokerIdMarshaller.cs
rename to src/OpenWire/V5/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/BrokerInfoMarshaller.cs b/src/OpenWire/V5/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/BrokerInfoMarshaller.cs
rename to src/OpenWire/V5/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionControlMarshaller.cs b/src/OpenWire/V5/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionControlMarshaller.cs
rename to src/OpenWire/V5/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionErrorMarshaller.cs b/src/OpenWire/V5/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V5/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionIdMarshaller.cs b/src/OpenWire/V5/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionIdMarshaller.cs
rename to src/OpenWire/V5/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConnectionInfoMarshaller.cs b/src/OpenWire/V5/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V5/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerControlMarshaller.cs b/src/OpenWire/V5/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerControlMarshaller.cs
rename to src/OpenWire/V5/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerIdMarshaller.cs b/src/OpenWire/V5/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerIdMarshaller.cs
rename to src/OpenWire/V5/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ConsumerInfoMarshaller.cs b/src/OpenWire/V5/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V5/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ControlCommandMarshaller.cs b/src/OpenWire/V5/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ControlCommandMarshaller.cs
rename to src/OpenWire/V5/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DataArrayResponseMarshaller.cs b/src/OpenWire/V5/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V5/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DataResponseMarshaller.cs b/src/OpenWire/V5/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DataResponseMarshaller.cs
rename to src/OpenWire/V5/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DestinationInfoMarshaller.cs b/src/OpenWire/V5/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DestinationInfoMarshaller.cs
rename to src/OpenWire/V5/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/DiscoveryEventMarshaller.cs b/src/OpenWire/V5/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V5/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ExceptionResponseMarshaller.cs b/src/OpenWire/V5/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V5/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/FlushCommandMarshaller.cs b/src/OpenWire/V5/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/FlushCommandMarshaller.cs
rename to src/OpenWire/V5/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/IntegerResponseMarshaller.cs b/src/OpenWire/V5/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/IntegerResponseMarshaller.cs
rename to src/OpenWire/V5/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalQueueAckMarshaller.cs b/src/OpenWire/V5/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V5/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTopicAckMarshaller.cs b/src/OpenWire/V5/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V5/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTraceMarshaller.cs b/src/OpenWire/V5/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTraceMarshaller.cs
rename to src/OpenWire/V5/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/JournalTransactionMarshaller.cs b/src/OpenWire/V5/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/JournalTransactionMarshaller.cs
rename to src/OpenWire/V5/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/KeepAliveInfoMarshaller.cs b/src/OpenWire/V5/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V5/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/LastPartialCommandMarshaller.cs b/src/OpenWire/V5/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V5/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/LocalTransactionIdMarshaller.cs b/src/OpenWire/V5/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V5/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MarshallerFactory.cs b/src/OpenWire/V5/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MarshallerFactory.cs
rename to src/OpenWire/V5/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageAckMarshaller.cs b/src/OpenWire/V5/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageAckMarshaller.cs
rename to src/OpenWire/V5/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageDispatchMarshaller.cs b/src/OpenWire/V5/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageDispatchMarshaller.cs
rename to src/OpenWire/V5/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V5/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageIdMarshaller.cs b/src/OpenWire/V5/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageIdMarshaller.cs
rename to src/OpenWire/V5/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessageMarshaller.cs b/src/OpenWire/V5/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessageMarshaller.cs
rename to src/OpenWire/V5/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/MessagePullMarshaller.cs b/src/OpenWire/V5/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/MessagePullMarshaller.cs
rename to src/OpenWire/V5/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V5/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/PartialCommandMarshaller.cs b/src/OpenWire/V5/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/PartialCommandMarshaller.cs
rename to src/OpenWire/V5/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerAckMarshaller.cs b/src/OpenWire/V5/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerAckMarshaller.cs
rename to src/OpenWire/V5/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerIdMarshaller.cs b/src/OpenWire/V5/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerIdMarshaller.cs
rename to src/OpenWire/V5/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ProducerInfoMarshaller.cs b/src/OpenWire/V5/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ProducerInfoMarshaller.cs
rename to src/OpenWire/V5/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/RemoveInfoMarshaller.cs b/src/OpenWire/V5/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/RemoveInfoMarshaller.cs
rename to src/OpenWire/V5/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V5/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ReplayCommandMarshaller.cs b/src/OpenWire/V5/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ReplayCommandMarshaller.cs
rename to src/OpenWire/V5/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ResponseMarshaller.cs b/src/OpenWire/V5/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ResponseMarshaller.cs
rename to src/OpenWire/V5/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SessionIdMarshaller.cs b/src/OpenWire/V5/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SessionIdMarshaller.cs
rename to src/OpenWire/V5/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SessionInfoMarshaller.cs b/src/OpenWire/V5/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SessionInfoMarshaller.cs
rename to src/OpenWire/V5/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/ShutdownInfoMarshaller.cs b/src/OpenWire/V5/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V5/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/SubscriptionInfoMarshaller.cs b/src/OpenWire/V5/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V5/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/TransactionIdMarshaller.cs b/src/OpenWire/V5/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/TransactionIdMarshaller.cs
rename to src/OpenWire/V5/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/TransactionInfoMarshaller.cs b/src/OpenWire/V5/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/TransactionInfoMarshaller.cs
rename to src/OpenWire/V5/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/WireFormatInfoMarshaller.cs b/src/OpenWire/V5/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V5/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V5/XATransactionIdMarshaller.cs b/src/OpenWire/V5/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V5/XATransactionIdMarshaller.cs
rename to src/OpenWire/V5/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V6/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V6/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQQueueMarshaller.cs b/src/OpenWire/V6/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V6/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ActiveMQTopicMarshaller.cs b/src/OpenWire/V6/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V6/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BaseCommandMarshaller.cs b/src/OpenWire/V6/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BaseCommandMarshaller.cs
rename to src/OpenWire/V6/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BrokerIdMarshaller.cs b/src/OpenWire/V6/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BrokerIdMarshaller.cs
rename to src/OpenWire/V6/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/BrokerInfoMarshaller.cs b/src/OpenWire/V6/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/BrokerInfoMarshaller.cs
rename to src/OpenWire/V6/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionControlMarshaller.cs b/src/OpenWire/V6/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionControlMarshaller.cs
rename to src/OpenWire/V6/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionErrorMarshaller.cs b/src/OpenWire/V6/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V6/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionIdMarshaller.cs b/src/OpenWire/V6/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionIdMarshaller.cs
rename to src/OpenWire/V6/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConnectionInfoMarshaller.cs b/src/OpenWire/V6/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V6/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerControlMarshaller.cs b/src/OpenWire/V6/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerControlMarshaller.cs
rename to src/OpenWire/V6/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerIdMarshaller.cs b/src/OpenWire/V6/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerIdMarshaller.cs
rename to src/OpenWire/V6/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ConsumerInfoMarshaller.cs b/src/OpenWire/V6/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V6/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ControlCommandMarshaller.cs b/src/OpenWire/V6/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ControlCommandMarshaller.cs
rename to src/OpenWire/V6/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DataArrayResponseMarshaller.cs b/src/OpenWire/V6/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V6/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DataResponseMarshaller.cs b/src/OpenWire/V6/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DataResponseMarshaller.cs
rename to src/OpenWire/V6/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DestinationInfoMarshaller.cs b/src/OpenWire/V6/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DestinationInfoMarshaller.cs
rename to src/OpenWire/V6/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/DiscoveryEventMarshaller.cs b/src/OpenWire/V6/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V6/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ExceptionResponseMarshaller.cs b/src/OpenWire/V6/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V6/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/FlushCommandMarshaller.cs b/src/OpenWire/V6/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/FlushCommandMarshaller.cs
rename to src/OpenWire/V6/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/IntegerResponseMarshaller.cs b/src/OpenWire/V6/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/IntegerResponseMarshaller.cs
rename to src/OpenWire/V6/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalQueueAckMarshaller.cs b/src/OpenWire/V6/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V6/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTopicAckMarshaller.cs b/src/OpenWire/V6/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V6/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTraceMarshaller.cs b/src/OpenWire/V6/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTraceMarshaller.cs
rename to src/OpenWire/V6/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/JournalTransactionMarshaller.cs b/src/OpenWire/V6/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/JournalTransactionMarshaller.cs
rename to src/OpenWire/V6/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/KeepAliveInfoMarshaller.cs b/src/OpenWire/V6/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V6/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/LastPartialCommandMarshaller.cs b/src/OpenWire/V6/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V6/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/LocalTransactionIdMarshaller.cs b/src/OpenWire/V6/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V6/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MarshallerFactory.cs b/src/OpenWire/V6/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MarshallerFactory.cs
rename to src/OpenWire/V6/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageAckMarshaller.cs b/src/OpenWire/V6/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageAckMarshaller.cs
rename to src/OpenWire/V6/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageDispatchMarshaller.cs b/src/OpenWire/V6/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageDispatchMarshaller.cs
rename to src/OpenWire/V6/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V6/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageIdMarshaller.cs b/src/OpenWire/V6/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageIdMarshaller.cs
rename to src/OpenWire/V6/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessageMarshaller.cs b/src/OpenWire/V6/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessageMarshaller.cs
rename to src/OpenWire/V6/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/MessagePullMarshaller.cs b/src/OpenWire/V6/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/MessagePullMarshaller.cs
rename to src/OpenWire/V6/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V6/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/PartialCommandMarshaller.cs b/src/OpenWire/V6/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/PartialCommandMarshaller.cs
rename to src/OpenWire/V6/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerAckMarshaller.cs b/src/OpenWire/V6/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerAckMarshaller.cs
rename to src/OpenWire/V6/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerIdMarshaller.cs b/src/OpenWire/V6/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerIdMarshaller.cs
rename to src/OpenWire/V6/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ProducerInfoMarshaller.cs b/src/OpenWire/V6/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ProducerInfoMarshaller.cs
rename to src/OpenWire/V6/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/RemoveInfoMarshaller.cs b/src/OpenWire/V6/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/RemoveInfoMarshaller.cs
rename to src/OpenWire/V6/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V6/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ReplayCommandMarshaller.cs b/src/OpenWire/V6/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ReplayCommandMarshaller.cs
rename to src/OpenWire/V6/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ResponseMarshaller.cs b/src/OpenWire/V6/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ResponseMarshaller.cs
rename to src/OpenWire/V6/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SessionIdMarshaller.cs b/src/OpenWire/V6/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SessionIdMarshaller.cs
rename to src/OpenWire/V6/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SessionInfoMarshaller.cs b/src/OpenWire/V6/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SessionInfoMarshaller.cs
rename to src/OpenWire/V6/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/ShutdownInfoMarshaller.cs b/src/OpenWire/V6/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V6/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/SubscriptionInfoMarshaller.cs b/src/OpenWire/V6/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V6/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/TransactionIdMarshaller.cs b/src/OpenWire/V6/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/TransactionIdMarshaller.cs
rename to src/OpenWire/V6/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/TransactionInfoMarshaller.cs b/src/OpenWire/V6/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/TransactionInfoMarshaller.cs
rename to src/OpenWire/V6/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/WireFormatInfoMarshaller.cs b/src/OpenWire/V6/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V6/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V6/XATransactionIdMarshaller.cs b/src/OpenWire/V6/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V6/XATransactionIdMarshaller.cs
rename to src/OpenWire/V6/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V7/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V7/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQQueueMarshaller.cs b/src/OpenWire/V7/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V7/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ActiveMQTopicMarshaller.cs b/src/OpenWire/V7/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V7/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BaseCommandMarshaller.cs b/src/OpenWire/V7/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BaseCommandMarshaller.cs
rename to src/OpenWire/V7/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BrokerIdMarshaller.cs b/src/OpenWire/V7/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BrokerIdMarshaller.cs
rename to src/OpenWire/V7/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/BrokerInfoMarshaller.cs b/src/OpenWire/V7/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/BrokerInfoMarshaller.cs
rename to src/OpenWire/V7/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionControlMarshaller.cs b/src/OpenWire/V7/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionControlMarshaller.cs
rename to src/OpenWire/V7/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionErrorMarshaller.cs b/src/OpenWire/V7/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V7/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionIdMarshaller.cs b/src/OpenWire/V7/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionIdMarshaller.cs
rename to src/OpenWire/V7/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConnectionInfoMarshaller.cs b/src/OpenWire/V7/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V7/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerControlMarshaller.cs b/src/OpenWire/V7/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerControlMarshaller.cs
rename to src/OpenWire/V7/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerIdMarshaller.cs b/src/OpenWire/V7/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerIdMarshaller.cs
rename to src/OpenWire/V7/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ConsumerInfoMarshaller.cs b/src/OpenWire/V7/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V7/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ControlCommandMarshaller.cs b/src/OpenWire/V7/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ControlCommandMarshaller.cs
rename to src/OpenWire/V7/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DataArrayResponseMarshaller.cs b/src/OpenWire/V7/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V7/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DataResponseMarshaller.cs b/src/OpenWire/V7/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DataResponseMarshaller.cs
rename to src/OpenWire/V7/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DestinationInfoMarshaller.cs b/src/OpenWire/V7/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DestinationInfoMarshaller.cs
rename to src/OpenWire/V7/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/DiscoveryEventMarshaller.cs b/src/OpenWire/V7/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V7/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ExceptionResponseMarshaller.cs b/src/OpenWire/V7/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V7/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/FlushCommandMarshaller.cs b/src/OpenWire/V7/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/FlushCommandMarshaller.cs
rename to src/OpenWire/V7/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/IntegerResponseMarshaller.cs b/src/OpenWire/V7/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/IntegerResponseMarshaller.cs
rename to src/OpenWire/V7/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalQueueAckMarshaller.cs b/src/OpenWire/V7/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V7/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTopicAckMarshaller.cs b/src/OpenWire/V7/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V7/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTraceMarshaller.cs b/src/OpenWire/V7/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTraceMarshaller.cs
rename to src/OpenWire/V7/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/JournalTransactionMarshaller.cs b/src/OpenWire/V7/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/JournalTransactionMarshaller.cs
rename to src/OpenWire/V7/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/KeepAliveInfoMarshaller.cs b/src/OpenWire/V7/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V7/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/LastPartialCommandMarshaller.cs b/src/OpenWire/V7/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V7/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/LocalTransactionIdMarshaller.cs b/src/OpenWire/V7/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V7/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MarshallerFactory.cs b/src/OpenWire/V7/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MarshallerFactory.cs
rename to src/OpenWire/V7/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageAckMarshaller.cs b/src/OpenWire/V7/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageAckMarshaller.cs
rename to src/OpenWire/V7/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageDispatchMarshaller.cs b/src/OpenWire/V7/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageDispatchMarshaller.cs
rename to src/OpenWire/V7/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V7/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageIdMarshaller.cs b/src/OpenWire/V7/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageIdMarshaller.cs
rename to src/OpenWire/V7/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessageMarshaller.cs b/src/OpenWire/V7/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessageMarshaller.cs
rename to src/OpenWire/V7/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/MessagePullMarshaller.cs b/src/OpenWire/V7/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/MessagePullMarshaller.cs
rename to src/OpenWire/V7/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V7/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/PartialCommandMarshaller.cs b/src/OpenWire/V7/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/PartialCommandMarshaller.cs
rename to src/OpenWire/V7/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerAckMarshaller.cs b/src/OpenWire/V7/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerAckMarshaller.cs
rename to src/OpenWire/V7/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerIdMarshaller.cs b/src/OpenWire/V7/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerIdMarshaller.cs
rename to src/OpenWire/V7/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ProducerInfoMarshaller.cs b/src/OpenWire/V7/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ProducerInfoMarshaller.cs
rename to src/OpenWire/V7/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/RemoveInfoMarshaller.cs b/src/OpenWire/V7/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/RemoveInfoMarshaller.cs
rename to src/OpenWire/V7/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V7/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ReplayCommandMarshaller.cs b/src/OpenWire/V7/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ReplayCommandMarshaller.cs
rename to src/OpenWire/V7/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ResponseMarshaller.cs b/src/OpenWire/V7/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ResponseMarshaller.cs
rename to src/OpenWire/V7/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SessionIdMarshaller.cs b/src/OpenWire/V7/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SessionIdMarshaller.cs
rename to src/OpenWire/V7/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SessionInfoMarshaller.cs b/src/OpenWire/V7/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SessionInfoMarshaller.cs
rename to src/OpenWire/V7/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/ShutdownInfoMarshaller.cs b/src/OpenWire/V7/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V7/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/SubscriptionInfoMarshaller.cs b/src/OpenWire/V7/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V7/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/TransactionIdMarshaller.cs b/src/OpenWire/V7/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/TransactionIdMarshaller.cs
rename to src/OpenWire/V7/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/TransactionInfoMarshaller.cs b/src/OpenWire/V7/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/TransactionInfoMarshaller.cs
rename to src/OpenWire/V7/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/WireFormatInfoMarshaller.cs b/src/OpenWire/V7/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V7/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V7/XATransactionIdMarshaller.cs b/src/OpenWire/V7/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V7/XATransactionIdMarshaller.cs
rename to src/OpenWire/V7/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V8/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V8/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQQueueMarshaller.cs b/src/OpenWire/V8/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V8/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ActiveMQTopicMarshaller.cs b/src/OpenWire/V8/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V8/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BaseCommandMarshaller.cs b/src/OpenWire/V8/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BaseCommandMarshaller.cs
rename to src/OpenWire/V8/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BrokerIdMarshaller.cs b/src/OpenWire/V8/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BrokerIdMarshaller.cs
rename to src/OpenWire/V8/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/BrokerInfoMarshaller.cs b/src/OpenWire/V8/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/BrokerInfoMarshaller.cs
rename to src/OpenWire/V8/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionControlMarshaller.cs b/src/OpenWire/V8/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionControlMarshaller.cs
rename to src/OpenWire/V8/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionErrorMarshaller.cs b/src/OpenWire/V8/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V8/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionIdMarshaller.cs b/src/OpenWire/V8/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionIdMarshaller.cs
rename to src/OpenWire/V8/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConnectionInfoMarshaller.cs b/src/OpenWire/V8/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V8/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerControlMarshaller.cs b/src/OpenWire/V8/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerControlMarshaller.cs
rename to src/OpenWire/V8/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerIdMarshaller.cs b/src/OpenWire/V8/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerIdMarshaller.cs
rename to src/OpenWire/V8/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ConsumerInfoMarshaller.cs b/src/OpenWire/V8/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V8/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ControlCommandMarshaller.cs b/src/OpenWire/V8/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ControlCommandMarshaller.cs
rename to src/OpenWire/V8/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DataArrayResponseMarshaller.cs b/src/OpenWire/V8/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V8/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DataResponseMarshaller.cs b/src/OpenWire/V8/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DataResponseMarshaller.cs
rename to src/OpenWire/V8/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DestinationInfoMarshaller.cs b/src/OpenWire/V8/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DestinationInfoMarshaller.cs
rename to src/OpenWire/V8/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/DiscoveryEventMarshaller.cs b/src/OpenWire/V8/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V8/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ExceptionResponseMarshaller.cs b/src/OpenWire/V8/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V8/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/FlushCommandMarshaller.cs b/src/OpenWire/V8/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/FlushCommandMarshaller.cs
rename to src/OpenWire/V8/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/IntegerResponseMarshaller.cs b/src/OpenWire/V8/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/IntegerResponseMarshaller.cs
rename to src/OpenWire/V8/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalQueueAckMarshaller.cs b/src/OpenWire/V8/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V8/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTopicAckMarshaller.cs b/src/OpenWire/V8/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V8/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTraceMarshaller.cs b/src/OpenWire/V8/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTraceMarshaller.cs
rename to src/OpenWire/V8/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/JournalTransactionMarshaller.cs b/src/OpenWire/V8/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/JournalTransactionMarshaller.cs
rename to src/OpenWire/V8/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/KeepAliveInfoMarshaller.cs b/src/OpenWire/V8/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V8/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/LastPartialCommandMarshaller.cs b/src/OpenWire/V8/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V8/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/LocalTransactionIdMarshaller.cs b/src/OpenWire/V8/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V8/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MarshallerFactory.cs b/src/OpenWire/V8/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MarshallerFactory.cs
rename to src/OpenWire/V8/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageAckMarshaller.cs b/src/OpenWire/V8/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageAckMarshaller.cs
rename to src/OpenWire/V8/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageDispatchMarshaller.cs b/src/OpenWire/V8/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageDispatchMarshaller.cs
rename to src/OpenWire/V8/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V8/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageIdMarshaller.cs b/src/OpenWire/V8/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageIdMarshaller.cs
rename to src/OpenWire/V8/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessageMarshaller.cs b/src/OpenWire/V8/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessageMarshaller.cs
rename to src/OpenWire/V8/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/MessagePullMarshaller.cs b/src/OpenWire/V8/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/MessagePullMarshaller.cs
rename to src/OpenWire/V8/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V8/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/PartialCommandMarshaller.cs b/src/OpenWire/V8/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/PartialCommandMarshaller.cs
rename to src/OpenWire/V8/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerAckMarshaller.cs b/src/OpenWire/V8/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerAckMarshaller.cs
rename to src/OpenWire/V8/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerIdMarshaller.cs b/src/OpenWire/V8/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerIdMarshaller.cs
rename to src/OpenWire/V8/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ProducerInfoMarshaller.cs b/src/OpenWire/V8/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ProducerInfoMarshaller.cs
rename to src/OpenWire/V8/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/RemoveInfoMarshaller.cs b/src/OpenWire/V8/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/RemoveInfoMarshaller.cs
rename to src/OpenWire/V8/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V8/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ReplayCommandMarshaller.cs b/src/OpenWire/V8/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ReplayCommandMarshaller.cs
rename to src/OpenWire/V8/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ResponseMarshaller.cs b/src/OpenWire/V8/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ResponseMarshaller.cs
rename to src/OpenWire/V8/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SessionIdMarshaller.cs b/src/OpenWire/V8/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SessionIdMarshaller.cs
rename to src/OpenWire/V8/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SessionInfoMarshaller.cs b/src/OpenWire/V8/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SessionInfoMarshaller.cs
rename to src/OpenWire/V8/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/ShutdownInfoMarshaller.cs b/src/OpenWire/V8/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V8/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/SubscriptionInfoMarshaller.cs b/src/OpenWire/V8/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V8/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/TransactionIdMarshaller.cs b/src/OpenWire/V8/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/TransactionIdMarshaller.cs
rename to src/OpenWire/V8/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/TransactionInfoMarshaller.cs b/src/OpenWire/V8/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/TransactionInfoMarshaller.cs
rename to src/OpenWire/V8/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/WireFormatInfoMarshaller.cs b/src/OpenWire/V8/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V8/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V8/XATransactionIdMarshaller.cs b/src/OpenWire/V8/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V8/XATransactionIdMarshaller.cs
rename to src/OpenWire/V8/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQBlobMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQBytesMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQDestinationMarshaller.cs b/src/OpenWire/V9/ActiveMQDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQDestinationMarshaller.cs
rename to src/OpenWire/V9/ActiveMQDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQMapMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQMapMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQObjectMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQQueueMarshaller.cs b/src/OpenWire/V9/ActiveMQQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQQueueMarshaller.cs
rename to src/OpenWire/V9/ActiveMQQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQStreamMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs b/src/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempDestinationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempQueueMarshaller.cs b/src/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempQueueMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTempTopicMarshaller.cs b/src/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTempTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTextMessageMarshaller.cs b/src/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTextMessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ActiveMQTopicMarshaller.cs b/src/OpenWire/V9/ActiveMQTopicMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ActiveMQTopicMarshaller.cs
rename to src/OpenWire/V9/ActiveMQTopicMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BaseCommandMarshaller.cs b/src/OpenWire/V9/BaseCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BaseCommandMarshaller.cs
rename to src/OpenWire/V9/BaseCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BrokerIdMarshaller.cs b/src/OpenWire/V9/BrokerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BrokerIdMarshaller.cs
rename to src/OpenWire/V9/BrokerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/BrokerInfoMarshaller.cs b/src/OpenWire/V9/BrokerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/BrokerInfoMarshaller.cs
rename to src/OpenWire/V9/BrokerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionControlMarshaller.cs b/src/OpenWire/V9/ConnectionControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionControlMarshaller.cs
rename to src/OpenWire/V9/ConnectionControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionErrorMarshaller.cs b/src/OpenWire/V9/ConnectionErrorMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionErrorMarshaller.cs
rename to src/OpenWire/V9/ConnectionErrorMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionIdMarshaller.cs b/src/OpenWire/V9/ConnectionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionIdMarshaller.cs
rename to src/OpenWire/V9/ConnectionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConnectionInfoMarshaller.cs b/src/OpenWire/V9/ConnectionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConnectionInfoMarshaller.cs
rename to src/OpenWire/V9/ConnectionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerControlMarshaller.cs b/src/OpenWire/V9/ConsumerControlMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerControlMarshaller.cs
rename to src/OpenWire/V9/ConsumerControlMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerIdMarshaller.cs b/src/OpenWire/V9/ConsumerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerIdMarshaller.cs
rename to src/OpenWire/V9/ConsumerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ConsumerInfoMarshaller.cs b/src/OpenWire/V9/ConsumerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ConsumerInfoMarshaller.cs
rename to src/OpenWire/V9/ConsumerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ControlCommandMarshaller.cs b/src/OpenWire/V9/ControlCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ControlCommandMarshaller.cs
rename to src/OpenWire/V9/ControlCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DataArrayResponseMarshaller.cs b/src/OpenWire/V9/DataArrayResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DataArrayResponseMarshaller.cs
rename to src/OpenWire/V9/DataArrayResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DataResponseMarshaller.cs b/src/OpenWire/V9/DataResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DataResponseMarshaller.cs
rename to src/OpenWire/V9/DataResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DestinationInfoMarshaller.cs b/src/OpenWire/V9/DestinationInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DestinationInfoMarshaller.cs
rename to src/OpenWire/V9/DestinationInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/DiscoveryEventMarshaller.cs b/src/OpenWire/V9/DiscoveryEventMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/DiscoveryEventMarshaller.cs
rename to src/OpenWire/V9/DiscoveryEventMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ExceptionResponseMarshaller.cs b/src/OpenWire/V9/ExceptionResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ExceptionResponseMarshaller.cs
rename to src/OpenWire/V9/ExceptionResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/FlushCommandMarshaller.cs b/src/OpenWire/V9/FlushCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/FlushCommandMarshaller.cs
rename to src/OpenWire/V9/FlushCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/IntegerResponseMarshaller.cs b/src/OpenWire/V9/IntegerResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/IntegerResponseMarshaller.cs
rename to src/OpenWire/V9/IntegerResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalQueueAckMarshaller.cs b/src/OpenWire/V9/JournalQueueAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalQueueAckMarshaller.cs
rename to src/OpenWire/V9/JournalQueueAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTopicAckMarshaller.cs b/src/OpenWire/V9/JournalTopicAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTopicAckMarshaller.cs
rename to src/OpenWire/V9/JournalTopicAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTraceMarshaller.cs b/src/OpenWire/V9/JournalTraceMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTraceMarshaller.cs
rename to src/OpenWire/V9/JournalTraceMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/JournalTransactionMarshaller.cs b/src/OpenWire/V9/JournalTransactionMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/JournalTransactionMarshaller.cs
rename to src/OpenWire/V9/JournalTransactionMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/KeepAliveInfoMarshaller.cs b/src/OpenWire/V9/KeepAliveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/KeepAliveInfoMarshaller.cs
rename to src/OpenWire/V9/KeepAliveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/LastPartialCommandMarshaller.cs b/src/OpenWire/V9/LastPartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/LastPartialCommandMarshaller.cs
rename to src/OpenWire/V9/LastPartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/LocalTransactionIdMarshaller.cs b/src/OpenWire/V9/LocalTransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/LocalTransactionIdMarshaller.cs
rename to src/OpenWire/V9/LocalTransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MarshallerFactory.cs b/src/OpenWire/V9/MarshallerFactory.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MarshallerFactory.cs
rename to src/OpenWire/V9/MarshallerFactory.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageAckMarshaller.cs b/src/OpenWire/V9/MessageAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageAckMarshaller.cs
rename to src/OpenWire/V9/MessageAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageDispatchMarshaller.cs b/src/OpenWire/V9/MessageDispatchMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageDispatchMarshaller.cs
rename to src/OpenWire/V9/MessageDispatchMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageDispatchNotificationMarshaller.cs b/src/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
rename to src/OpenWire/V9/MessageDispatchNotificationMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageIdMarshaller.cs b/src/OpenWire/V9/MessageIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageIdMarshaller.cs
rename to src/OpenWire/V9/MessageIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessageMarshaller.cs b/src/OpenWire/V9/MessageMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessageMarshaller.cs
rename to src/OpenWire/V9/MessageMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/MessagePullMarshaller.cs b/src/OpenWire/V9/MessagePullMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/MessagePullMarshaller.cs
rename to src/OpenWire/V9/MessagePullMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/NetworkBridgeFilterMarshaller.cs b/src/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
rename to src/OpenWire/V9/NetworkBridgeFilterMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/PartialCommandMarshaller.cs b/src/OpenWire/V9/PartialCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/PartialCommandMarshaller.cs
rename to src/OpenWire/V9/PartialCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerAckMarshaller.cs b/src/OpenWire/V9/ProducerAckMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerAckMarshaller.cs
rename to src/OpenWire/V9/ProducerAckMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerIdMarshaller.cs b/src/OpenWire/V9/ProducerIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerIdMarshaller.cs
rename to src/OpenWire/V9/ProducerIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ProducerInfoMarshaller.cs b/src/OpenWire/V9/ProducerInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ProducerInfoMarshaller.cs
rename to src/OpenWire/V9/ProducerInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/RemoveInfoMarshaller.cs b/src/OpenWire/V9/RemoveInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/RemoveInfoMarshaller.cs
rename to src/OpenWire/V9/RemoveInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs b/src/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
rename to src/OpenWire/V9/RemoveSubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ReplayCommandMarshaller.cs b/src/OpenWire/V9/ReplayCommandMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ReplayCommandMarshaller.cs
rename to src/OpenWire/V9/ReplayCommandMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ResponseMarshaller.cs b/src/OpenWire/V9/ResponseMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ResponseMarshaller.cs
rename to src/OpenWire/V9/ResponseMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SessionIdMarshaller.cs b/src/OpenWire/V9/SessionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SessionIdMarshaller.cs
rename to src/OpenWire/V9/SessionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SessionInfoMarshaller.cs b/src/OpenWire/V9/SessionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SessionInfoMarshaller.cs
rename to src/OpenWire/V9/SessionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/ShutdownInfoMarshaller.cs b/src/OpenWire/V9/ShutdownInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/ShutdownInfoMarshaller.cs
rename to src/OpenWire/V9/ShutdownInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/SubscriptionInfoMarshaller.cs b/src/OpenWire/V9/SubscriptionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/SubscriptionInfoMarshaller.cs
rename to src/OpenWire/V9/SubscriptionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/TransactionIdMarshaller.cs b/src/OpenWire/V9/TransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/TransactionIdMarshaller.cs
rename to src/OpenWire/V9/TransactionIdMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/TransactionInfoMarshaller.cs b/src/OpenWire/V9/TransactionInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/TransactionInfoMarshaller.cs
rename to src/OpenWire/V9/TransactionInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/WireFormatInfoMarshaller.cs b/src/OpenWire/V9/WireFormatInfoMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/WireFormatInfoMarshaller.cs
rename to src/OpenWire/V9/WireFormatInfoMarshaller.cs
diff --git a/src/main/csharp/OpenWire/V9/XATransactionIdMarshaller.cs b/src/OpenWire/V9/XATransactionIdMarshaller.cs
similarity index 100%
rename from src/main/csharp/OpenWire/V9/XATransactionIdMarshaller.cs
rename to src/OpenWire/V9/XATransactionIdMarshaller.cs
diff --git a/src/main/csharp/PrefetchPolicy.cs b/src/PrefetchPolicy.cs
similarity index 100%
rename from src/main/csharp/PrefetchPolicy.cs
rename to src/PrefetchPolicy.cs
diff --git a/src/main/csharp/QueueBrowser.cs b/src/QueueBrowser.cs
similarity index 100%
rename from src/main/csharp/QueueBrowser.cs
rename to src/QueueBrowser.cs
diff --git a/src/main/csharp/RequestTimedOutException.cs b/src/RequestTimedOutException.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/RequestTimedOutException.cs
rename to src/RequestTimedOutException.cs
diff --git a/src/main/csharp/Session.cs b/src/Session.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Session.cs
rename to src/Session.cs
diff --git a/src/main/csharp/SessionExecutor.cs b/src/SessionExecutor.cs
similarity index 100%
rename from src/main/csharp/SessionExecutor.cs
rename to src/SessionExecutor.cs
diff --git a/src/main/csharp/State/CommandVisitorAdapter.cs b/src/State/CommandVisitorAdapter.cs
similarity index 100%
rename from src/main/csharp/State/CommandVisitorAdapter.cs
rename to src/State/CommandVisitorAdapter.cs
diff --git a/src/main/csharp/State/ConnectionState.cs b/src/State/ConnectionState.cs
similarity index 99%
rename from src/main/csharp/State/ConnectionState.cs
rename to src/State/ConnectionState.cs
index 3fd568f..ad16d92 100644
--- a/src/main/csharp/State/ConnectionState.cs
+++ b/src/State/ConnectionState.cs
@@ -77,25 +77,25 @@
public void AddTransactionState(TransactionId id)
{
- CheckShutdown();
- TransactionState transactionState = new TransactionState(id);
-
- if(transactions.ContainsKey(id))
- {
- transactions[id] = transactionState;
- }
- else
- {
- transactions.Add(id, transactionState);
+ CheckShutdown();
+ TransactionState transactionState = new TransactionState(id);
+
+ if(transactions.ContainsKey(id))
+ {
+ transactions[id] = transactionState;
+ }
+ else
+ {
+ transactions.Add(id, transactionState);
}
}
public TransactionState this[TransactionId id]
{
get
- {
- TransactionState state = null;
-
+ {
+ TransactionState state = null;
+
transactions.TryGetValue(id, out state);
return state;
}
@@ -109,36 +109,36 @@
public SessionState this[SessionId id]
{
get
- {
- SessionState sessionState = null;
-
+ {
+ SessionState sessionState = null;
+
sessions.TryGetValue(id, out sessionState);
-#if DEBUG
- if(null == sessionState)
- {
- // Useful for dignosing missing session ids
- string sessionList = string.Empty;
- foreach(SessionId sessionId in sessions.Keys)
- {
- sessionList += sessionId.ToString() + "\n";
- }
-
- System.Diagnostics.Debug.Assert(false,
- string.Format("Session '{0}' did not exist in the sessions collection.\n\nSessions:-\n{1}", id, sessionList));
+#if DEBUG
+ if(null == sessionState)
+ {
+ // Useful for dignosing missing session ids
+ string sessionList = string.Empty;
+ foreach(SessionId sessionId in sessions.Keys)
+ {
+ sessionList += sessionId.ToString() + "\n";
+ }
+
+ System.Diagnostics.Debug.Assert(false,
+ string.Format("Session '{0}' did not exist in the sessions collection.\n\nSessions:-\n{1}", id, sessionList));
}
-#endif
- return sessionState;
+#endif
+ return sessionState;
}
}
public TransactionState RemoveTransactionState(TransactionId id)
{
- TransactionState ret = null;
-
- if(transactions.TryGetValue(id, out ret))
- {
- transactions.Remove(id);
+ TransactionState ret = null;
+
+ if(transactions.TryGetValue(id, out ret))
+ {
+ transactions.Remove(id);
}
return ret;
@@ -146,26 +146,26 @@
public void AddSession(SessionInfo info)
{
- CheckShutdown();
- SessionState sessionState = new SessionState(info);
-
- if(sessions.ContainsKey(info.SessionId))
- {
- sessions[info.SessionId] = sessionState;
- }
- else
- {
- sessions.Add(info.SessionId, sessionState);
+ CheckShutdown();
+ SessionState sessionState = new SessionState(info);
+
+ if(sessions.ContainsKey(info.SessionId))
+ {
+ sessions[info.SessionId] = sessionState;
+ }
+ else
+ {
+ sessions.Add(info.SessionId, sessionState);
}
}
public SessionState RemoveSession(SessionId id)
{
- SessionState ret = null;
-
- if(sessions.TryGetValue(id, out ret))
- {
- sessions.Remove(id);
+ SessionState ret = null;
+
+ if(sessions.TryGetValue(id, out ret))
+ {
+ sessions.Remove(id);
}
return ret;
diff --git a/src/main/csharp/State/ConnectionStateTracker.cs b/src/State/ConnectionStateTracker.cs
similarity index 99%
rename from src/main/csharp/State/ConnectionStateTracker.cs
rename to src/State/ConnectionStateTracker.cs
index 852faef..9c88eee 100644
--- a/src/main/csharp/State/ConnectionStateTracker.cs
+++ b/src/State/ConnectionStateTracker.cs
@@ -480,18 +480,18 @@
}
public override Response ProcessAddConnection(ConnectionInfo info)
- {
+ {
if(info != null)
- {
- ConnectionState connState = new ConnectionState(info);
-
- if(connectionStates.ContainsKey(info.ConnectionId))
- {
- connectionStates[info.ConnectionId] = connState;
- }
- else
- {
- connectionStates.Add(info.ConnectionId, connState);
+ {
+ ConnectionState connState = new ConnectionState(info);
+
+ if(connectionStates.ContainsKey(info.ConnectionId))
+ {
+ connectionStates[info.ConnectionId] = connState;
+ }
+ else
+ {
+ connectionStates.Add(info.ConnectionId, connState);
}
}
diff --git a/src/main/csharp/State/ConsumerState.cs b/src/State/ConsumerState.cs
similarity index 100%
rename from src/main/csharp/State/ConsumerState.cs
rename to src/State/ConsumerState.cs
diff --git a/src/main/csharp/State/ICommandVisitor.cs b/src/State/ICommandVisitor.cs
similarity index 100%
rename from src/main/csharp/State/ICommandVisitor.cs
rename to src/State/ICommandVisitor.cs
diff --git a/src/main/csharp/State/ProducerState.cs b/src/State/ProducerState.cs
similarity index 100%
rename from src/main/csharp/State/ProducerState.cs
rename to src/State/ProducerState.cs
diff --git a/src/main/csharp/State/ResponseHandler.cs b/src/State/ResponseHandler.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/State/ResponseHandler.cs
rename to src/State/ResponseHandler.cs
diff --git a/src/main/csharp/State/SessionState.cs b/src/State/SessionState.cs
similarity index 99%
rename from src/main/csharp/State/SessionState.cs
rename to src/State/SessionState.cs
index 9ef7ef9..7c9e8b4 100644
--- a/src/main/csharp/State/SessionState.cs
+++ b/src/State/SessionState.cs
@@ -43,31 +43,31 @@
public void AddProducer(ProducerInfo info)
{
- CheckShutdown();
- ProducerState producerState = new ProducerState(info);
-
- if(producers.ContainsKey(info.ProducerId))
- {
- producers[info.ProducerId] = producerState;
- }
- else
- {
- producers.Add(info.ProducerId, producerState);
+ CheckShutdown();
+ ProducerState producerState = new ProducerState(info);
+
+ if(producers.ContainsKey(info.ProducerId))
+ {
+ producers[info.ProducerId] = producerState;
+ }
+ else
+ {
+ producers.Add(info.ProducerId, producerState);
}
}
public ProducerState RemoveProducer(ProducerId id)
- {
+ {
CheckShutdown();
- ProducerState ret = null;
-
- if(producers.TryGetValue(id, out ret))
- {
- producers.Remove(id);
- if(null != ret && ret.TransactionState != null)
- {
- ret.TransactionState.AddProducer(ret);
- }
+ ProducerState ret = null;
+
+ if(producers.TryGetValue(id, out ret))
+ {
+ producers.Remove(id);
+ if(null != ret && ret.TransactionState != null)
+ {
+ ret.TransactionState.AddProducer(ret);
+ }
}
return ret;
@@ -75,27 +75,27 @@
public void AddConsumer(ConsumerInfo info)
{
- CheckShutdown();
- ConsumerState consumerState = new ConsumerState(info);
-
- if(consumers.ContainsKey(info.ConsumerId))
- {
- consumers.Add(info.ConsumerId, consumerState);
- }
- else
- {
- consumers.Add(info.ConsumerId, consumerState);
+ CheckShutdown();
+ ConsumerState consumerState = new ConsumerState(info);
+
+ if(consumers.ContainsKey(info.ConsumerId))
+ {
+ consumers.Add(info.ConsumerId, consumerState);
+ }
+ else
+ {
+ consumers.Add(info.ConsumerId, consumerState);
}
}
public ConsumerState RemoveConsumer(ConsumerId id)
- {
+ {
CheckShutdown();
- ConsumerState ret = null;
-
- if(consumers.TryGetValue(id, out ret))
- {
- consumers.Remove(id);
+ ConsumerState ret = null;
+
+ if(consumers.TryGetValue(id, out ret))
+ {
+ consumers.Remove(id);
}
return ret;
diff --git a/src/main/csharp/State/SynchronizedObjects.cs b/src/State/SynchronizedObjects.cs
similarity index 99%
rename from src/main/csharp/State/SynchronizedObjects.cs
rename to src/State/SynchronizedObjects.cs
index f021c72..42e7b65 100644
--- a/src/main/csharp/State/SynchronizedObjects.cs
+++ b/src/State/SynchronizedObjects.cs
@@ -217,22 +217,22 @@
{
return _dictionary.Remove(v);
}
- }
-
- public bool ContainsKey(TKey k)
- {
- lock(((ICollection) _dictionary).SyncRoot)
- {
- return _dictionary.ContainsKey(k);
- }
- }
-
- public bool ContainsValue(TValue v)
- {
- lock(((ICollection) _dictionary).SyncRoot)
- {
- return _dictionary.ContainsValue(v);
- }
- }
+ }
+
+ public bool ContainsKey(TKey k)
+ {
+ lock(((ICollection) _dictionary).SyncRoot)
+ {
+ return _dictionary.ContainsKey(k);
+ }
+ }
+
+ public bool ContainsValue(TValue v)
+ {
+ lock(((ICollection) _dictionary).SyncRoot)
+ {
+ return _dictionary.ContainsValue(v);
+ }
+ }
}
}
diff --git a/src/main/csharp/State/Tracked.cs b/src/State/Tracked.cs
similarity index 100%
rename from src/main/csharp/State/Tracked.cs
rename to src/State/Tracked.cs
diff --git a/src/main/csharp/State/TransactionState.cs b/src/State/TransactionState.cs
similarity index 99%
rename from src/main/csharp/State/TransactionState.cs
rename to src/State/TransactionState.cs
index 5923b24..00505a1 100644
--- a/src/main/csharp/State/TransactionState.cs
+++ b/src/State/TransactionState.cs
@@ -87,14 +87,14 @@
public void AddProducer(ProducerState producer)
{
- CheckShutdown();
- if(this.producers.ContainsKey(producer.Info.ProducerId))
- {
- this.producers[producer.Info.ProducerId] = producer;
- }
- else
- {
- this.producers.Add(producer.Info.ProducerId, producer);
+ CheckShutdown();
+ if(this.producers.ContainsKey(producer.Info.ProducerId))
+ {
+ this.producers[producer.Info.ProducerId] = producer;
+ }
+ else
+ {
+ this.producers.Add(producer.Info.ProducerId, producer);
}
}
diff --git a/src/main/csharp/Threads/CompositeTask.cs b/src/Threads/CompositeTask.cs
similarity index 100%
rename from src/main/csharp/Threads/CompositeTask.cs
rename to src/Threads/CompositeTask.cs
diff --git a/src/main/csharp/Threads/CompositeTaskRunner.cs b/src/Threads/CompositeTaskRunner.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Threads/CompositeTaskRunner.cs
rename to src/Threads/CompositeTaskRunner.cs
diff --git a/src/main/csharp/Threads/DedicatedTaskRunner.cs b/src/Threads/DedicatedTaskRunner.cs
similarity index 100%
rename from src/main/csharp/Threads/DedicatedTaskRunner.cs
rename to src/Threads/DedicatedTaskRunner.cs
diff --git a/src/main/csharp/Threads/DefaultThreadPools.cs b/src/Threads/DefaultThreadPools.cs
similarity index 99%
rename from src/main/csharp/Threads/DefaultThreadPools.cs
rename to src/Threads/DefaultThreadPools.cs
index 32c8494..cf27feb 100644
--- a/src/main/csharp/Threads/DefaultThreadPools.cs
+++ b/src/Threads/DefaultThreadPools.cs
@@ -1,33 +1,33 @@
-/*
- * 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.
- */
-
-namespace Apache.NMS.ActiveMQ.Threads
-{
- public class DefaultThreadPools
- {
- private static readonly TaskRunnerFactory taskRunnerFactory = new TaskRunnerFactory();
-
- private DefaultThreadPools()
- {
- }
-
- public static TaskRunnerFactory DefaultTaskRunnerFactory
- {
- get { return taskRunnerFactory; }
- }
- }
-}
+/*
+ * 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.
+ */
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+ public class DefaultThreadPools
+ {
+ private static readonly TaskRunnerFactory taskRunnerFactory = new TaskRunnerFactory();
+
+ private DefaultThreadPools()
+ {
+ }
+
+ public static TaskRunnerFactory DefaultTaskRunnerFactory
+ {
+ get { return taskRunnerFactory; }
+ }
+ }
+}
diff --git a/src/main/csharp/Threads/PooledTaskRunner.cs b/src/Threads/PooledTaskRunner.cs
similarity index 95%
rename from src/main/csharp/Threads/PooledTaskRunner.cs
rename to src/Threads/PooledTaskRunner.cs
index 2deb799..ad405b8 100644
--- a/src/main/csharp/Threads/PooledTaskRunner.cs
+++ b/src/Threads/PooledTaskRunner.cs
@@ -1,193 +1,195 @@
-/*
- * 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.Threading;
-
-namespace Apache.NMS.ActiveMQ.Threads
-{
- class PooledTaskRunner : TaskRunner
- {
- private readonly int maxIterationsPerRun;
- private readonly Task task;
- private readonly Object runable = new Object();
- private bool queued;
- private bool _shutdown;
- private bool iterating;
- private volatile System.Threading.Thread runningThread;
-
- public void Run(Object o)
- {
- PooledTaskRunner p = o as PooledTaskRunner;
- p.runningThread = System.Threading.Thread.CurrentThread;
- try
- {
- p.RunTask();
- }
- finally
- {
- p.runningThread = null;
- }
- }
-
- public PooledTaskRunner(Task task, int maxIterationsPerRun)
- {
- this.maxIterationsPerRun = maxIterationsPerRun;
- this.task = task;
- this._shutdown = false;
- this.iterating = false;
- this.queued = true;
- ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
- }
-
- /// <summary>
- /// We Expect MANY wakeup calls on the same TaskRunner.
- /// </summary>
- public void Wakeup()
- {
- lock(runable)
- {
- // When we get in here, we make some assumptions of state:
- // queued=false, iterating=false: wakeup() has not be called and
- // therefore task is not executing.
- // queued=true, iterating=false: wakeup() was called but, task
- // execution has not started yet
- // queued=false, iterating=true : wakeup() was called, which caused
- // task execution to start.
- // queued=true, iterating=true : wakeup() called after task
- // execution was started.
-
- if(queued || _shutdown)
- {
- return;
- }
-
- queued = true;
-
- // The runTask() method will do this for me once we are done
- // iterating.
- if(!iterating)
- {
- ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
- }
- }
- }
-
- /// <summary>
- /// shut down the task
- /// </summary>
- /// <param name="timeout"></param>
- public void Shutdown(TimeSpan timeout)
- {
- lock(runable)
- {
- _shutdown = true;
- // the check on the thread is done
- // because a call to iterate can result in
- // shutDown() being called, which would wait forever
- // waiting for iterating to finish
- if(runningThread != System.Threading.Thread.CurrentThread)
- {
- if(iterating)
- {
- System.Threading.Thread.Sleep(timeout);
- }
- }
- }
- }
-
- public void ShutdownWithAbort(TimeSpan timeout)
- {
- lock(runable)
- {
- _shutdown = true;
-
- if(runningThread != System.Threading.Thread.CurrentThread)
- {
- if(iterating)
- {
- System.Threading.Thread.Sleep(timeout);
- }
-
- if(iterating)
- {
- runningThread.Abort();
- }
- }
- }
- }
-
- public void Shutdown()
- {
- Shutdown(new TimeSpan(Timeout.Infinite));
- }
-
- internal void RunTask()
- {
- lock(runable)
- {
- queued = false;
- if(_shutdown)
- {
- iterating = false;
- return;
- }
- iterating = true;
- }
-
- // Don't synchronize while we are iterating so that
- // multiple wakeup() calls can be executed concurrently.
- bool done = false;
- try
- {
- for(int i = 0; i < maxIterationsPerRun; i++)
- {
- if(!task.Iterate())
- {
- done = true;
- break;
- }
- }
- }
- finally
- {
- lock(runable)
- {
- iterating = false;
- if(_shutdown)
- {
- queued = false;
- }
- else
- {
- // If we could not iterate all the items
- // then we need to re-queue.
- if(!done)
- {
- queued = true;
- }
-
- if(queued)
- {
- ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
- }
- }
- }
- }
- }
- }
-}
+/*
+ * 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.Concurrent;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+ class PooledTaskRunner : TaskRunner
+ {
+ private readonly int maxIterationsPerRun;
+ private readonly Task task;
+ private readonly Object runable = new Object();
+ private bool queued;
+ private bool _shutdown;
+ private bool iterating;
+ private volatile System.Threading.Thread runningThread;
+
+ public void Run(Object o)
+ {
+ PooledTaskRunner p = o as PooledTaskRunner;
+ p.runningThread = System.Threading.Thread.CurrentThread;
+ try
+ {
+ p.RunTask();
+ }
+ finally
+ {
+ p.runningThread = null;
+ }
+ }
+
+ public PooledTaskRunner(Task task, int maxIterationsPerRun)
+ {
+ this.maxIterationsPerRun = maxIterationsPerRun;
+ this.task = task;
+ this._shutdown = false;
+ this.iterating = false;
+ this.queued = true;
+ ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+ }
+
+ /// <summary>
+ /// We Expect MANY wakeup calls on the same TaskRunner.
+ /// </summary>
+ public void Wakeup()
+ {
+ lock(runable)
+ {
+ // When we get in here, we make some assumptions of state:
+ // queued=false, iterating=false: wakeup() has not be called and
+ // therefore task is not executing.
+ // queued=true, iterating=false: wakeup() was called but, task
+ // execution has not started yet
+ // queued=false, iterating=true : wakeup() was called, which caused
+ // task execution to start.
+ // queued=true, iterating=true : wakeup() called after task
+ // execution was started.
+
+ if(queued || _shutdown)
+ {
+ return;
+ }
+
+ queued = true;
+
+ // The runTask() method will do this for me once we are done
+ // iterating.
+ if(!iterating)
+ {
+ ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+ }
+ }
+ }
+
+ /// <summary>
+ /// shut down the task
+ /// </summary>
+ /// <param name="timeout"></param>
+ public void Shutdown(TimeSpan timeout)
+ {
+ lock(runable)
+ {
+ _shutdown = true;
+ // the check on the thread is done
+ // because a call to iterate can result in
+ // shutDown() being called, which would wait forever
+ // waiting for iterating to finish
+ if(runningThread != System.Threading.Thread.CurrentThread)
+ {
+ if(iterating)
+ {
+ System.Threading.Thread.Sleep(timeout);
+ }
+ }
+ }
+ }
+
+ public void ShutdownWithAbort(TimeSpan timeout)
+ {
+ lock(runable)
+ {
+ _shutdown = true;
+
+ if (runningThread != Thread.CurrentThread)
+ {
+ if(iterating)
+ {
+ Thread.Sleep(timeout);
+ }
+
+ if(iterating)
+ {
+ runningThread.Abort();
+ }
+ }
+ }
+ }
+
+ public void Shutdown()
+ {
+ Shutdown(new TimeSpan(Timeout.Infinite));
+ }
+
+ internal void RunTask()
+ {
+ lock(runable)
+ {
+ queued = false;
+ if(_shutdown)
+ {
+ iterating = false;
+ return;
+ }
+ iterating = true;
+ }
+
+ // Don't synchronize while we are iterating so that
+ // multiple wakeup() calls can be executed concurrently.
+ bool done = false;
+ try
+ {
+ for(int i = 0; i < maxIterationsPerRun; i++)
+ {
+ if(!task.Iterate())
+ {
+ done = true;
+ break;
+ }
+ }
+ }
+ finally
+ {
+ lock(runable)
+ {
+ iterating = false;
+ if(_shutdown)
+ {
+ queued = false;
+ }
+ else
+ {
+ // If we could not iterate all the items
+ // then we need to re-queue.
+ if(!done)
+ {
+ queued = true;
+ }
+
+ if(queued)
+ {
+ ThreadPool.QueueUserWorkItem(new WaitCallback(Run), this);
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/src/main/csharp/Threads/Scheduler.cs b/src/Threads/Scheduler.cs
similarity index 100%
rename from src/main/csharp/Threads/Scheduler.cs
rename to src/Threads/Scheduler.cs
diff --git a/src/main/csharp/Threads/Task.cs b/src/Threads/Task.cs
similarity index 99%
rename from src/main/csharp/Threads/Task.cs
rename to src/Threads/Task.cs
index 4d26e91..b8aad4f 100644
--- a/src/main/csharp/Threads/Task.cs
+++ b/src/Threads/Task.cs
@@ -1,36 +1,36 @@
-/*
- * 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.
- */
-
-namespace Apache.NMS.ActiveMQ.Threads
-{
- /// <summary>
- /// Represents a task that may take a few iterations to complete.
- /// </summary>
- public interface Task
- {
- /// <summary>
- /// Performs some portion of the work that this Task object is
- /// assigned to complete. When the task is entirely finished this
- /// method should return false.
- /// </summary>
- /// <returns>
- /// A <see cref="System.Boolean"/> this indicates if this Task should
- /// be run again.
- /// </returns>
- bool Iterate();
- }
-}
+/*
+ * 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.
+ */
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+ /// <summary>
+ /// Represents a task that may take a few iterations to complete.
+ /// </summary>
+ public interface Task
+ {
+ /// <summary>
+ /// Performs some portion of the work that this Task object is
+ /// assigned to complete. When the task is entirely finished this
+ /// method should return false.
+ /// </summary>
+ /// <returns>
+ /// A <see cref="System.Boolean"/> this indicates if this Task should
+ /// be run again.
+ /// </returns>
+ bool Iterate();
+ }
+}
diff --git a/src/main/csharp/Threads/TaskRunner.cs b/src/Threads/TaskRunner.cs
similarity index 99%
rename from src/main/csharp/Threads/TaskRunner.cs
rename to src/Threads/TaskRunner.cs
index 5d46683..cd24e60 100644
--- a/src/main/csharp/Threads/TaskRunner.cs
+++ b/src/Threads/TaskRunner.cs
@@ -1,63 +1,63 @@
-/*
- * 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;
-
-namespace Apache.NMS.ActiveMQ.Threads
-{
- /// <summary>
- /// Allows you to request a thread execute the associated Task.
- /// </summary>
- public interface TaskRunner
- {
- /// <summary>
- /// Wakeup the TaskRunner and have it check for any pending work that
- /// needs to be completed. If none is found it will go back to sleep
- /// until another Wakeup call is made.
- /// </summary>
- void Wakeup();
-
- /// <summary>
- /// Attempt to Shutdown the TaskRunner, this method will wait indefinitely
- /// for the TaskRunner to quite if the task runner is in a call to its Task's
- /// run method and that never returns.
- /// </summary>
- void Shutdown();
-
- /// <summary>
- /// Performs a timed wait for the TaskRunner to shutdown. If the TaskRunner
- /// is in a call to its Task's run method and that does not return before the
- /// timeout expires this method returns and the TaskRunner may remain in the
- /// running state.
- /// </summary>
- /// <param name="timeout">
- /// A <see cref="TimeSpan"/>
- /// </param>
- void Shutdown(TimeSpan timeout);
-
- /// <summary>
- /// Performs a timed wait for the TaskRunner to shutdown. If the TaskRunner
- /// is in a call to its Task's run method and that does not return before the
- /// timeout expires this method sends an Abort to the Task thread and return.
- /// </summary>
- /// <param name="timeout">
- /// A <see cref="TimeSpan"/>
- /// </param>
- void ShutdownWithAbort(TimeSpan timeout);
-
- }
-}
+/*
+ * 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;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+ /// <summary>
+ /// Allows you to request a thread execute the associated Task.
+ /// </summary>
+ public interface TaskRunner
+ {
+ /// <summary>
+ /// Wakeup the TaskRunner and have it check for any pending work that
+ /// needs to be completed. If none is found it will go back to sleep
+ /// until another Wakeup call is made.
+ /// </summary>
+ void Wakeup();
+
+ /// <summary>
+ /// Attempt to Shutdown the TaskRunner, this method will wait indefinitely
+ /// for the TaskRunner to quite if the task runner is in a call to its Task's
+ /// run method and that never returns.
+ /// </summary>
+ void Shutdown();
+
+ /// <summary>
+ /// Performs a timed wait for the TaskRunner to shutdown. If the TaskRunner
+ /// is in a call to its Task's run method and that does not return before the
+ /// timeout expires this method returns and the TaskRunner may remain in the
+ /// running state.
+ /// </summary>
+ /// <param name="timeout">
+ /// A <see cref="TimeSpan"/>
+ /// </param>
+ void Shutdown(TimeSpan timeout);
+
+ /// <summary>
+ /// Performs a timed wait for the TaskRunner to shutdown. If the TaskRunner
+ /// is in a call to its Task's run method and that does not return before the
+ /// timeout expires this method sends an Abort to the Task thread and return.
+ /// </summary>
+ /// <param name="timeout">
+ /// A <see cref="TimeSpan"/>
+ /// </param>
+ void ShutdownWithAbort(TimeSpan timeout);
+
+ }
+}
diff --git a/src/main/csharp/Threads/TaskRunnerFactory.cs b/src/Threads/TaskRunnerFactory.cs
similarity index 99%
rename from src/main/csharp/Threads/TaskRunnerFactory.cs
rename to src/Threads/TaskRunnerFactory.cs
index 9bb2599..fd5ab85 100644
--- a/src/main/csharp/Threads/TaskRunnerFactory.cs
+++ b/src/Threads/TaskRunnerFactory.cs
@@ -1,66 +1,66 @@
-/*
- * 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.Threading;
-
-namespace Apache.NMS.ActiveMQ.Threads
-{
- /// <summary>
- /// Manages the thread pool for long running tasks. Long running tasks are not
- /// always active but when they are active, they may need a few iterations of
- /// processing for them to become idle. The manager ensures that each task is
- /// processes but that no one task overtakes the system. This is kina like
- /// cooperative multitasking.
- ///
- /// If your OS/JVM combination has a good thread model, you may want to avoid
- /// using a thread pool to run tasks and use a DedicatedTaskRunner instead.
- /// </summary>
- public class TaskRunnerFactory
- {
- public string name = "ActiveMQ Task";
- public ThreadPriority priority = ThreadPriority.Normal;
- public int maxIterationsPerRun = 1000;
- public bool dedicatedTaskRunner = true;
-
- public TaskRunnerFactory()
- {
- }
-
- public TaskRunner CreateTaskRunner(Task task)
- {
- return CreateTaskRunner(task, this.name);
- }
-
- public TaskRunner CreateTaskRunner(Task task, string name)
- {
- return CreateTaskRunner(task, name, this.priority);
- }
-
- public TaskRunner CreateTaskRunner(Task task, string name, ThreadPriority taskPriority)
- {
- if(this.dedicatedTaskRunner)
- {
- return new DedicatedTaskRunner(task, name, taskPriority);
- }
- else
- {
- return new PooledTaskRunner(task, this.maxIterationsPerRun);
- }
- }
- }
-}
+/*
+ * 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.Threading;
+
+namespace Apache.NMS.ActiveMQ.Threads
+{
+ /// <summary>
+ /// Manages the thread pool for long running tasks. Long running tasks are not
+ /// always active but when they are active, they may need a few iterations of
+ /// processing for them to become idle. The manager ensures that each task is
+ /// processes but that no one task overtakes the system. This is kina like
+ /// cooperative multitasking.
+ ///
+ /// If your OS/JVM combination has a good thread model, you may want to avoid
+ /// using a thread pool to run tasks and use a DedicatedTaskRunner instead.
+ /// </summary>
+ public class TaskRunnerFactory
+ {
+ public string name = "ActiveMQ Task";
+ public ThreadPriority priority = ThreadPriority.Normal;
+ public int maxIterationsPerRun = 1000;
+ public bool dedicatedTaskRunner = true;
+
+ public TaskRunnerFactory()
+ {
+ }
+
+ public TaskRunner CreateTaskRunner(Task task)
+ {
+ return CreateTaskRunner(task, this.name);
+ }
+
+ public TaskRunner CreateTaskRunner(Task task, string name)
+ {
+ return CreateTaskRunner(task, name, this.priority);
+ }
+
+ public TaskRunner CreateTaskRunner(Task task, string name, ThreadPriority taskPriority)
+ {
+ if(this.dedicatedTaskRunner)
+ {
+ return new DedicatedTaskRunner(task, name, taskPriority);
+ }
+ else
+ {
+ return new PooledTaskRunner(task, this.maxIterationsPerRun);
+ }
+ }
+ }
+}
diff --git a/src/main/csharp/Threads/ThreadPoolExecutor.cs b/src/Threads/ThreadPoolExecutor.cs
similarity index 100%
rename from src/main/csharp/Threads/ThreadPoolExecutor.cs
rename to src/Threads/ThreadPoolExecutor.cs
diff --git a/src/main/csharp/Threads/TimerEx.cs b/src/Threads/TimerEx.cs
similarity index 100%
rename from src/main/csharp/Threads/TimerEx.cs
rename to src/Threads/TimerEx.cs
diff --git a/src/main/csharp/Threads/TimerTask.cs b/src/Threads/TimerTask.cs
similarity index 100%
rename from src/main/csharp/Threads/TimerTask.cs
rename to src/Threads/TimerTask.cs
diff --git a/src/main/csharp/TransactionContext.cs b/src/TransactionContext.cs
similarity index 100%
rename from src/main/csharp/TransactionContext.cs
rename to src/TransactionContext.cs
diff --git a/src/main/csharp/Transactions/IRecoveryLogger.cs b/src/Transactions/IRecoveryLogger.cs
similarity index 100%
rename from src/main/csharp/Transactions/IRecoveryLogger.cs
rename to src/Transactions/IRecoveryLogger.cs
diff --git a/src/main/csharp/Transactions/IRecoveryLoggerFactory.cs b/src/Transactions/IRecoveryLoggerFactory.cs
similarity index 100%
rename from src/main/csharp/Transactions/IRecoveryLoggerFactory.cs
rename to src/Transactions/IRecoveryLoggerFactory.cs
diff --git a/src/main/csharp/Transactions/RecoveryFileLogger.cs b/src/Transactions/RecoveryFileLogger.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryFileLogger.cs
rename to src/Transactions/RecoveryFileLogger.cs
diff --git a/src/main/csharp/Transactions/RecoveryFileLoggerFactory.cs b/src/Transactions/RecoveryFileLoggerFactory.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryFileLoggerFactory.cs
rename to src/Transactions/RecoveryFileLoggerFactory.cs
diff --git a/src/main/csharp/Transactions/RecoveryLoggerFactoryAttribute.cs b/src/Transactions/RecoveryLoggerFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transactions/RecoveryLoggerFactoryAttribute.cs
rename to src/Transactions/RecoveryLoggerFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/ActiveMQTransportFactoryAttribute.cs b/src/Transport/ActiveMQTransportFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transport/ActiveMQTransportFactoryAttribute.cs
rename to src/Transport/ActiveMQTransportFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/Discovery/AbstractDiscoveryAgent.cs b/src/Transport/Discovery/AbstractDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/AbstractDiscoveryAgent.cs
rename to src/Transport/Discovery/AbstractDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs b/src/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
rename to src/Transport/Discovery/ActiveMQDiscoveryAgentFactoryAttribute.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveredServiceData.cs b/src/Transport/Discovery/DiscoveredServiceData.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveredServiceData.cs
rename to src/Transport/Discovery/DiscoveredServiceData.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryAgentFactory.cs b/src/Transport/Discovery/DiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryAgentFactory.cs
rename to src/Transport/Discovery/DiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryTransport.cs b/src/Transport/Discovery/DiscoveryTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryTransport.cs
rename to src/Transport/Discovery/DiscoveryTransport.cs
diff --git a/src/main/csharp/Transport/Discovery/DiscoveryTransportFactory.cs b/src/Transport/Discovery/DiscoveryTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/DiscoveryTransportFactory.cs
rename to src/Transport/Discovery/DiscoveryTransportFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/IDiscoveryAgent.cs b/src/Transport/Discovery/IDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/IDiscoveryAgent.cs
rename to src/Transport/Discovery/IDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/IDiscoveryAgentFactory.cs b/src/Transport/Discovery/IDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/IDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/IDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs b/src/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
rename to src/Transport/Discovery/Multicast/MulticastDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs b/src/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/Multicast/MulticastDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgent.cs b/src/Transport/Discovery/http/HttpDiscoveryAgent.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgent.cs
rename to src/Transport/Discovery/http/HttpDiscoveryAgent.cs
diff --git a/src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs b/src/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
rename to src/Transport/Discovery/http/HttpDiscoveryAgentFactory.cs
diff --git a/src/main/csharp/Transport/Failover/BackupTransport.cs b/src/Transport/Failover/BackupTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/Failover/BackupTransport.cs
rename to src/Transport/Failover/BackupTransport.cs
index c35bc8a..61f5b5b 100644
--- a/src/main/csharp/Transport/Failover/BackupTransport.cs
+++ b/src/Transport/Failover/BackupTransport.cs
@@ -1,104 +1,104 @@
-/*
- * 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.ActiveMQ.Commands;
-
-namespace Apache.NMS.ActiveMQ.Transport.Failover
-{
- class BackupTransport
- {
- private readonly FailoverTransport failoverTransport;
- private ITransport transport;
- private Uri uri;
- private bool disposed;
-
- public BackupTransport(FailoverTransport ft)
- {
- this.failoverTransport = ft;
- }
-
- public void OnCommand(ITransport t, Command c)
- {
- }
-
- public void OnException(ITransport t, Exception error)
- {
- this.disposed = true;
- if(failoverTransport != null)
- {
- this.failoverTransport.Reconnect(false);
- }
- }
-
- public ITransport Transport
- {
- get
- {
- return transport;
- }
- set
- {
- transport = value;
- }
- }
-
- public Uri Uri
- {
- get
- {
- return uri;
- }
- set
- {
- uri = value;
- }
- }
-
- public bool Disposed
- {
- get
- {
- return disposed || (transport != null && transport.IsDisposed);
- }
- set
- {
- disposed = value;
- if(disposed && transport != null)
- {
- transport.Dispose();
- }
- }
- }
-
- public int hashCode()
- {
- return uri != null ? uri.GetHashCode() : -1;
- }
-
- public bool equals(Object obj)
- {
- if(obj is BackupTransport)
- {
- BackupTransport other = obj as BackupTransport;
- return uri == null && other.uri == null ||
- (uri != null && other.uri != null && uri.Equals(other.uri));
- }
- return false;
- }
- }
-}
+/*
+ * 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.ActiveMQ.Commands;
+
+namespace Apache.NMS.ActiveMQ.Transport.Failover
+{
+ class BackupTransport
+ {
+ private readonly FailoverTransport failoverTransport;
+ private ITransport transport;
+ private Uri uri;
+ private bool disposed;
+
+ public BackupTransport(FailoverTransport ft)
+ {
+ this.failoverTransport = ft;
+ }
+
+ public void OnCommand(ITransport t, Command c)
+ {
+ }
+
+ public void OnException(ITransport t, Exception error)
+ {
+ this.disposed = true;
+ if(failoverTransport != null)
+ {
+ this.failoverTransport.Reconnect(false);
+ }
+ }
+
+ public ITransport Transport
+ {
+ get
+ {
+ return transport;
+ }
+ set
+ {
+ transport = value;
+ }
+ }
+
+ public Uri Uri
+ {
+ get
+ {
+ return uri;
+ }
+ set
+ {
+ uri = value;
+ }
+ }
+
+ public bool Disposed
+ {
+ get
+ {
+ return disposed || (transport != null && transport.IsDisposed);
+ }
+ set
+ {
+ disposed = value;
+ if(disposed && transport != null)
+ {
+ transport.Dispose();
+ }
+ }
+ }
+
+ public int hashCode()
+ {
+ return uri != null ? uri.GetHashCode() : -1;
+ }
+
+ public bool equals(Object obj)
+ {
+ if(obj is BackupTransport)
+ {
+ BackupTransport other = obj as BackupTransport;
+ return uri == null && other.uri == null ||
+ (uri != null && other.uri != null && uri.Equals(other.uri));
+ }
+ return false;
+ }
+ }
+}
diff --git a/src/main/csharp/Transport/Failover/FailoverTransport.cs b/src/Transport/Failover/FailoverTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/Failover/FailoverTransport.cs
rename to src/Transport/Failover/FailoverTransport.cs
index 6aa7377..7fca5ae 100644
--- a/src/main/csharp/Transport/Failover/FailoverTransport.cs
+++ b/src/Transport/Failover/FailoverTransport.cs
@@ -1,1689 +1,1689 @@
-/*
- * 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.Collections.Generic;
-using System.Threading;
-using System.Text;
-using System.Net;
-using Apache.NMS.ActiveMQ.Commands;
-using Apache.NMS.ActiveMQ.State;
-using Apache.NMS.ActiveMQ.Threads;
-using Apache.NMS.Util;
-
-namespace Apache.NMS.ActiveMQ.Transport.Failover
-{
- /// <summary>
- /// A Transport that is made reliable by being able to fail over to another
- /// transport when a transport failure is detected.
- /// </summary>
- public class FailoverTransport : ICompositeTransport, IComparable
- {
- private static int DEFAULT_INITIAL_RECONNECT_DELAY = 10;
- private static int INFINITE = -1;
-
- private static int idCounter = 0;
- private readonly int id;
-
- private bool disposed;
- private bool connected;
- private readonly List<Uri> uris = new List<Uri>();
- private readonly List<Uri> updated = new List<Uri>();
-
- private CommandHandler commandHandler;
- private ExceptionHandler exceptionHandler;
- private InterruptedHandler interruptedHandler;
- private ResumedHandler resumedHandler;
-
- private readonly CountDownLatch listenerLatch = new CountDownLatch(4);
- private readonly Mutex reconnectMutex = new Mutex();
- private readonly Mutex backupMutex = new Mutex();
- private readonly Mutex sleepMutex = new Mutex();
- private readonly ConnectionStateTracker stateTracker = new ConnectionStateTracker();
- private readonly Dictionary<int, Command> requestMap = new Dictionary<int, Command>();
-
- private Uri connectedTransportURI;
- private Uri failedConnectTransportURI;
- private readonly AtomicReference<ITransport> connectedTransport = new AtomicReference<ITransport>(null);
- private TaskRunner reconnectTask = null;
- private bool started;
- private bool initialized;
- private int initialReconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
- private int maxReconnectDelay = 1000 * 30;
- private int backOffMultiplier = 2;
- private int timeout = INFINITE;
- private bool useExponentialBackOff = true;
- private bool randomize = true;
- private int maxReconnectAttempts = INFINITE;
- private int startupMaxReconnectAttempts = INFINITE;
- private int connectFailures;
- private int reconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
- private Exception connectionFailure;
- private bool firstConnection = true;
- private bool backup = false;
- private readonly List<BackupTransport> backups = new List<BackupTransport>();
- private int backupPoolSize = 1;
- private bool trackMessages = false;
- private bool trackTransactionProducers = true;
- private int maxCacheSize = 256;
- private volatile Exception failure;
- private readonly object mutex = new object();
- private bool reconnectSupported = true;
- private bool updateURIsSupported = true;
- private bool doRebalance = false;
- private bool connectedToPriority = false;
- private bool priorityBackup = false;
- private List<Uri> priorityList = new List<Uri>();
- private bool priorityBackupAvailable = false;
-
- // Not Sure how to work these back in with all the changes.
- //private int asyncTimeout = 45000;
- //private bool asyncConnect = false;
-
- public FailoverTransport()
- {
- id = idCounter++;
-
- stateTracker.TrackTransactions = true;
- reconnectTask = DefaultThreadPools.DefaultTaskRunnerFactory.CreateTaskRunner(
- new FailoverTask(this), "ActiveMQ Failover Worker: " + this.GetHashCode().ToString());
- }
-
- ~FailoverTransport()
- {
- Dispose(false);
- }
-
- #region FailoverTask
-
- private class FailoverTask : Task
- {
- private readonly FailoverTransport parent;
-
- public FailoverTask(FailoverTransport p)
- {
- parent = p;
- }
-
- public bool Iterate()
- {
- bool result = false;
- if (!parent.IsStarted)
- {
- return false;
- }
-
- bool buildBackup = true;
- lock (parent.backupMutex)
- {
- if ((parent.connectedTransport.Value == null || parent.doRebalance || parent.priorityBackupAvailable) && !parent.disposed)
- {
- result = parent.DoConnect();
- buildBackup = false;
- }
- }
- if (buildBackup)
- {
- parent.BuildBackups();
- if (parent.priorityBackup && !parent.connectedToPriority)
- {
- try
- {
- parent.DoDelay();
- if (parent.reconnectTask == null)
- {
- return true;
- }
- parent.reconnectTask.Wakeup();
- }
- catch (ThreadInterruptedException)
- {
- Tracer.Debug("Reconnect task has been interrupted.");
- }
- }
- }
- else
- {
- try
- {
- if (parent.reconnectTask == null)
- {
- return true;
- }
- parent.reconnectTask.Wakeup();
- }
- catch (ThreadInterruptedException)
- {
- Tracer.Debug("Reconnect task has been interrupted.");
- }
- }
- return result;
- }
- }
-
- #endregion
-
- #region Property Accessors
-
- public CommandHandler Command
- {
- get { return commandHandler; }
- set
- {
- commandHandler = value;
- listenerLatch.countDown();
- }
- }
-
- public ExceptionHandler Exception
- {
- get { return exceptionHandler; }
- set
- {
- exceptionHandler = value;
- listenerLatch.countDown();
- }
- }
-
- public InterruptedHandler Interrupted
- {
- get { return interruptedHandler; }
- set
- {
- this.interruptedHandler = value;
- this.listenerLatch.countDown();
- }
- }
-
- public ResumedHandler Resumed
- {
- get { return resumedHandler; }
- set
- {
- this.resumedHandler = value;
- this.listenerLatch.countDown();
- }
- }
-
- internal Exception Failure
- {
- get { return failure; }
- set
- {
- lock(mutex)
- {
- failure = value;
- }
- }
- }
-
- public int Timeout
- {
- get { return this.timeout; }
- set { this.timeout = value; }
- }
-
- public int InitialReconnectDelay
- {
- get { return initialReconnectDelay; }
- set { initialReconnectDelay = value; }
- }
-
- public int MaxReconnectDelay
- {
- get { return maxReconnectDelay; }
- set { maxReconnectDelay = value; }
- }
-
- public int ReconnectDelay
- {
- get { return reconnectDelay; }
- set { reconnectDelay = value; }
- }
-
- public int ReconnectDelayExponent
- {
- get { return backOffMultiplier; }
- set { backOffMultiplier = value; }
- }
-
- public ITransport ConnectedTransport
- {
- get { return connectedTransport.Value; }
- set { connectedTransport.Value = value; }
- }
-
- public Uri ConnectedTransportURI
- {
- get { return connectedTransportURI; }
- set { connectedTransportURI = value; }
- }
-
- public int MaxReconnectAttempts
- {
- get { return maxReconnectAttempts; }
- set { maxReconnectAttempts = value; }
- }
-
- public int StartupMaxReconnectAttempts
- {
- get { return startupMaxReconnectAttempts; }
- set { startupMaxReconnectAttempts = value; }
- }
-
- public bool Randomize
- {
- get { return randomize; }
- set { randomize = value; }
- }
-
- public bool Backup
- {
- get { return backup; }
- set { backup = value; }
- }
-
- public bool PriorityBackup
- {
- get { return priorityBackup; }
- set { this.priorityBackup = value; }
- }
-
- public String PriorityURIs
- {
- get { return PrintableUriList(priorityList); }
- set { this.ProcessDelimitedUriList(value, priorityList); }
- }
-
- public int BackupPoolSize
- {
- get { return backupPoolSize; }
- set { backupPoolSize = value; }
- }
-
- public bool TrackMessages
- {
- get { return trackMessages; }
- set { trackMessages = value; }
- }
-
- public bool TrackTransactionProducers
- {
- get { return trackTransactionProducers; }
- set { this.trackTransactionProducers = value; }
- }
-
- public int MaxCacheSize
- {
- get { return maxCacheSize; }
- set { maxCacheSize = value; }
- }
-
- public bool UseExponentialBackOff
- {
- get { return useExponentialBackOff; }
- set { useExponentialBackOff = value; }
- }
-
- public IWireFormat WireFormat
- {
- get
- {
- ITransport transport = ConnectedTransport;
- if(transport != null)
- {
- return transport.WireFormat;
- }
-
- return null;
- }
- }
-
- /// <summary>
- /// Gets or sets a value indicating whether to asynchronously connect to sockets
- /// </summary>
- /// <value><c>true</c> if [async connect]; otherwise, <c>false</c>.</value>
- public bool AsyncConnect
- {
- set { }
- }
-
- /// <summary>
- /// If doing an asynchronous connect, the milliseconds before timing out if no connection can be made
- /// </summary>
- /// <value>The async timeout.</value>
- public int AsyncTimeout
- {
- get { return 0; }
- set { }
- }
-
- public ConnectionStateTracker StateTracker
- {
- get { return this.stateTracker; }
- }
-
- #endregion
-
- public bool IsFaultTolerant
- {
- get { return true; }
- }
-
- public bool IsDisposed
- {
- get { return disposed; }
- }
-
- public bool IsConnected
- {
- get { return connected; }
- }
-
- public bool IsConnectedToPriority
- {
- get { return connectedToPriority; }
- }
-
- public bool IsStarted
- {
- get { return started; }
- }
-
- public bool IsReconnectSupported
- {
- get { return this.reconnectSupported; }
- }
-
- public bool IsUpdateURIsSupported
- {
- get { return this.updateURIsSupported; }
- }
-
- public void OnException(ITransport sender, Exception error)
- {
- try
- {
- HandleTransportFailure(error);
- }
- catch(Exception)
- {
- this.Exception(this, new IOException("Unexpected Transport Failure."));
- }
- }
-
- public void DisposedOnCommand(ITransport sender, Command c)
- {
- }
-
- public void DisposedOnException(ITransport sender, Exception e)
- {
- }
-
- public void HandleTransportFailure(Exception e)
- {
- ITransport transport = connectedTransport.GetAndSet(null);
- if (transport == null)
- {
- // sync with possible in progress reconnect
- lock(reconnectMutex)
- {
- transport = connectedTransport.GetAndSet(null);
- }
- }
-
- if(transport != null)
- {
- DisposeTransport(transport);
-
- bool reconnectOk = false;
- lock(reconnectMutex)
- {
- if (CanReconnect())
- {
- Tracer.WarnFormat("Transport failed to {0}, attempting to automatically reconnect due to: {1}",
- ConnectedTransportURI, e.Message);
- reconnectOk = true;
- }
-
- initialized = false;
- failedConnectTransportURI = ConnectedTransportURI;
- ConnectedTransportURI = null;
- connectedToPriority = false;
- connected = false;
-
- if (reconnectOk)
- {
- if(this.Interrupted != null)
- {
- this.Interrupted(transport);
- }
-
- updated.Remove(failedConnectTransportURI);
- reconnectTask.Wakeup();
- }
- else if (!disposed)
- {
- PropagateFailureToExceptionListener(e);
- }
- }
- }
- }
-
- private bool CanReconnect()
- {
- return started && 0 != CalculateReconnectAttemptLimit();
- }
-
- public void Start()
- {
- lock(reconnectMutex)
- {
- if(started)
- {
- Tracer.Debug("FailoverTransport Already Started.");
- return;
- }
-
- Tracer.Debug("FailoverTransport Started.");
- started = true;
- stateTracker.MaxCacheSize = MaxCacheSize;
- stateTracker.TrackMessages = TrackMessages;
- stateTracker.TrackTransactionProducers = TrackTransactionProducers;
- if(ConnectedTransport != null)
- {
- Tracer.Debug("FailoverTransport already connected, start is restoring.");
- stateTracker.DoRestore(ConnectedTransport);
- }
- else
- {
- Tracer.Debug("FailoverTransport not connected, start is reconnecting.");
- Reconnect(false);
- }
- }
- }
-
- public virtual void Stop()
- {
- ITransport transportToStop = null;
- List<ITransport> backupsToStop = new List<ITransport>(backups.Count);
-
- try
- {
- lock(reconnectMutex)
- {
- if(!started)
- {
- Tracer.Debug("FailoverTransport Already Stopped.");
- return;
- }
-
- Tracer.Debug("FailoverTransport Stopped.");
- started = false;
- disposed = true;
- connected = false;
- if(ConnectedTransport != null)
- {
- transportToStop = connectedTransport.GetAndSet(null);
- }
-
- }
- lock(sleepMutex)
- {
- Monitor.PulseAll(sleepMutex);
- }
- }
- finally
- {
- if(reconnectTask != null)
- {
- reconnectTask.Shutdown();
- }
- }
-
- lock(backupMutex)
- {
- foreach (BackupTransport backup in backups)
- {
- backup.Disposed = true;
- ITransport transport = backup.Transport;
- if (transport != null)
- {
- transport.Command = DisposedOnCommand;
- transport.Exception = DisposedOnException;
- backupsToStop.Add(transport);
- }
- }
- backups.Clear();
- }
-
- foreach (ITransport transport in backupsToStop)
- {
- try
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.Debug("Stopped backup: " + transport);
- }
- DisposeTransport(transport);
- }
- catch (Exception)
- {
- }
- }
-
- if(transportToStop != null)
- {
- transportToStop.Stop();
- }
- }
-
- public FutureResponse AsyncRequest(Command command)
- {
- throw new ApplicationException("FailoverTransport does not implement AsyncRequest(Command)");
- }
-
- public Response Request(Command command)
- {
- throw new ApplicationException("FailoverTransport does not implement Request(Command)");
- }
-
- public Response Request(Command command, TimeSpan ts)
- {
- throw new ApplicationException("FailoverTransport does not implement Request(Command, TimeSpan)");
- }
-
- public void OnCommand(ITransport sender, Command command)
- {
- if(command != null)
- {
- if(command.IsResponse)
- {
- Command request = null;
- lock(((ICollection) requestMap).SyncRoot)
- {
- int v = ((Response) command).CorrelationId;
- try
- {
- if(requestMap.TryGetValue(v, out request))
- {
- requestMap.Remove(v);
- }
- }
- catch
- {
- }
- }
-
- Tracked tracked = request as Tracked;
- if(tracked != null)
- {
- tracked.OnResponse();
- }
- }
-
- if(!initialized)
- {
- initialized = true;
- }
-
- if(command.IsConnectionControl)
- {
- this.HandleConnectionControl(command as ConnectionControl);
- }
- }
-
- this.Command(sender, command);
- }
-
- public void Oneway(Command command)
- {
- Exception error = null;
-
- lock(reconnectMutex)
- {
- if(command != null && ConnectedTransport == null)
- {
- if(command.IsShutdownInfo)
- {
- // Skipping send of ShutdownInfo command when not connected.
- return;
- }
- else if(command.IsRemoveInfo || command.IsMessageAck)
- {
- stateTracker.Track(command);
- // Simulate response to RemoveInfo command or a MessageAck
- // since it would be stale at this point.
- if(command.ResponseRequired)
- {
- OnCommand(this, new Response() { CorrelationId = command.CommandId });
- }
- return;
- }
- else if(command.IsMessagePull)
- {
- // Simulate response to MessagePull if timed as we can't honor that now.
- MessagePull pullRequest = command as MessagePull;
- if (pullRequest.Timeout != 0)
- {
- MessageDispatch dispatch = new MessageDispatch();
- dispatch.ConsumerId = pullRequest.ConsumerId;
- dispatch.Destination = pullRequest.Destination;
- OnCommand(this, dispatch);
- }
- return;
- }
- }
-
- // Keep trying until the message is sent.
- for(int i = 0; !disposed; i++)
- {
- try
- {
- // Any Ack that was being sent when the connection dropped is now
- // stale so we don't send it here as it would cause an unmatched ack
- // on the broker side and probably prevent a consumer from getting
- // any new messages.
- if(command.IsMessageAck && i > 0)
- {
- Tracer.Debug("Inflight MessageAck being dropped as stale.");
- if(command.ResponseRequired)
- {
- OnCommand(this, new Response() { CorrelationId = command.CommandId });
- }
- return;
- }
-
- // Wait for transport to be connected.
- ITransport transport = ConnectedTransport;
- DateTime start = DateTime.Now;
- bool timedout = false;
- TimeSpan timewait = TimeSpan.FromMilliseconds(-1);
-
- while(transport == null && !disposed && connectionFailure == null)
- {
- Tracer.Debug("Waiting for transport to reconnect.");
-
- int elapsed = (int) (DateTime.Now - start).TotalMilliseconds;
- if(this.timeout > 0 && elapsed > this.timeout)
- {
- timedout = true;
- Tracer.DebugFormat("FailoverTransport.oneway - timed out after {0} mills", elapsed);
- break;
- }
-
- if(this.timeout > 0)
- {
- // Set the timeout for waiting to be at most 100ms past the maximum timeout length.
- int remainingTime = (this.timeout - elapsed) + 100;
- timewait = TimeSpan.FromMilliseconds(remainingTime);
- }
-
- // Release so that the reconnect task can run
- try
- {
- // Wait for something. The mutex will be pulsed if we connect, or are shut down.
- Monitor.Wait(reconnectMutex, timewait);
- }
- catch(ThreadInterruptedException e)
- {
- Tracer.DebugFormat("Interrupted: {0}", e.Message);
- }
-
- transport = ConnectedTransport;
- }
-
- if(transport == null)
- {
- // Previous loop may have exited due to use being disposed.
- if(disposed)
- {
- error = new IOException("Transport disposed.");
- }
- else if(connectionFailure != null)
- {
- error = connectionFailure;
- }
- else if(timedout)
- {
- error = new IOException("Failover oneway timed out after " + timeout + " milliseconds.");
- }
- else
- {
- error = new IOException("Unexpected failure.");
- }
- break;
- }
-
- // If it was a request and it was not being tracked by
- // the state tracker, then hold it in the requestMap so
- // that we can replay it later.
- Tracked tracked = stateTracker.Track(command);
- lock(((ICollection) requestMap).SyncRoot)
- {
- if(tracked != null && tracked.WaitingForResponse)
- {
- requestMap.Add(command.CommandId, tracked);
- }
- else if(tracked == null && command.ResponseRequired)
- {
- requestMap.Add(command.CommandId, command);
- }
- }
-
- // Send the message.
- try
- {
- transport.Oneway(command);
- stateTracker.TrackBack(command);
- }
- catch(Exception e)
- {
- // If the command was not tracked.. we will retry in this method
- // otherwise we need to trigger a reconnect before returning as
- // the transport is failed.
- if (tracked == null)
- {
- // since we will retry in this method.. take it
- // out of the request map so that it is not
- // sent 2 times on recovery
- if(command.ResponseRequired)
- {
- lock(((ICollection) requestMap).SyncRoot)
- {
- requestMap.Remove(command.CommandId);
- }
- }
-
- // Rethrow the exception so it will handled by
- // the outer catch
- throw;
- }
- else
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}",
- i, e.Message);
- Tracer.DebugFormat("Failed Message Was: {0}", command);
- }
- HandleTransportFailure(e);
- }
- }
-
- return;
- }
- catch(Exception e)
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}",
- i, e.Message);
- Tracer.DebugFormat("Failed Message Was: {0}", command);
- }
- HandleTransportFailure(e);
- }
- }
- }
-
- if(!disposed)
- {
- if(error != null)
- {
- throw error;
- }
- }
- }
-
- public void Add(bool rebalance, Uri[] urisToAdd)
- {
- bool newUri = false;
- lock(uris)
- {
- foreach (Uri uri in urisToAdd)
- {
- if(!Contains(uri))
- {
- uris.Add(uri);
- newUri = true;
- }
- }
- }
-
- if (newUri)
- {
- Reconnect(rebalance);
- }
- }
-
- public void Add(bool rebalance, String u)
- {
- try
- {
- Add(rebalance, new Uri[] { new Uri(u) });
- }
- catch(Exception e)
- {
- Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
- }
- }
-
- public void Remove(bool rebalance, Uri[] u)
- {
- lock(uris)
- {
- for(int i = 0; i < u.Length; i++)
- {
- uris.Remove(u[i]);
- }
- }
-
- Reconnect(rebalance);
- }
-
- public void Remove(bool rebalance, String u)
- {
- try
- {
- Remove(rebalance, new Uri[] { new Uri(u) });
- }
- catch(Exception e)
- {
- Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
- }
- }
-
- public void Reconnect(Uri uri)
- {
- Add(true, new Uri[] { uri });
- }
-
- public void Reconnect(bool rebalance)
- {
- lock(reconnectMutex)
- {
- if(started)
- {
- if (rebalance)
- {
- doRebalance = true;
- }
- Tracer.Debug("Waking up reconnect task");
- try
- {
- reconnectTask.Wakeup();
- }
- catch (ThreadInterruptedException)
- {
- }
- }
- else
- {
- Tracer.Debug("Reconnect was triggered but transport is not started yet. Wait for start to connect the transport.");
- }
- }
- }
-
- private List<Uri> ConnectList
- {
- get
- {
- if (updated.Count != 0)
- {
- return updated;
- }
-
- List<Uri> l = new List<Uri>(uris);
- bool removed = false;
- if(failedConnectTransportURI != null)
- {
- removed = l.Remove(failedConnectTransportURI);
- }
-
- if(Randomize)
- {
- Shuffle(l);
- }
-
- if(removed)
- {
- l.Add(failedConnectTransportURI);
- }
-
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Uri connection list: {0} from: {1}",
- PrintableUriList(l), PrintableUriList(uris));
- }
-
- return l;
- }
- }
-
- protected void RestoreTransport(ITransport t)
- {
- Tracer.Info("Restoring previous transport connection.");
- t.Start();
-
- // Send information to the broker - informing it we are a fault tolerant client
- t.Oneway(new ConnectionControl() { FaultTolerant = true });
- stateTracker.DoRestore(t);
-
- Tracer.Info("Sending queued commands...");
- Dictionary<int, Command> tmpMap = null;
- lock(((ICollection) requestMap).SyncRoot)
- {
- tmpMap = new Dictionary<int, Command>(requestMap);
- }
-
- foreach(Command command in tmpMap.Values)
- {
- if(command.IsMessageAck)
- {
- Tracer.Debug("Stored MessageAck being dropped as stale.");
- OnCommand(this, new Response() { CorrelationId = command.CommandId });
- continue;
- }
-
- t.Oneway(command);
- }
- }
-
- public Uri RemoteAddress
- {
- get
- {
- if(ConnectedTransport != null)
- {
- return ConnectedTransport.RemoteAddress;
- }
- return null;
- }
- }
-
- public Object Narrow(Type type)
- {
- if(this.GetType().Equals(type))
- {
- return this;
- }
- else if(ConnectedTransport != null)
- {
- return ConnectedTransport.Narrow(type);
- }
-
- return null;
- }
-
- private bool DoConnect()
- {
- lock(reconnectMutex)
- {
- if (disposed || connectionFailure != null)
- {
- Monitor.PulseAll(reconnectMutex);
- }
-
- if ((connectedTransport.Value != null && !doRebalance && !priorityBackupAvailable) || disposed || connectionFailure != null)
- {
- return false;
- }
- else
- {
- List<Uri> connectList = ConnectList;
- if(connectList.Count == 0)
- {
- Failure = new NMSConnectionException("No URIs available for connection.");
- }
- else
- {
- if (doRebalance)
- {
- if (connectedToPriority || CompareUris(connectList[0], connectedTransportURI))
- {
- // already connected to first in the list, no need to rebalance
- doRebalance = false;
- return false;
- }
- else
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Doing rebalance from: {0} to {1}",
- connectedTransportURI, PrintableUriList(connectList));
- }
- try
- {
- ITransport current = this.connectedTransport.GetAndSet(null);
- if (current != null)
- {
- DisposeTransport(current);
- }
- }
- catch (Exception e)
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Caught an exception stopping existing " +
- "transport for rebalance {0}", e.Message);
- }
- }
- }
-
- doRebalance = false;
- }
-
- ResetReconnectDelay();
-
- ITransport transport = null;
- Uri uri = null;
-
- // If we have a backup already waiting lets try it.
- lock(backupMutex)
- {
- if ((priorityBackup || backup) && backups.Count > 0)
- {
- List<BackupTransport> l = new List<BackupTransport>(backups);
- if (randomize)
- {
- Shuffle(l);
- }
- BackupTransport bt = l[0];
- l.RemoveAt(0);
- backups.Remove(bt);
- transport = bt.Transport;
- uri = bt.Uri;
- if (priorityBackup && priorityBackupAvailable)
- {
- ITransport old = this.connectedTransport.GetAndSet(null);
- if (old != null)
- {
- DisposeTransport(old);
- }
- priorityBackupAvailable = false;
- }
- }
- }
-
- // Sleep for the reconnectDelay if there's no backup and we aren't trying
- // for the first time, or we were disposed for some reason.
- if (transport == null && !firstConnection && (reconnectDelay > 0) && !disposed)
- {
- lock(sleepMutex)
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Waiting {0} ms before attempting connection.", reconnectDelay);
- }
- try
- {
- Monitor.Wait(sleepMutex, reconnectDelay);
- }
- catch (ThreadInterruptedException)
- {
- }
- }
- }
-
- IEnumerator<Uri> iter = connectList.GetEnumerator();
- while ((transport != null || iter.MoveNext()) && (connectedTransport.Value == null && !disposed))
- {
- try
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Attempting {0}th connect to: {1}",
- connectFailures, uri);
- }
-
- // We could be starting with a backup and if so we wait to grab a
- // URI from the pool until next time around.
- if (transport == null)
- {
- uri = iter.Current;
- transport = TransportFactory.CompositeConnect(uri);
- }
-
- transport.Command = OnCommand;
- transport.Exception = OnException;
- transport.Start();
-
- if (started && !firstConnection)
- {
- RestoreTransport(transport);
- }
-
- if (Tracer.IsDebugEnabled)
- {
- Tracer.Debug("Connection established");
- }
- reconnectDelay = initialReconnectDelay;
- connectedTransportURI = uri;
- connectedTransport.Value = transport;
- connectedToPriority = IsPriority(connectedTransportURI);
- Monitor.PulseAll(reconnectMutex);
- connectFailures = 0;
-
- // Try to wait long enough for client to init the event callbacks.
- listenerLatch.await(TimeSpan.FromSeconds(2));
-
- if (Resumed != null)
- {
- Resumed(transport);
- }
- else
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.Debug("transport resumed by transport listener not set");
- }
- }
-
- if (firstConnection)
- {
- firstConnection = false;
- Tracer.Info("Successfully connected to " + uri);
- }
- else
- {
- Tracer.Info("Successfully reconnected to " + uri);
- }
-
- connected = true;
- return false;
- }
- catch (Exception e)
- {
- failure = e;
- if (Tracer.IsDebugEnabled)
- {
- Tracer.Debug("Connect fail to: " + uri + ", reason: " + e.Message);
- }
- if (transport != null)
- {
- try
- {
- transport.Stop();
- transport = null;
- }
- catch (Exception ee)
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.Debug("Stop of failed transport: " + transport +
- " failed with reason: " + ee.Message);
- }
- }
- }
- }
- }
- }
- }
-
- int reconnectLimit = CalculateReconnectAttemptLimit();
-
- connectFailures++;
- if (reconnectLimit != INFINITE && connectFailures >= reconnectLimit)
- {
- Tracer.ErrorFormat("Failed to connect to {0} after: {1} attempt(s)",
- PrintableUriList(uris), connectFailures);
- connectionFailure = failure;
-
- // Make sure on initial startup, that the transportListener has been
- // initialized for this instance.
- listenerLatch.await(TimeSpan.FromSeconds(2));
- PropagateFailureToExceptionListener(connectionFailure);
- return false;
- }
- }
-
- if(!disposed)
- {
- DoDelay();
- }
-
- return !disposed;
- }
-
- private bool BuildBackups()
- {
- lock(backupMutex)
- {
- if (!disposed && (backup || priorityBackup) && backups.Count < backupPoolSize)
- {
- List<Uri> backupList = new List<Uri>(priorityList);
- List<Uri> connectList = ConnectList;
- foreach(Uri uri in connectList)
- {
- if (!backupList.Contains(uri))
- {
- backupList.Add(uri);
- }
- }
- foreach(BackupTransport bt in backups)
- {
- if(bt.Disposed)
- {
- backups.Remove(bt);
- }
- }
-
- foreach(Uri uri in connectList)
- {
- if (disposed)
- {
- break;
- }
-
- if(ConnectedTransportURI != null && !ConnectedTransportURI.Equals(uri))
- {
- try
- {
- BackupTransport bt = new BackupTransport(this)
- {
- Uri = uri
- };
-
- if(!backups.Contains(bt))
- {
- ITransport t = TransportFactory.CompositeConnect(uri);
- t.Command = bt.OnCommand;
- t.Exception = bt.OnException;
- t.Start();
- bt.Transport = t;
- if (priorityBackup && IsPriority(uri))
- {
- priorityBackupAvailable = true;
- backups.Insert(0, bt);
- }
- else
- {
- backups.Add(bt);
- }
- }
- }
- catch(Exception e)
- {
- Tracer.DebugFormat("Failed to build backup: {0}", e.Message);
- }
- }
-
- if(backups.Count == BackupPoolSize)
- {
- break;
- }
- }
- }
- }
-
- return false;
- }
-
- public void ConnectionInterruptProcessingComplete(ConnectionId connectionId)
- {
- lock(reconnectMutex)
- {
- Tracer.Debug("Connection Interrupt Processing is complete for ConnectionId: " + connectionId);
- stateTracker.ConnectionInterruptProcessingComplete(this, connectionId);
- }
- }
-
- public void UpdateURIs(bool rebalance, Uri[] updatedURIs)
- {
- if(IsUpdateURIsSupported)
- {
- Dictionary<Uri, bool> copy = new Dictionary<Uri, bool>();
- foreach(Uri uri in updated)
- {
- if(uri != null)
- {
- copy[uri] = true;
- }
- }
-
- updated.Clear();
-
- if(updatedURIs != null && updatedURIs.Length > 0)
- {
- Dictionary<Uri, bool> uriSet = new Dictionary<Uri, bool>();
- for(int i = 0; i < updatedURIs.Length; i++)
- {
- Uri uri = updatedURIs[i];
- if(uri != null)
- {
- uriSet[uri] = true;
- }
- }
-
- foreach(Uri uri in uriSet.Keys)
- {
- if(!updated.Contains(uri))
- {
- updated.Add(uri);
- }
- }
-
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Updated URIs list {0}", PrintableUriList(updated));
- }
-
- if (!(copy.Count == 0 && updated.Count == 0) && !copy.Keys.Equals(updated))
- {
- BuildBackups();
- lock(reconnectMutex)
- {
- Reconnect(rebalance);
- }
- }
- }
- }
- }
-
- public void HandleConnectionControl(ConnectionControl control)
- {
- string reconnectStr = control.ReconnectTo;
-
- if(reconnectStr != null)
- {
- reconnectStr = reconnectStr.Trim();
- if(reconnectStr.Length > 0)
- {
- try
- {
- Uri uri = new Uri(reconnectStr);
- if(IsReconnectSupported)
- {
- Tracer.Info("Reconnecting to: " + uri.OriginalString);
- Reconnect(uri);
- }
- }
- catch(Exception e)
- {
- Tracer.ErrorFormat("Failed to handle ConnectionControl reconnect to {0}: {1}", reconnectStr, e);
- }
- }
- }
-
- ProcessNewTransports(control.RebalanceConnection, control.ConnectedBrokers);
- }
-
- private void ProcessNewTransports(bool rebalance, String newTransports)
- {
- if(newTransports != null)
- {
- newTransports = newTransports.Trim();
-
- if(newTransports.Length > 0 && IsUpdateURIsSupported)
- {
- List<Uri> list = new List<Uri>();
- ProcessDelimitedUriList(newTransports, list);
-
- if(list.Count != 0)
- {
- try
- {
- UpdateURIs(rebalance, list.ToArray());
- }
- catch
- {
- Tracer.Error("Failed to update transport URI's from: " + newTransports);
- }
- }
- }
- }
- }
-
- private void ProcessDelimitedUriList(String priorityUris, List<Uri> target)
- {
- String[] tokens = priorityUris.Split(new Char[] { ',' });
-
- foreach(String str in tokens)
- {
- try
- {
- Uri uri = new Uri(str);
- target.Add(uri);
-
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Adding new Uri[{0}] to list,", uri);
- }
- }
- catch (Exception e)
- {
- Tracer.ErrorFormat("Failed to parse broker address: {0} because of: {1}",
- str, e.Message);
- }
- }
- }
-
- public void Dispose()
- {
- Dispose(true);
- GC.SuppressFinalize(this);
- }
-
- public void Dispose(bool disposing)
- {
- this.Stop();
- disposed = true;
- }
-
- public int CompareTo(Object o)
- {
- if(o is FailoverTransport)
- {
- FailoverTransport oo = o as FailoverTransport;
-
- return this.id - oo.id;
- }
- else
- {
- throw new ArgumentException();
- }
- }
-
- public override String ToString()
- {
- return ConnectedTransportURI == null ? "unconnected" : ConnectedTransportURI.ToString();
- }
-
- internal bool IsPriority(Uri uri)
- {
- if (priorityBackup)
- {
- if (priorityList.Count > 0)
- {
- return priorityList.Contains(uri);
- }
-
- if (this.uris.Count > 0)
- {
- return uris[0].Equals(uri);
- }
- }
- return false;
- }
-
- public void DisposeTransport(ITransport transport)
- {
- transport.Command = DisposedOnCommand;
- transport.Exception = DisposedOnException;
-
- try
- {
- transport.Stop();
- }
- catch (Exception e)
- {
- Tracer.DebugFormat("Could not stop transport: {0]. Reason: {1}", transport, e.Message);
- }
- }
-
- private void ResetReconnectDelay()
- {
- if (!useExponentialBackOff || reconnectDelay == DEFAULT_INITIAL_RECONNECT_DELAY)
- {
- reconnectDelay = initialReconnectDelay;
- }
- }
-
- private void DoDelay()
- {
- if (reconnectDelay > 0)
- {
- lock(sleepMutex)
- {
- if (Tracer.IsDebugEnabled)
- {
- Tracer.DebugFormat("Waiting {0} ms before attempting connection", reconnectDelay);
- }
- try
- {
- Monitor.Wait(sleepMutex, reconnectDelay);
- }
- catch (ThreadInterruptedException)
- {
- }
- }
- }
-
- if (useExponentialBackOff)
- {
- // Exponential increment of reconnect delay.
- reconnectDelay *= backOffMultiplier;
- if (reconnectDelay > maxReconnectDelay)
- {
- reconnectDelay = maxReconnectDelay;
- }
- }
- }
-
- private void PropagateFailureToExceptionListener(Exception exception)
- {
- if (Exception != null)
- {
- Exception(this, exception);
- }
- else
- {
- Exception(this, new IOException());
- }
- Monitor.PulseAll(reconnectMutex);
- }
-
- private int CalculateReconnectAttemptLimit()
- {
- int maxReconnectValue = this.maxReconnectAttempts;
- if (firstConnection && this.startupMaxReconnectAttempts != INFINITE)
- {
- maxReconnectValue = this.startupMaxReconnectAttempts;
- }
- return maxReconnectValue;
- }
-
- public void Shuffle<T>(List<T> list)
- {
- Random random = new Random(DateTime.Now.Millisecond);
- int index = list.Count;
- while (index > 1)
- {
- index--;
- int k = random.Next(index + 1);
- T value = list[k];
- list[k] = list[index];
- list[index] = value;
- }
- }
-
- private String PrintableUriList(List<Uri> uriList)
- {
- if (uriList.Count == 0)
- {
- return "";
- }
-
- StringBuilder builder = new StringBuilder();
- for (int i = 0; i < uriList.Count; ++i)
- {
- builder.Append(uriList[i]);
- if (i < (uriList.Count - 1))
- {
- builder.Append(",");
- }
- }
-
- return builder.ToString();
- }
-
- private bool CompareUris(Uri first, Uri second)
- {
- bool result = false;
- if (first.Port == second.Port)
- {
- IPHostEntry firstAddr = null;
- IPHostEntry secondAddr = null;
- try
- {
- firstAddr = Dns.GetHostEntry(first.Host);
- secondAddr = Dns.GetHostEntry(second.Host);
-
- if (firstAddr.Equals(secondAddr))
- {
- result = true;
- }
- }
- catch(Exception e)
- {
- if (firstAddr == null)
- {
- Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", first, e);
- }
- else
- {
- Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", second, e);
- }
-
- if(String.Equals(first.Host, second.Host, StringComparison.CurrentCultureIgnoreCase))
- {
- result = true;
- }
- }
-
- }
-
- return result;
- }
-
- private bool Contains(Uri newURI)
- {
- bool result = false;
- foreach (Uri uri in uris)
- {
- if (CompareUris(newURI, uri))
- {
- result = true;
- break;
- }
- }
-
- return result;
- }
- }
-}
+/*
+ * 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.Collections.Generic;
+using System.Threading;
+using System.Text;
+using System.Net;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.State;
+using Apache.NMS.ActiveMQ.Threads;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Transport.Failover
+{
+ /// <summary>
+ /// A Transport that is made reliable by being able to fail over to another
+ /// transport when a transport failure is detected.
+ /// </summary>
+ public class FailoverTransport : ICompositeTransport, IComparable
+ {
+ private static int DEFAULT_INITIAL_RECONNECT_DELAY = 10;
+ private static int INFINITE = -1;
+
+ private static int idCounter = 0;
+ private readonly int id;
+
+ private bool disposed;
+ private bool connected;
+ private readonly List<Uri> uris = new List<Uri>();
+ private readonly List<Uri> updated = new List<Uri>();
+
+ private CommandHandler commandHandler;
+ private ExceptionHandler exceptionHandler;
+ private InterruptedHandler interruptedHandler;
+ private ResumedHandler resumedHandler;
+
+ private readonly CountDownLatch listenerLatch = new CountDownLatch(4);
+ private readonly Mutex reconnectMutex = new Mutex();
+ private readonly Mutex backupMutex = new Mutex();
+ private readonly Mutex sleepMutex = new Mutex();
+ private readonly ConnectionStateTracker stateTracker = new ConnectionStateTracker();
+ private readonly Dictionary<int, Command> requestMap = new Dictionary<int, Command>();
+
+ private Uri connectedTransportURI;
+ private Uri failedConnectTransportURI;
+ private readonly AtomicReference<ITransport> connectedTransport = new AtomicReference<ITransport>(null);
+ private TaskRunner reconnectTask = null;
+ private bool started;
+ private bool initialized;
+ private int initialReconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
+ private int maxReconnectDelay = 1000 * 30;
+ private int backOffMultiplier = 2;
+ private int timeout = INFINITE;
+ private bool useExponentialBackOff = true;
+ private bool randomize = true;
+ private int maxReconnectAttempts = INFINITE;
+ private int startupMaxReconnectAttempts = INFINITE;
+ private int connectFailures;
+ private int reconnectDelay = DEFAULT_INITIAL_RECONNECT_DELAY;
+ private Exception connectionFailure;
+ private bool firstConnection = true;
+ private bool backup = false;
+ private readonly List<BackupTransport> backups = new List<BackupTransport>();
+ private int backupPoolSize = 1;
+ private bool trackMessages = false;
+ private bool trackTransactionProducers = true;
+ private int maxCacheSize = 256;
+ private volatile Exception failure;
+ private readonly object mutex = new object();
+ private bool reconnectSupported = true;
+ private bool updateURIsSupported = true;
+ private bool doRebalance = false;
+ private bool connectedToPriority = false;
+ private bool priorityBackup = false;
+ private List<Uri> priorityList = new List<Uri>();
+ private bool priorityBackupAvailable = false;
+
+ // Not Sure how to work these back in with all the changes.
+ //private int asyncTimeout = 45000;
+ //private bool asyncConnect = false;
+
+ public FailoverTransport()
+ {
+ id = idCounter++;
+
+ stateTracker.TrackTransactions = true;
+ reconnectTask = DefaultThreadPools.DefaultTaskRunnerFactory.CreateTaskRunner(
+ new FailoverTask(this), "ActiveMQ Failover Worker: " + this.GetHashCode().ToString());
+ }
+
+ ~FailoverTransport()
+ {
+ Dispose(false);
+ }
+
+ #region FailoverTask
+
+ private class FailoverTask : Task
+ {
+ private readonly FailoverTransport parent;
+
+ public FailoverTask(FailoverTransport p)
+ {
+ parent = p;
+ }
+
+ public bool Iterate()
+ {
+ bool result = false;
+ if (!parent.IsStarted)
+ {
+ return false;
+ }
+
+ bool buildBackup = true;
+ lock (parent.backupMutex)
+ {
+ if ((parent.connectedTransport.Value == null || parent.doRebalance || parent.priorityBackupAvailable) && !parent.disposed)
+ {
+ result = parent.DoConnect();
+ buildBackup = false;
+ }
+ }
+ if (buildBackup)
+ {
+ parent.BuildBackups();
+ if (parent.priorityBackup && !parent.connectedToPriority)
+ {
+ try
+ {
+ parent.DoDelay();
+ if (parent.reconnectTask == null)
+ {
+ return true;
+ }
+ parent.reconnectTask.Wakeup();
+ }
+ catch (ThreadInterruptedException)
+ {
+ Tracer.Debug("Reconnect task has been interrupted.");
+ }
+ }
+ }
+ else
+ {
+ try
+ {
+ if (parent.reconnectTask == null)
+ {
+ return true;
+ }
+ parent.reconnectTask.Wakeup();
+ }
+ catch (ThreadInterruptedException)
+ {
+ Tracer.Debug("Reconnect task has been interrupted.");
+ }
+ }
+ return result;
+ }
+ }
+
+ #endregion
+
+ #region Property Accessors
+
+ public CommandHandler Command
+ {
+ get { return commandHandler; }
+ set
+ {
+ commandHandler = value;
+ listenerLatch.countDown();
+ }
+ }
+
+ public ExceptionHandler Exception
+ {
+ get { return exceptionHandler; }
+ set
+ {
+ exceptionHandler = value;
+ listenerLatch.countDown();
+ }
+ }
+
+ public InterruptedHandler Interrupted
+ {
+ get { return interruptedHandler; }
+ set
+ {
+ this.interruptedHandler = value;
+ this.listenerLatch.countDown();
+ }
+ }
+
+ public ResumedHandler Resumed
+ {
+ get { return resumedHandler; }
+ set
+ {
+ this.resumedHandler = value;
+ this.listenerLatch.countDown();
+ }
+ }
+
+ internal Exception Failure
+ {
+ get { return failure; }
+ set
+ {
+ lock(mutex)
+ {
+ failure = value;
+ }
+ }
+ }
+
+ public int Timeout
+ {
+ get { return this.timeout; }
+ set { this.timeout = value; }
+ }
+
+ public int InitialReconnectDelay
+ {
+ get { return initialReconnectDelay; }
+ set { initialReconnectDelay = value; }
+ }
+
+ public int MaxReconnectDelay
+ {
+ get { return maxReconnectDelay; }
+ set { maxReconnectDelay = value; }
+ }
+
+ public int ReconnectDelay
+ {
+ get { return reconnectDelay; }
+ set { reconnectDelay = value; }
+ }
+
+ public int ReconnectDelayExponent
+ {
+ get { return backOffMultiplier; }
+ set { backOffMultiplier = value; }
+ }
+
+ public ITransport ConnectedTransport
+ {
+ get { return connectedTransport.Value; }
+ set { connectedTransport.Value = value; }
+ }
+
+ public Uri ConnectedTransportURI
+ {
+ get { return connectedTransportURI; }
+ set { connectedTransportURI = value; }
+ }
+
+ public int MaxReconnectAttempts
+ {
+ get { return maxReconnectAttempts; }
+ set { maxReconnectAttempts = value; }
+ }
+
+ public int StartupMaxReconnectAttempts
+ {
+ get { return startupMaxReconnectAttempts; }
+ set { startupMaxReconnectAttempts = value; }
+ }
+
+ public bool Randomize
+ {
+ get { return randomize; }
+ set { randomize = value; }
+ }
+
+ public bool Backup
+ {
+ get { return backup; }
+ set { backup = value; }
+ }
+
+ public bool PriorityBackup
+ {
+ get { return priorityBackup; }
+ set { this.priorityBackup = value; }
+ }
+
+ public String PriorityURIs
+ {
+ get { return PrintableUriList(priorityList); }
+ set { this.ProcessDelimitedUriList(value, priorityList); }
+ }
+
+ public int BackupPoolSize
+ {
+ get { return backupPoolSize; }
+ set { backupPoolSize = value; }
+ }
+
+ public bool TrackMessages
+ {
+ get { return trackMessages; }
+ set { trackMessages = value; }
+ }
+
+ public bool TrackTransactionProducers
+ {
+ get { return trackTransactionProducers; }
+ set { this.trackTransactionProducers = value; }
+ }
+
+ public int MaxCacheSize
+ {
+ get { return maxCacheSize; }
+ set { maxCacheSize = value; }
+ }
+
+ public bool UseExponentialBackOff
+ {
+ get { return useExponentialBackOff; }
+ set { useExponentialBackOff = value; }
+ }
+
+ public IWireFormat WireFormat
+ {
+ get
+ {
+ ITransport transport = ConnectedTransport;
+ if(transport != null)
+ {
+ return transport.WireFormat;
+ }
+
+ return null;
+ }
+ }
+
+ /// <summary>
+ /// Gets or sets a value indicating whether to asynchronously connect to sockets
+ /// </summary>
+ /// <value><c>true</c> if [async connect]; otherwise, <c>false</c>.</value>
+ public bool AsyncConnect
+ {
+ set { }
+ }
+
+ /// <summary>
+ /// If doing an asynchronous connect, the milliseconds before timing out if no connection can be made
+ /// </summary>
+ /// <value>The async timeout.</value>
+ public int AsyncTimeout
+ {
+ get { return 0; }
+ set { }
+ }
+
+ public ConnectionStateTracker StateTracker
+ {
+ get { return this.stateTracker; }
+ }
+
+ #endregion
+
+ public bool IsFaultTolerant
+ {
+ get { return true; }
+ }
+
+ public bool IsDisposed
+ {
+ get { return disposed; }
+ }
+
+ public bool IsConnected
+ {
+ get { return connected; }
+ }
+
+ public bool IsConnectedToPriority
+ {
+ get { return connectedToPriority; }
+ }
+
+ public bool IsStarted
+ {
+ get { return started; }
+ }
+
+ public bool IsReconnectSupported
+ {
+ get { return this.reconnectSupported; }
+ }
+
+ public bool IsUpdateURIsSupported
+ {
+ get { return this.updateURIsSupported; }
+ }
+
+ public void OnException(ITransport sender, Exception error)
+ {
+ try
+ {
+ HandleTransportFailure(error);
+ }
+ catch(Exception)
+ {
+ this.Exception(this, new IOException("Unexpected Transport Failure."));
+ }
+ }
+
+ public void DisposedOnCommand(ITransport sender, Command c)
+ {
+ }
+
+ public void DisposedOnException(ITransport sender, Exception e)
+ {
+ }
+
+ public void HandleTransportFailure(Exception e)
+ {
+ ITransport transport = connectedTransport.GetAndSet(null);
+ if (transport == null)
+ {
+ // sync with possible in progress reconnect
+ lock(reconnectMutex)
+ {
+ transport = connectedTransport.GetAndSet(null);
+ }
+ }
+
+ if(transport != null)
+ {
+ DisposeTransport(transport);
+
+ bool reconnectOk = false;
+ lock(reconnectMutex)
+ {
+ if (CanReconnect())
+ {
+ Tracer.WarnFormat("Transport failed to {0}, attempting to automatically reconnect due to: {1}",
+ ConnectedTransportURI, e.Message);
+ reconnectOk = true;
+ }
+
+ initialized = false;
+ failedConnectTransportURI = ConnectedTransportURI;
+ ConnectedTransportURI = null;
+ connectedToPriority = false;
+ connected = false;
+
+ if (reconnectOk)
+ {
+ if(this.Interrupted != null)
+ {
+ this.Interrupted(transport);
+ }
+
+ updated.Remove(failedConnectTransportURI);
+ reconnectTask.Wakeup();
+ }
+ else if (!disposed)
+ {
+ PropagateFailureToExceptionListener(e);
+ }
+ }
+ }
+ }
+
+ private bool CanReconnect()
+ {
+ return started && 0 != CalculateReconnectAttemptLimit();
+ }
+
+ public void Start()
+ {
+ lock(reconnectMutex)
+ {
+ if(started)
+ {
+ Tracer.Debug("FailoverTransport Already Started.");
+ return;
+ }
+
+ Tracer.Debug("FailoverTransport Started.");
+ started = true;
+ stateTracker.MaxCacheSize = MaxCacheSize;
+ stateTracker.TrackMessages = TrackMessages;
+ stateTracker.TrackTransactionProducers = TrackTransactionProducers;
+ if(ConnectedTransport != null)
+ {
+ Tracer.Debug("FailoverTransport already connected, start is restoring.");
+ stateTracker.DoRestore(ConnectedTransport);
+ }
+ else
+ {
+ Tracer.Debug("FailoverTransport not connected, start is reconnecting.");
+ Reconnect(false);
+ }
+ }
+ }
+
+ public virtual void Stop()
+ {
+ ITransport transportToStop = null;
+ List<ITransport> backupsToStop = new List<ITransport>(backups.Count);
+
+ try
+ {
+ lock(reconnectMutex)
+ {
+ if(!started)
+ {
+ Tracer.Debug("FailoverTransport Already Stopped.");
+ return;
+ }
+
+ Tracer.Debug("FailoverTransport Stopped.");
+ started = false;
+ disposed = true;
+ connected = false;
+ if(ConnectedTransport != null)
+ {
+ transportToStop = connectedTransport.GetAndSet(null);
+ }
+
+ }
+ lock(sleepMutex)
+ {
+ Monitor.PulseAll(sleepMutex);
+ }
+ }
+ finally
+ {
+ if(reconnectTask != null)
+ {
+ reconnectTask.Shutdown();
+ }
+ }
+
+ lock(backupMutex)
+ {
+ foreach (BackupTransport backup in backups)
+ {
+ backup.Disposed = true;
+ ITransport transport = backup.Transport;
+ if (transport != null)
+ {
+ transport.Command = DisposedOnCommand;
+ transport.Exception = DisposedOnException;
+ backupsToStop.Add(transport);
+ }
+ }
+ backups.Clear();
+ }
+
+ foreach (ITransport transport in backupsToStop)
+ {
+ try
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.Debug("Stopped backup: " + transport);
+ }
+ DisposeTransport(transport);
+ }
+ catch (Exception)
+ {
+ }
+ }
+
+ if(transportToStop != null)
+ {
+ transportToStop.Stop();
+ }
+ }
+
+ public FutureResponse AsyncRequest(Command command)
+ {
+ throw new ApplicationException("FailoverTransport does not implement AsyncRequest(Command)");
+ }
+
+ public Response Request(Command command)
+ {
+ throw new ApplicationException("FailoverTransport does not implement Request(Command)");
+ }
+
+ public Response Request(Command command, TimeSpan ts)
+ {
+ throw new ApplicationException("FailoverTransport does not implement Request(Command, TimeSpan)");
+ }
+
+ public void OnCommand(ITransport sender, Command command)
+ {
+ if(command != null)
+ {
+ if(command.IsResponse)
+ {
+ Command request = null;
+ lock(((ICollection) requestMap).SyncRoot)
+ {
+ int v = ((Response) command).CorrelationId;
+ try
+ {
+ if(requestMap.TryGetValue(v, out request))
+ {
+ requestMap.Remove(v);
+ }
+ }
+ catch
+ {
+ }
+ }
+
+ Tracked tracked = request as Tracked;
+ if(tracked != null)
+ {
+ tracked.OnResponse();
+ }
+ }
+
+ if(!initialized)
+ {
+ initialized = true;
+ }
+
+ if(command.IsConnectionControl)
+ {
+ this.HandleConnectionControl(command as ConnectionControl);
+ }
+ }
+
+ this.Command(sender, command);
+ }
+
+ public void Oneway(Command command)
+ {
+ Exception error = null;
+
+ lock(reconnectMutex)
+ {
+ if(command != null && ConnectedTransport == null)
+ {
+ if(command.IsShutdownInfo)
+ {
+ // Skipping send of ShutdownInfo command when not connected.
+ return;
+ }
+ else if(command.IsRemoveInfo || command.IsMessageAck)
+ {
+ stateTracker.Track(command);
+ // Simulate response to RemoveInfo command or a MessageAck
+ // since it would be stale at this point.
+ if(command.ResponseRequired)
+ {
+ OnCommand(this, new Response() { CorrelationId = command.CommandId });
+ }
+ return;
+ }
+ else if(command.IsMessagePull)
+ {
+ // Simulate response to MessagePull if timed as we can't honor that now.
+ MessagePull pullRequest = command as MessagePull;
+ if (pullRequest.Timeout != 0)
+ {
+ MessageDispatch dispatch = new MessageDispatch();
+ dispatch.ConsumerId = pullRequest.ConsumerId;
+ dispatch.Destination = pullRequest.Destination;
+ OnCommand(this, dispatch);
+ }
+ return;
+ }
+ }
+
+ // Keep trying until the message is sent.
+ for(int i = 0; !disposed; i++)
+ {
+ try
+ {
+ // Any Ack that was being sent when the connection dropped is now
+ // stale so we don't send it here as it would cause an unmatched ack
+ // on the broker side and probably prevent a consumer from getting
+ // any new messages.
+ if(command.IsMessageAck && i > 0)
+ {
+ Tracer.Debug("Inflight MessageAck being dropped as stale.");
+ if(command.ResponseRequired)
+ {
+ OnCommand(this, new Response() { CorrelationId = command.CommandId });
+ }
+ return;
+ }
+
+ // Wait for transport to be connected.
+ ITransport transport = ConnectedTransport;
+ DateTime start = DateTime.Now;
+ bool timedout = false;
+ TimeSpan timewait = TimeSpan.FromMilliseconds(-1);
+
+ while(transport == null && !disposed && connectionFailure == null)
+ {
+ Tracer.Debug("Waiting for transport to reconnect.");
+
+ int elapsed = (int) (DateTime.Now - start).TotalMilliseconds;
+ if(this.timeout > 0 && elapsed > this.timeout)
+ {
+ timedout = true;
+ Tracer.DebugFormat("FailoverTransport.oneway - timed out after {0} mills", elapsed);
+ break;
+ }
+
+ if(this.timeout > 0)
+ {
+ // Set the timeout for waiting to be at most 100ms past the maximum timeout length.
+ int remainingTime = (this.timeout - elapsed) + 100;
+ timewait = TimeSpan.FromMilliseconds(remainingTime);
+ }
+
+ // Release so that the reconnect task can run
+ try
+ {
+ // Wait for something. The mutex will be pulsed if we connect, or are shut down.
+ Monitor.Wait(reconnectMutex, timewait);
+ }
+ catch(ThreadInterruptedException e)
+ {
+ Tracer.DebugFormat("Interrupted: {0}", e.Message);
+ }
+
+ transport = ConnectedTransport;
+ }
+
+ if(transport == null)
+ {
+ // Previous loop may have exited due to use being disposed.
+ if(disposed)
+ {
+ error = new IOException("Transport disposed.");
+ }
+ else if(connectionFailure != null)
+ {
+ error = connectionFailure;
+ }
+ else if(timedout)
+ {
+ error = new IOException("Failover oneway timed out after " + timeout + " milliseconds.");
+ }
+ else
+ {
+ error = new IOException("Unexpected failure.");
+ }
+ break;
+ }
+
+ // If it was a request and it was not being tracked by
+ // the state tracker, then hold it in the requestMap so
+ // that we can replay it later.
+ Tracked tracked = stateTracker.Track(command);
+ lock(((ICollection) requestMap).SyncRoot)
+ {
+ if(tracked != null && tracked.WaitingForResponse)
+ {
+ requestMap.Add(command.CommandId, tracked);
+ }
+ else if(tracked == null && command.ResponseRequired)
+ {
+ requestMap.Add(command.CommandId, command);
+ }
+ }
+
+ // Send the message.
+ try
+ {
+ transport.Oneway(command);
+ stateTracker.TrackBack(command);
+ }
+ catch(Exception e)
+ {
+ // If the command was not tracked.. we will retry in this method
+ // otherwise we need to trigger a reconnect before returning as
+ // the transport is failed.
+ if (tracked == null)
+ {
+ // since we will retry in this method.. take it
+ // out of the request map so that it is not
+ // sent 2 times on recovery
+ if(command.ResponseRequired)
+ {
+ lock(((ICollection) requestMap).SyncRoot)
+ {
+ requestMap.Remove(command.CommandId);
+ }
+ }
+
+ // Rethrow the exception so it will handled by
+ // the outer catch
+ throw;
+ }
+ else
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}",
+ i, e.Message);
+ Tracer.DebugFormat("Failed Message Was: {0}", command);
+ }
+ HandleTransportFailure(e);
+ }
+ }
+
+ return;
+ }
+ catch(Exception e)
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Send Oneway attempt: {0} failed: Message = {1}",
+ i, e.Message);
+ Tracer.DebugFormat("Failed Message Was: {0}", command);
+ }
+ HandleTransportFailure(e);
+ }
+ }
+ }
+
+ if(!disposed)
+ {
+ if(error != null)
+ {
+ throw error;
+ }
+ }
+ }
+
+ public void Add(bool rebalance, Uri[] urisToAdd)
+ {
+ bool newUri = false;
+ lock(uris)
+ {
+ foreach (Uri uri in urisToAdd)
+ {
+ if(!Contains(uri))
+ {
+ uris.Add(uri);
+ newUri = true;
+ }
+ }
+ }
+
+ if (newUri)
+ {
+ Reconnect(rebalance);
+ }
+ }
+
+ public void Add(bool rebalance, String u)
+ {
+ try
+ {
+ Add(rebalance, new Uri[] { new Uri(u) });
+ }
+ catch(Exception e)
+ {
+ Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
+ }
+ }
+
+ public void Remove(bool rebalance, Uri[] u)
+ {
+ lock(uris)
+ {
+ for(int i = 0; i < u.Length; i++)
+ {
+ uris.Remove(u[i]);
+ }
+ }
+
+ Reconnect(rebalance);
+ }
+
+ public void Remove(bool rebalance, String u)
+ {
+ try
+ {
+ Remove(rebalance, new Uri[] { new Uri(u) });
+ }
+ catch(Exception e)
+ {
+ Tracer.ErrorFormat("Failed to parse URI '{0}': {1}", u, e.Message);
+ }
+ }
+
+ public void Reconnect(Uri uri)
+ {
+ Add(true, new Uri[] { uri });
+ }
+
+ public void Reconnect(bool rebalance)
+ {
+ lock(reconnectMutex)
+ {
+ if(started)
+ {
+ if (rebalance)
+ {
+ doRebalance = true;
+ }
+ Tracer.Debug("Waking up reconnect task");
+ try
+ {
+ reconnectTask.Wakeup();
+ }
+ catch (ThreadInterruptedException)
+ {
+ }
+ }
+ else
+ {
+ Tracer.Debug("Reconnect was triggered but transport is not started yet. Wait for start to connect the transport.");
+ }
+ }
+ }
+
+ private List<Uri> ConnectList
+ {
+ get
+ {
+ if (updated.Count != 0)
+ {
+ return updated;
+ }
+
+ List<Uri> l = new List<Uri>(uris);
+ bool removed = false;
+ if(failedConnectTransportURI != null)
+ {
+ removed = l.Remove(failedConnectTransportURI);
+ }
+
+ if(Randomize)
+ {
+ Shuffle(l);
+ }
+
+ if(removed)
+ {
+ l.Add(failedConnectTransportURI);
+ }
+
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Uri connection list: {0} from: {1}",
+ PrintableUriList(l), PrintableUriList(uris));
+ }
+
+ return l;
+ }
+ }
+
+ protected void RestoreTransport(ITransport t)
+ {
+ Tracer.Info("Restoring previous transport connection.");
+ t.Start();
+
+ // Send information to the broker - informing it we are a fault tolerant client
+ t.Oneway(new ConnectionControl() { FaultTolerant = true });
+ stateTracker.DoRestore(t);
+
+ Tracer.Info("Sending queued commands...");
+ Dictionary<int, Command> tmpMap = null;
+ lock(((ICollection) requestMap).SyncRoot)
+ {
+ tmpMap = new Dictionary<int, Command>(requestMap);
+ }
+
+ foreach(Command command in tmpMap.Values)
+ {
+ if(command.IsMessageAck)
+ {
+ Tracer.Debug("Stored MessageAck being dropped as stale.");
+ OnCommand(this, new Response() { CorrelationId = command.CommandId });
+ continue;
+ }
+
+ t.Oneway(command);
+ }
+ }
+
+ public Uri RemoteAddress
+ {
+ get
+ {
+ if(ConnectedTransport != null)
+ {
+ return ConnectedTransport.RemoteAddress;
+ }
+ return null;
+ }
+ }
+
+ public Object Narrow(Type type)
+ {
+ if(this.GetType().Equals(type))
+ {
+ return this;
+ }
+ else if(ConnectedTransport != null)
+ {
+ return ConnectedTransport.Narrow(type);
+ }
+
+ return null;
+ }
+
+ private bool DoConnect()
+ {
+ lock(reconnectMutex)
+ {
+ if (disposed || connectionFailure != null)
+ {
+ Monitor.PulseAll(reconnectMutex);
+ }
+
+ if ((connectedTransport.Value != null && !doRebalance && !priorityBackupAvailable) || disposed || connectionFailure != null)
+ {
+ return false;
+ }
+ else
+ {
+ List<Uri> connectList = ConnectList;
+ if(connectList.Count == 0)
+ {
+ Failure = new NMSConnectionException("No URIs available for connection.");
+ }
+ else
+ {
+ if (doRebalance)
+ {
+ if (connectedToPriority || CompareUris(connectList[0], connectedTransportURI))
+ {
+ // already connected to first in the list, no need to rebalance
+ doRebalance = false;
+ return false;
+ }
+ else
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Doing rebalance from: {0} to {1}",
+ connectedTransportURI, PrintableUriList(connectList));
+ }
+ try
+ {
+ ITransport current = this.connectedTransport.GetAndSet(null);
+ if (current != null)
+ {
+ DisposeTransport(current);
+ }
+ }
+ catch (Exception e)
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Caught an exception stopping existing " +
+ "transport for rebalance {0}", e.Message);
+ }
+ }
+ }
+
+ doRebalance = false;
+ }
+
+ ResetReconnectDelay();
+
+ ITransport transport = null;
+ Uri uri = null;
+
+ // If we have a backup already waiting lets try it.
+ lock(backupMutex)
+ {
+ if ((priorityBackup || backup) && backups.Count > 0)
+ {
+ List<BackupTransport> l = new List<BackupTransport>(backups);
+ if (randomize)
+ {
+ Shuffle(l);
+ }
+ BackupTransport bt = l[0];
+ l.RemoveAt(0);
+ backups.Remove(bt);
+ transport = bt.Transport;
+ uri = bt.Uri;
+ if (priorityBackup && priorityBackupAvailable)
+ {
+ ITransport old = this.connectedTransport.GetAndSet(null);
+ if (old != null)
+ {
+ DisposeTransport(old);
+ }
+ priorityBackupAvailable = false;
+ }
+ }
+ }
+
+ // Sleep for the reconnectDelay if there's no backup and we aren't trying
+ // for the first time, or we were disposed for some reason.
+ if (transport == null && !firstConnection && (reconnectDelay > 0) && !disposed)
+ {
+ lock(sleepMutex)
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Waiting {0} ms before attempting connection.", reconnectDelay);
+ }
+ try
+ {
+ Monitor.Wait(sleepMutex, reconnectDelay);
+ }
+ catch (ThreadInterruptedException)
+ {
+ }
+ }
+ }
+
+ IEnumerator<Uri> iter = connectList.GetEnumerator();
+ while ((transport != null || iter.MoveNext()) && (connectedTransport.Value == null && !disposed))
+ {
+ try
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Attempting {0}th connect to: {1}",
+ connectFailures, uri);
+ }
+
+ // We could be starting with a backup and if so we wait to grab a
+ // URI from the pool until next time around.
+ if (transport == null)
+ {
+ uri = iter.Current;
+ transport = TransportFactory.CompositeConnect(uri);
+ }
+
+ transport.Command = OnCommand;
+ transport.Exception = OnException;
+ transport.Start();
+
+ if (started && !firstConnection)
+ {
+ RestoreTransport(transport);
+ }
+
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.Debug("Connection established");
+ }
+ reconnectDelay = initialReconnectDelay;
+ connectedTransportURI = uri;
+ connectedTransport.Value = transport;
+ connectedToPriority = IsPriority(connectedTransportURI);
+ Monitor.PulseAll(reconnectMutex);
+ connectFailures = 0;
+
+ // Try to wait long enough for client to init the event callbacks.
+ listenerLatch.await(TimeSpan.FromSeconds(2));
+
+ if (Resumed != null)
+ {
+ Resumed(transport);
+ }
+ else
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.Debug("transport resumed by transport listener not set");
+ }
+ }
+
+ if (firstConnection)
+ {
+ firstConnection = false;
+ Tracer.Info("Successfully connected to " + uri);
+ }
+ else
+ {
+ Tracer.Info("Successfully reconnected to " + uri);
+ }
+
+ connected = true;
+ return false;
+ }
+ catch (Exception e)
+ {
+ failure = e;
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.Debug("Connect fail to: " + uri + ", reason: " + e.Message);
+ }
+ if (transport != null)
+ {
+ try
+ {
+ transport.Stop();
+ transport = null;
+ }
+ catch (Exception ee)
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.Debug("Stop of failed transport: " + transport +
+ " failed with reason: " + ee.Message);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ int reconnectLimit = CalculateReconnectAttemptLimit();
+
+ connectFailures++;
+ if (reconnectLimit != INFINITE && connectFailures >= reconnectLimit)
+ {
+ Tracer.ErrorFormat("Failed to connect to {0} after: {1} attempt(s)",
+ PrintableUriList(uris), connectFailures);
+ connectionFailure = failure;
+
+ // Make sure on initial startup, that the transportListener has been
+ // initialized for this instance.
+ listenerLatch.await(TimeSpan.FromSeconds(2));
+ PropagateFailureToExceptionListener(connectionFailure);
+ return false;
+ }
+ }
+
+ if(!disposed)
+ {
+ DoDelay();
+ }
+
+ return !disposed;
+ }
+
+ private bool BuildBackups()
+ {
+ lock(backupMutex)
+ {
+ if (!disposed && (backup || priorityBackup) && backups.Count < backupPoolSize)
+ {
+ List<Uri> backupList = new List<Uri>(priorityList);
+ List<Uri> connectList = ConnectList;
+ foreach(Uri uri in connectList)
+ {
+ if (!backupList.Contains(uri))
+ {
+ backupList.Add(uri);
+ }
+ }
+ foreach(BackupTransport bt in backups)
+ {
+ if(bt.Disposed)
+ {
+ backups.Remove(bt);
+ }
+ }
+
+ foreach(Uri uri in connectList)
+ {
+ if (disposed)
+ {
+ break;
+ }
+
+ if(ConnectedTransportURI != null && !ConnectedTransportURI.Equals(uri))
+ {
+ try
+ {
+ BackupTransport bt = new BackupTransport(this)
+ {
+ Uri = uri
+ };
+
+ if(!backups.Contains(bt))
+ {
+ ITransport t = TransportFactory.CompositeConnect(uri);
+ t.Command = bt.OnCommand;
+ t.Exception = bt.OnException;
+ t.Start();
+ bt.Transport = t;
+ if (priorityBackup && IsPriority(uri))
+ {
+ priorityBackupAvailable = true;
+ backups.Insert(0, bt);
+ }
+ else
+ {
+ backups.Add(bt);
+ }
+ }
+ }
+ catch(Exception e)
+ {
+ Tracer.DebugFormat("Failed to build backup: {0}", e.Message);
+ }
+ }
+
+ if(backups.Count == BackupPoolSize)
+ {
+ break;
+ }
+ }
+ }
+ }
+
+ return false;
+ }
+
+ public void ConnectionInterruptProcessingComplete(ConnectionId connectionId)
+ {
+ lock(reconnectMutex)
+ {
+ Tracer.Debug("Connection Interrupt Processing is complete for ConnectionId: " + connectionId);
+ stateTracker.ConnectionInterruptProcessingComplete(this, connectionId);
+ }
+ }
+
+ public void UpdateURIs(bool rebalance, Uri[] updatedURIs)
+ {
+ if(IsUpdateURIsSupported)
+ {
+ Dictionary<Uri, bool> copy = new Dictionary<Uri, bool>();
+ foreach(Uri uri in updated)
+ {
+ if(uri != null)
+ {
+ copy[uri] = true;
+ }
+ }
+
+ updated.Clear();
+
+ if(updatedURIs != null && updatedURIs.Length > 0)
+ {
+ Dictionary<Uri, bool> uriSet = new Dictionary<Uri, bool>();
+ for(int i = 0; i < updatedURIs.Length; i++)
+ {
+ Uri uri = updatedURIs[i];
+ if(uri != null)
+ {
+ uriSet[uri] = true;
+ }
+ }
+
+ foreach(Uri uri in uriSet.Keys)
+ {
+ if(!updated.Contains(uri))
+ {
+ updated.Add(uri);
+ }
+ }
+
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Updated URIs list {0}", PrintableUriList(updated));
+ }
+
+ if (!(copy.Count == 0 && updated.Count == 0) && !copy.Keys.Equals(updated))
+ {
+ BuildBackups();
+ lock(reconnectMutex)
+ {
+ Reconnect(rebalance);
+ }
+ }
+ }
+ }
+ }
+
+ public void HandleConnectionControl(ConnectionControl control)
+ {
+ string reconnectStr = control.ReconnectTo;
+
+ if(reconnectStr != null)
+ {
+ reconnectStr = reconnectStr.Trim();
+ if(reconnectStr.Length > 0)
+ {
+ try
+ {
+ Uri uri = new Uri(reconnectStr);
+ if(IsReconnectSupported)
+ {
+ Tracer.Info("Reconnecting to: " + uri.OriginalString);
+ Reconnect(uri);
+ }
+ }
+ catch(Exception e)
+ {
+ Tracer.ErrorFormat("Failed to handle ConnectionControl reconnect to {0}: {1}", reconnectStr, e);
+ }
+ }
+ }
+
+ ProcessNewTransports(control.RebalanceConnection, control.ConnectedBrokers);
+ }
+
+ private void ProcessNewTransports(bool rebalance, String newTransports)
+ {
+ if(newTransports != null)
+ {
+ newTransports = newTransports.Trim();
+
+ if(newTransports.Length > 0 && IsUpdateURIsSupported)
+ {
+ List<Uri> list = new List<Uri>();
+ ProcessDelimitedUriList(newTransports, list);
+
+ if(list.Count != 0)
+ {
+ try
+ {
+ UpdateURIs(rebalance, list.ToArray());
+ }
+ catch
+ {
+ Tracer.Error("Failed to update transport URI's from: " + newTransports);
+ }
+ }
+ }
+ }
+ }
+
+ private void ProcessDelimitedUriList(String priorityUris, List<Uri> target)
+ {
+ String[] tokens = priorityUris.Split(new Char[] { ',' });
+
+ foreach(String str in tokens)
+ {
+ try
+ {
+ Uri uri = new Uri(str);
+ target.Add(uri);
+
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Adding new Uri[{0}] to list,", uri);
+ }
+ }
+ catch (Exception e)
+ {
+ Tracer.ErrorFormat("Failed to parse broker address: {0} because of: {1}",
+ str, e.Message);
+ }
+ }
+ }
+
+ public void Dispose()
+ {
+ Dispose(true);
+ GC.SuppressFinalize(this);
+ }
+
+ public void Dispose(bool disposing)
+ {
+ this.Stop();
+ disposed = true;
+ }
+
+ public int CompareTo(Object o)
+ {
+ if(o is FailoverTransport)
+ {
+ FailoverTransport oo = o as FailoverTransport;
+
+ return this.id - oo.id;
+ }
+ else
+ {
+ throw new ArgumentException();
+ }
+ }
+
+ public override String ToString()
+ {
+ return ConnectedTransportURI == null ? "unconnected" : ConnectedTransportURI.ToString();
+ }
+
+ internal bool IsPriority(Uri uri)
+ {
+ if (priorityBackup)
+ {
+ if (priorityList.Count > 0)
+ {
+ return priorityList.Contains(uri);
+ }
+
+ if (this.uris.Count > 0)
+ {
+ return uris[0].Equals(uri);
+ }
+ }
+ return false;
+ }
+
+ public void DisposeTransport(ITransport transport)
+ {
+ transport.Command = DisposedOnCommand;
+ transport.Exception = DisposedOnException;
+
+ try
+ {
+ transport.Stop();
+ }
+ catch (Exception e)
+ {
+ Tracer.DebugFormat("Could not stop transport: {0]. Reason: {1}", transport, e.Message);
+ }
+ }
+
+ private void ResetReconnectDelay()
+ {
+ if (!useExponentialBackOff || reconnectDelay == DEFAULT_INITIAL_RECONNECT_DELAY)
+ {
+ reconnectDelay = initialReconnectDelay;
+ }
+ }
+
+ private void DoDelay()
+ {
+ if (reconnectDelay > 0)
+ {
+ lock(sleepMutex)
+ {
+ if (Tracer.IsDebugEnabled)
+ {
+ Tracer.DebugFormat("Waiting {0} ms before attempting connection", reconnectDelay);
+ }
+ try
+ {
+ Monitor.Wait(sleepMutex, reconnectDelay);
+ }
+ catch (ThreadInterruptedException)
+ {
+ }
+ }
+ }
+
+ if (useExponentialBackOff)
+ {
+ // Exponential increment of reconnect delay.
+ reconnectDelay *= backOffMultiplier;
+ if (reconnectDelay > maxReconnectDelay)
+ {
+ reconnectDelay = maxReconnectDelay;
+ }
+ }
+ }
+
+ private void PropagateFailureToExceptionListener(Exception exception)
+ {
+ if (Exception != null)
+ {
+ Exception(this, exception);
+ }
+ else
+ {
+ Exception(this, new IOException());
+ }
+ Monitor.PulseAll(reconnectMutex);
+ }
+
+ private int CalculateReconnectAttemptLimit()
+ {
+ int maxReconnectValue = this.maxReconnectAttempts;
+ if (firstConnection && this.startupMaxReconnectAttempts != INFINITE)
+ {
+ maxReconnectValue = this.startupMaxReconnectAttempts;
+ }
+ return maxReconnectValue;
+ }
+
+ public void Shuffle<T>(List<T> list)
+ {
+ Random random = new Random(DateTime.Now.Millisecond);
+ int index = list.Count;
+ while (index > 1)
+ {
+ index--;
+ int k = random.Next(index + 1);
+ T value = list[k];
+ list[k] = list[index];
+ list[index] = value;
+ }
+ }
+
+ private String PrintableUriList(List<Uri> uriList)
+ {
+ if (uriList.Count == 0)
+ {
+ return "";
+ }
+
+ StringBuilder builder = new StringBuilder();
+ for (int i = 0; i < uriList.Count; ++i)
+ {
+ builder.Append(uriList[i]);
+ if (i < (uriList.Count - 1))
+ {
+ builder.Append(",");
+ }
+ }
+
+ return builder.ToString();
+ }
+
+ private bool CompareUris(Uri first, Uri second)
+ {
+ bool result = false;
+ if (first.Port == second.Port)
+ {
+ IPHostEntry firstAddr = null;
+ IPHostEntry secondAddr = null;
+ try
+ {
+ firstAddr = Dns.GetHostEntry(first.Host);
+ secondAddr = Dns.GetHostEntry(second.Host);
+
+ if (firstAddr.Equals(secondAddr))
+ {
+ result = true;
+ }
+ }
+ catch(Exception e)
+ {
+ if (firstAddr == null)
+ {
+ Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", first, e);
+ }
+ else
+ {
+ Tracer.WarnFormat("Failed to Lookup IPHostEntry for URI[{0}] : {1}", second, e);
+ }
+
+ if(String.Equals(first.Host, second.Host, StringComparison.CurrentCultureIgnoreCase))
+ {
+ result = true;
+ }
+ }
+
+ }
+
+ return result;
+ }
+
+ private bool Contains(Uri newURI)
+ {
+ bool result = false;
+ foreach (Uri uri in uris)
+ {
+ if (CompareUris(newURI, uri))
+ {
+ result = true;
+ break;
+ }
+ }
+
+ return result;
+ }
+ }
+}
diff --git a/src/main/csharp/Transport/Failover/FailoverTransportFactory.cs b/src/Transport/Failover/FailoverTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Failover/FailoverTransportFactory.cs
rename to src/Transport/Failover/FailoverTransportFactory.cs
diff --git a/src/main/csharp/Transport/FutureResponse.cs b/src/Transport/FutureResponse.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Transport/FutureResponse.cs
rename to src/Transport/FutureResponse.cs
diff --git a/src/main/csharp/Transport/ICompositeTransport.cs b/src/Transport/ICompositeTransport.cs
similarity index 99%
rename from src/main/csharp/Transport/ICompositeTransport.cs
rename to src/Transport/ICompositeTransport.cs
index b08b27a..85cdf1b 100644
--- a/src/main/csharp/Transport/ICompositeTransport.cs
+++ b/src/Transport/ICompositeTransport.cs
@@ -1,49 +1,49 @@
-/*
- * 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;
-
-namespace Apache.NMS.ActiveMQ.Transport
-{
- public interface ICompositeTransport : ITransport
- {
- /// <summary>
- /// Adds a new set of Uris to the list of Uris that this Transport can connect to.
- /// </summary>
- /// <param name="rebalance">
- /// A <see cref="System.Boolean"/>
- /// Should the current connection be broken and a new one created.
- /// </param>
- /// <param name="uris">
- /// A <see cref="Uri"/>
- /// </param>
- void Add(bool rebalance, Uri[] uris);
-
- /// <summary>
- /// Remove the given Uris from this Transports list of known Uris.
- /// </summary>
- /// <param name="rebalance">
- /// A <see cref="System.Boolean"/>
- /// Should the current connection be broken and a new one created.
- /// </param>
- /// <param name="uris">
- /// A <see cref="Uri"/>
- /// </param>
- void Remove(bool rebalance, Uri[] uris);
- }
-}
-
+/*
+ * 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;
+
+namespace Apache.NMS.ActiveMQ.Transport
+{
+ public interface ICompositeTransport : ITransport
+ {
+ /// <summary>
+ /// Adds a new set of Uris to the list of Uris that this Transport can connect to.
+ /// </summary>
+ /// <param name="rebalance">
+ /// A <see cref="System.Boolean"/>
+ /// Should the current connection be broken and a new one created.
+ /// </param>
+ /// <param name="uris">
+ /// A <see cref="Uri"/>
+ /// </param>
+ void Add(bool rebalance, Uri[] uris);
+
+ /// <summary>
+ /// Remove the given Uris from this Transports list of known Uris.
+ /// </summary>
+ /// <param name="rebalance">
+ /// A <see cref="System.Boolean"/>
+ /// Should the current connection be broken and a new one created.
+ /// </param>
+ /// <param name="uris">
+ /// A <see cref="Uri"/>
+ /// </param>
+ void Remove(bool rebalance, Uri[] uris);
+ }
+}
+
diff --git a/src/main/csharp/Transport/ITransport.cs b/src/Transport/ITransport.cs
old mode 100755
new mode 100644
similarity index 100%
rename from src/main/csharp/Transport/ITransport.cs
rename to src/Transport/ITransport.cs
diff --git a/src/main/csharp/Transport/ITransportFactory.cs b/src/Transport/ITransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/ITransportFactory.cs
rename to src/Transport/ITransportFactory.cs
diff --git a/src/main/csharp/Transport/IWireFormat.cs b/src/Transport/IWireFormat.cs
similarity index 100%
rename from src/main/csharp/Transport/IWireFormat.cs
rename to src/Transport/IWireFormat.cs
diff --git a/src/main/csharp/Transport/InactivityMonitor.cs b/src/Transport/InactivityMonitor.cs
similarity index 100%
rename from src/main/csharp/Transport/InactivityMonitor.cs
rename to src/Transport/InactivityMonitor.cs
diff --git a/src/main/csharp/Transport/LoggingTransport.cs b/src/Transport/LoggingTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/LoggingTransport.cs
rename to src/Transport/LoggingTransport.cs
diff --git a/src/main/csharp/Transport/Mock/IResponseBuilder.cs b/src/Transport/Mock/IResponseBuilder.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/IResponseBuilder.cs
rename to src/Transport/Mock/IResponseBuilder.cs
diff --git a/src/main/csharp/Transport/Mock/MockTransport.cs b/src/Transport/Mock/MockTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/MockTransport.cs
rename to src/Transport/Mock/MockTransport.cs
diff --git a/src/main/csharp/Transport/Mock/MockTransportFactory.cs b/src/Transport/Mock/MockTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/MockTransportFactory.cs
rename to src/Transport/Mock/MockTransportFactory.cs
diff --git a/src/main/csharp/Transport/Mock/OpenWireResponseBuilder.cs b/src/Transport/Mock/OpenWireResponseBuilder.cs
similarity index 100%
rename from src/main/csharp/Transport/Mock/OpenWireResponseBuilder.cs
rename to src/Transport/Mock/OpenWireResponseBuilder.cs
diff --git a/src/main/csharp/Transport/MutexTransport.cs b/src/Transport/MutexTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/MutexTransport.cs
rename to src/Transport/MutexTransport.cs
diff --git a/src/main/csharp/Transport/ResponseCorrelator.cs b/src/Transport/ResponseCorrelator.cs
similarity index 100%
rename from src/main/csharp/Transport/ResponseCorrelator.cs
rename to src/Transport/ResponseCorrelator.cs
diff --git a/src/main/csharp/Transport/Tcp/SslTransport.cs b/src/Transport/Tcp/SslTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/SslTransport.cs
rename to src/Transport/Tcp/SslTransport.cs
diff --git a/src/main/csharp/Transport/Tcp/SslTransportFactory.cs b/src/Transport/Tcp/SslTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/SslTransportFactory.cs
rename to src/Transport/Tcp/SslTransportFactory.cs
diff --git a/src/main/csharp/Transport/Tcp/TcpTransport.cs b/src/Transport/Tcp/TcpTransport.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/TcpTransport.cs
rename to src/Transport/Tcp/TcpTransport.cs
diff --git a/src/main/csharp/Transport/Tcp/TcpTransportFactory.cs b/src/Transport/Tcp/TcpTransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/Tcp/TcpTransportFactory.cs
rename to src/Transport/Tcp/TcpTransportFactory.cs
diff --git a/src/main/csharp/Transport/TransportFactory.cs b/src/Transport/TransportFactory.cs
similarity index 100%
rename from src/main/csharp/Transport/TransportFactory.cs
rename to src/Transport/TransportFactory.cs
diff --git a/src/main/csharp/Transport/TransportFilter.cs b/src/Transport/TransportFilter.cs
similarity index 100%
rename from src/main/csharp/Transport/TransportFilter.cs
rename to src/Transport/TransportFilter.cs
diff --git a/src/main/csharp/Transport/WireFormatNegotiator.cs b/src/Transport/WireFormatNegotiator.cs
similarity index 100%
rename from src/main/csharp/Transport/WireFormatNegotiator.cs
rename to src/Transport/WireFormatNegotiator.cs
diff --git a/src/main/csharp/Util/ActiveMQMessageAudit.cs b/src/Util/ActiveMQMessageAudit.cs
similarity index 100%
rename from src/main/csharp/Util/ActiveMQMessageAudit.cs
rename to src/Util/ActiveMQMessageAudit.cs
diff --git a/src/main/csharp/Util/ActiveMQMessageTransformation.cs b/src/Util/ActiveMQMessageTransformation.cs
similarity index 100%
rename from src/main/csharp/Util/ActiveMQMessageTransformation.cs
rename to src/Util/ActiveMQMessageTransformation.cs
diff --git a/src/main/csharp/Util/AdvisorySupport.cs b/src/Util/AdvisorySupport.cs
similarity index 100%
rename from src/main/csharp/Util/AdvisorySupport.cs
rename to src/Util/AdvisorySupport.cs
diff --git a/src/main/csharp/Util/BitArray.cs b/src/Util/BitArray.cs
similarity index 100%
rename from src/main/csharp/Util/BitArray.cs
rename to src/Util/BitArray.cs
diff --git a/src/main/csharp/Util/BitArrayBin.cs b/src/Util/BitArrayBin.cs
similarity index 100%
rename from src/main/csharp/Util/BitArrayBin.cs
rename to src/Util/BitArrayBin.cs
diff --git a/src/main/csharp/Util/ConnectionAudit.cs b/src/Util/ConnectionAudit.cs
similarity index 100%
rename from src/main/csharp/Util/ConnectionAudit.cs
rename to src/Util/ConnectionAudit.cs
diff --git a/src/main/csharp/Util/FactoryAttribute.cs b/src/Util/FactoryAttribute.cs
similarity index 100%
rename from src/main/csharp/Util/FactoryAttribute.cs
rename to src/Util/FactoryAttribute.cs
diff --git a/src/main/csharp/Util/FactoryFinder.cs b/src/Util/FactoryFinder.cs
similarity index 100%
rename from src/main/csharp/Util/FactoryFinder.cs
rename to src/Util/FactoryFinder.cs
diff --git a/src/main/csharp/Util/FifoMessageDispatchChannel.cs b/src/Util/FifoMessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/FifoMessageDispatchChannel.cs
rename to src/Util/FifoMessageDispatchChannel.cs
diff --git a/src/main/csharp/Util/ISuspendable.cs b/src/Util/ISuspendable.cs
similarity index 100%
rename from src/main/csharp/Util/ISuspendable.cs
rename to src/Util/ISuspendable.cs
diff --git a/src/main/csharp/Util/IdGenerator.cs b/src/Util/IdGenerator.cs
similarity index 100%
rename from src/main/csharp/Util/IdGenerator.cs
rename to src/Util/IdGenerator.cs
diff --git a/src/main/csharp/Util/IntrospectionSupport.cs b/src/Util/IntrospectionSupport.cs
similarity index 100%
rename from src/main/csharp/Util/IntrospectionSupport.cs
rename to src/Util/IntrospectionSupport.cs
diff --git a/src/main/csharp/Util/LRUCache.cs b/src/Util/LRUCache.cs
similarity index 100%
rename from src/main/csharp/Util/LRUCache.cs
rename to src/Util/LRUCache.cs
diff --git a/src/main/csharp/Util/MemoryUsage.cs b/src/Util/MemoryUsage.cs
similarity index 100%
rename from src/main/csharp/Util/MemoryUsage.cs
rename to src/Util/MemoryUsage.cs
diff --git a/src/main/csharp/Util/MessageDispatchChannel.cs b/src/Util/MessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/MessageDispatchChannel.cs
rename to src/Util/MessageDispatchChannel.cs
diff --git a/src/main/csharp/Util/ServiceStopper.cs b/src/Util/ServiceStopper.cs
similarity index 100%
rename from src/main/csharp/Util/ServiceStopper.cs
rename to src/Util/ServiceStopper.cs
diff --git a/src/main/csharp/Util/SimplePriorityMessageDispatchChannel.cs b/src/Util/SimplePriorityMessageDispatchChannel.cs
similarity index 100%
rename from src/main/csharp/Util/SimplePriorityMessageDispatchChannel.cs
rename to src/Util/SimplePriorityMessageDispatchChannel.cs
diff --git a/src/main/ndoc/NamespaceSummary.xml b/src/main/ndoc/NamespaceSummary.xml
deleted file mode 100644
index b8e19d5..0000000
--- a/src/main/ndoc/NamespaceSummary.xml
+++ /dev/null
@@ -1,21 +0,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.
--->
-<namespaces>
- <namespace name="NMS">
- The <b>NMS</b> namespace defines the .Net Message System API which is an interface to messaging systems rather like JMS is for Java.
- </namespace>
-</namespaces>
diff --git a/src/main/sandcastle/feedback_content.xml b/src/main/sandcastle/feedback_content.xml
deleted file mode 100644
index ee30a12..0000000
--- a/src/main/sandcastle/feedback_content.xml
+++ /dev/null
@@ -1,32 +0,0 @@
-<content xml:space="preserve">
-
- <item id="fb_alias">activemq.docs@apache.org</item>
- <item id="fb_product"></item>
- <item id="fb_deliverable"></item>
-
- <item id="fb_subject">Customer%20Feedback</item>
- <item id="fb_body">%0\dThank%20you%20for%20your%20feedback.%20The%20developer%20writing%20teams%20use%20your%20feedback%20to%20improve%20documentation.%20While%20we%20are%20reviewing%20your%20feedback,%20we%20may%20send%20you%20e-mail%20to%20ask%20for%20clarification%20or%20feedback%20on%20a%20solution.%20We%20do%20not%20use%20your%20e-mail%20address%20for%20any%20other%20purpose.%0\d</item>
-
- <item id="fb_headerFeedBack">Send Feedback</item>
-
-
- <!-- feedback values for sandcastle scenario -->
-
- <item id="feedback_alias"></item>
- <item id="feedback_product"></item>
- <item id="feedback_deliverable"></item>
- <item id="feedback_fileVersion"></item>
- <item id="feedback_topicVersion"></item>
- <item id="feedback_body"></item>
- <item id="feedback_subject"></item>
-
- <item id="fb_Introduction">We value your feedback. To rate this topic and send feedback about this topic to the documentation team, click a rating, and then click <b>Send Feedback</b>. For assistance with support issues, refer to the technical support information included with the product.</item>
-
- <item id="fb_Send">Send Feedback</item>
- <item id="fb_Poor">Poor</item>
- <item id="fb_Excellent">Outstanding</item>
- <item id="fb_EnterFeedbackText">To e-mail your feedback, click here:</item>
- <item id="fb_Title">Documentation Feedback</item>
- <item id="fb_altIcon">Display feedback instructions at the bottom of the page.</item>
-
-</content>
\ No newline at end of file
diff --git a/src/nms-openwire.csproj b/src/nms-openwire.csproj
new file mode 100644
index 0000000..324e5c2
--- /dev/null
+++ b/src/nms-openwire.csproj
@@ -0,0 +1,58 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFrameworks>net40;netstandard2.0</TargetFrameworks>
+ <RootNamespace>Apache.NMS.ActiveMQ</RootNamespace>
+ <AssemblyName>Apache.NMS.ActiveMQ</AssemblyName>
+ <Version>1.8.0</Version>
+ <Company>Apache Software Foundation</Company>
+ <Product>Apache NMS OpenWire</Product>
+ <Description>Apache NMS (.Net Standard Messaging Library): Openwire implementation of Apache NMS API</Description>
+ <Copyright>Copyright (C) 2005-2019 Apache Software Foundation</Copyright>
+ <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
+ <PackageProjectUrl>https://activemq.apache.org/components/nms/</PackageProjectUrl>
+ <PackageIconUrl>https://activemq.apache.org/assets/img/activemq_logo_icon.png</PackageIconUrl>
+ <RepositoryUrl>https://github.com/apache/activemq-nms-openwire</RepositoryUrl>
+ <RepositoryType>git</RepositoryType>
+ <PackageTags>apache;activemq;nms;api;net;messaging</PackageTags>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>NMSKey.snk</AssemblyOriginatorKeyFile>
+ <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+ <Authors>Apache ActiveMQ</Authors>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+ <OutputPath>..\..\build\</OutputPath>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Content Include="..\LICENSE.txt" Link="LICENSE.txt" />
+ <Content Include="..\NOTICE.txt" Link="NOTICE.txt" />
+ </ItemGroup>
+
+ <ItemGroup Condition=" '$(TargetFramework)' == 'net35'">
+ <Reference Include="System.Web" />
+ </ItemGroup>
+
+ <ItemGroup Condition=" '$(TargetFramework)' == 'net40'">
+ <Reference Include="System.Web" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Apache.NMS" Version="1.8.0" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Include="..\LICENSE.txt">
+ <Pack>True</Pack>
+ <PackagePath></PackagePath>
+ </None>
+ </ItemGroup>
+
+ <ItemGroup Condition="'$(TargetFramework)' == 'netstandard2.0'">
+ <PackageReference Include="System.Runtime">
+ <Version>4.3.1</Version>
+ </PackageReference>
+ </ItemGroup>
+
+</Project>
diff --git a/src/sandbox/alternative-threading/CountDownLatch2.cs b/src/sandbox/alternative-threading/CountDownLatch2.cs
index 9e81685..8af7f9c 100644
--- a/src/sandbox/alternative-threading/CountDownLatch2.cs
+++ b/src/sandbox/alternative-threading/CountDownLatch2.cs
@@ -60,7 +60,7 @@
/// <summary>
/// Waits forever for the latch to be completed
/// <summary>
- public bool await()
+ public bool Await()
{
lock (mutex)
{
@@ -77,7 +77,7 @@
/// Waits the specified amount of time for the latch
/// returning true if the latch was acquired
/// <summary>
- public bool await(TimeSpan timeout)
+ public bool Await(TimeSpan timeout)
{
DateTime end = DateTime.Now.Add(timeout);
lock (mutex)
@@ -101,11 +101,11 @@
/// Waits the specified amount of time for the latch
/// returning true if the latch was acquired
/// <summary>
- public bool await(int millis)
+ public bool Await(int millis)
{
long ticks = millis * (1000000 / 100); // 1,000,000 nanos in a millisecond
TimeSpan span = new TimeSpan(ticks);
- return await(span);
+ return Await(span);
}
}
}
diff --git a/src/sandbox/alternative-threading/Dispatcher.cs b/src/sandbox/alternative-threading/Dispatcher.cs
index 405bff2..8098130 100644
--- a/src/sandbox/alternative-threading/Dispatcher.cs
+++ b/src/sandbox/alternative-threading/Dispatcher.cs
@@ -14,12 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-using ActiveMQ.Commands;
using ActiveMQ.Util;
-using NMS;
+using Apache.NMS;
using System;
using System.Collections;
using System.Threading;
+using Apache.NMS.ActiveMQ.Commands;
namespace ActiveMQ
{
diff --git a/src/sandbox/alternative-threading/DispatchingThread.cs b/src/sandbox/alternative-threading/DispatchingThread.cs
index 366ebd2..8e039f3 100644
--- a/src/sandbox/alternative-threading/DispatchingThread.cs
+++ b/src/sandbox/alternative-threading/DispatchingThread.cs
@@ -17,6 +17,7 @@
using ActiveMQ.Util;
using System;
using System.Threading;
+using Apache.NMS;
namespace ActiveMQ
diff --git a/src/sandbox/alternative-threading/FutureResponse.cs b/src/sandbox/alternative-threading/FutureResponse.cs
index 61da48d..863acdb 100755
--- a/src/sandbox/alternative-threading/FutureResponse.cs
+++ b/src/sandbox/alternative-threading/FutureResponse.cs
@@ -14,10 +14,12 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-using ActiveMQ.Commands;
using System;
using System.Threading;
using ActiveMQ.Util;
+using Apache.NMS;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.Util;
namespace ActiveMQ.Transport
{
@@ -48,7 +50,7 @@
{
try
{
- if (maxWait > 0)
+ if (maxWait > TimeSpan.Zero)
{
latch.await(maxWait);
}
diff --git a/src/test/csharp/AMQNET366Test.cs b/test/AMQNET366Test.cs
similarity index 99%
rename from src/test/csharp/AMQNET366Test.cs
rename to test/AMQNET366Test.cs
index 0d7aca2..1e67773 100644
--- a/src/test/csharp/AMQNET366Test.cs
+++ b/test/AMQNET366Test.cs
@@ -22,8 +22,8 @@
using Apache.NMS.ActiveMQ.Transport;
using Apache.NMS.ActiveMQ.Commands;
using Apache.NMS.Util;
-using Apache.NMS.Test;
using Apache.NMS.ActiveMQ.Transport.Tcp;
+using Apache.NMS.Test;
using NUnit.Framework;
namespace Apache.NMS.ActiveMQ.Test
diff --git a/src/test/csharp/AMQNET375Test.cs b/test/AMQNET375Test.cs
similarity index 100%
rename from src/test/csharp/AMQNET375Test.cs
rename to test/AMQNET375Test.cs
diff --git a/src/test/csharp/AMQQueueTransactionTest.cs b/test/AMQQueueTransactionTest.cs
similarity index 100%
rename from src/test/csharp/AMQQueueTransactionTest.cs
rename to test/AMQQueueTransactionTest.cs
diff --git a/src/test/csharp/AMQRedeliveryPolicyTest.cs b/test/AMQRedeliveryPolicyTest.cs
similarity index 100%
rename from src/test/csharp/AMQRedeliveryPolicyTest.cs
rename to test/AMQRedeliveryPolicyTest.cs
diff --git a/src/test/csharp/AMQTopicTransactionTest.cs b/test/AMQTopicTransactionTest.cs
similarity index 100%
rename from src/test/csharp/AMQTopicTransactionTest.cs
rename to test/AMQTopicTransactionTest.cs
diff --git a/src/test/csharp/AMQTransactionTestSupport.cs b/test/AMQTransactionTestSupport.cs
similarity index 100%
rename from src/test/csharp/AMQTransactionTestSupport.cs
rename to test/AMQTransactionTestSupport.cs
diff --git a/src/test/csharp/BatchedMessagePriorityConsumerTest.cs b/test/BatchedMessagePriorityConsumerTest.cs
similarity index 100%
rename from src/test/csharp/BatchedMessagePriorityConsumerTest.cs
rename to test/BatchedMessagePriorityConsumerTest.cs
diff --git a/src/test/csharp/BrokerToNMSExceptionsTest.cs b/test/BrokerToNMSExceptionsTest.cs
similarity index 100%
rename from src/test/csharp/BrokerToNMSExceptionsTest.cs
rename to test/BrokerToNMSExceptionsTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQBytesMessageTest.cs b/test/Commands/ActiveMQBytesMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQBytesMessageTest.cs
rename to test/Commands/ActiveMQBytesMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQMapMessageTest.cs b/test/Commands/ActiveMQMapMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQMapMessageTest.cs
rename to test/Commands/ActiveMQMapMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQMessageTest.cs b/test/Commands/ActiveMQMessageTest.cs
similarity index 99%
rename from src/test/csharp/Commands/ActiveMQMessageTest.cs
rename to test/Commands/ActiveMQMessageTest.cs
index 6ce971c..deb5589 100644
--- a/src/test/csharp/Commands/ActiveMQMessageTest.cs
+++ b/test/Commands/ActiveMQMessageTest.cs
@@ -157,7 +157,7 @@
// We shouldn't get the expected value though if we use the inner property
// name from ActiveMQMessage
string correlationId = (string) msg.Properties["correlationId"];
- Assert.IsNullOrEmpty(correlationId);
+ Assert.IsTrue(string.IsNullOrEmpty(correlationId));
msg.Properties["correlationId"] = "TEST";
correlationId = (string) msg.Properties["correlationId"];
Assert.IsFalse(msg.Properties["NMSCorrelationID"].Equals(msg.Properties["correlationId"]));
diff --git a/src/test/csharp/Commands/ActiveMQStreamMessageTest.cs b/test/Commands/ActiveMQStreamMessageTest.cs
similarity index 100%
rename from src/test/csharp/Commands/ActiveMQStreamMessageTest.cs
rename to test/Commands/ActiveMQStreamMessageTest.cs
diff --git a/src/test/csharp/Commands/ActiveMQTextMessageTest.cs b/test/Commands/ActiveMQTextMessageTest.cs
similarity index 99%
rename from src/test/csharp/Commands/ActiveMQTextMessageTest.cs
rename to test/Commands/ActiveMQTextMessageTest.cs
index e23f7d4..5c5badd 100644
--- a/src/test/csharp/Commands/ActiveMQTextMessageTest.cs
+++ b/test/Commands/ActiveMQTextMessageTest.cs
@@ -1,198 +1,198 @@
-/*
- * 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.IO;
-using Apache.NMS.ActiveMQ.Commands;
-using Apache.NMS.Util;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test.Commands
-{
- [TestFixture]
- public class ActiveMQTextMessageTest
- {
- [Test]
- public void TestCommand()
- {
- ActiveMQTextMessage message = new ActiveMQTextMessage();
-
- Assert.IsNull(message.Text);
-
- // Test with ASCII Data.
- message.Text = "Hello World";
- Assert.IsNotNull(message.Text);
- Assert.AreEqual("Hello World", message.Text);
-
- String unicodeString =
- "This unicode string contains two characters " +
- "with codes outside an 8-bit code range, " +
- "Pi (\u03a0) and Sigma (\u03a3).";
-
- message.Text = unicodeString;
- Assert.IsNotNull(message.Text);
- Assert.AreEqual(unicodeString, message.Text);
- }
-
- [Test]
- public void TestShallowCopy()
- {
- ActiveMQTextMessage msg = new ActiveMQTextMessage();
- string testString = "str";
- msg.Text = testString;
- Message copy = msg.Clone() as Message;
- Assert.IsTrue(msg.Text == ((ActiveMQTextMessage) copy).Text);
- }
-
- [Test]
- public void TestSetText()
- {
- ActiveMQTextMessage msg = new ActiveMQTextMessage();
- string str = "testText";
- msg.Text = str;
- Assert.AreEqual(msg.Text, str);
- }
-
- [Test]
- public void TestGetBytes()
- {
- ActiveMQTextMessage msg = new ActiveMQTextMessage();
- String str = "testText";
- msg.Text = str;
- msg.BeforeMarshall(null);
-
- byte[] bytes = msg.Content;
- msg = new ActiveMQTextMessage();
- msg.Content = bytes;
-
- Assert.AreEqual(msg.Text, str);
- }
-
- [Test]
- public void TestClearBody()
- {
- ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
- textMessage.Text = "string";
- textMessage.ClearBody();
- Assert.IsFalse(textMessage.ReadOnlyBody);
- Assert.IsNull(textMessage.Text);
- try
- {
- textMessage.Text = "String";
- Assert.IsTrue(textMessage.Text.Length > 0);
- }
- catch(MessageNotWriteableException)
- {
- Assert.Fail("should be writeable");
- }
- catch(MessageNotReadableException)
- {
- Assert.Fail("should be readable");
- }
- }
-
- [Test]
- public void TestReadOnlyBody()
- {
- ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
- textMessage.Text = "test";
- textMessage.ReadOnlyBody = true;
- try
- {
- Assert.IsTrue(textMessage.Text.Length > 0);
- }
- catch(MessageNotReadableException)
- {
- Assert.Fail("should be readable");
- }
- try
- {
- textMessage.Text = "test";
- Assert.Fail("should throw exception");
- }
- catch(MessageNotWriteableException)
- {
- }
- }
-
- [Test]
- public void TtestWriteOnlyBody()
- {
- // should always be readable
- ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
- textMessage.ReadOnlyBody = false;
- try
- {
- textMessage.Text = "test";
- Assert.IsTrue(textMessage.Text.Length > 0);
- }
- catch(MessageNotReadableException)
- {
- Assert.Fail("should be readable");
- }
- textMessage.ReadOnlyBody = true;
- try
- {
- Assert.IsTrue(textMessage.Text.Length > 0);
- textMessage.Text = "test";
- Assert.Fail("should throw exception");
- }
- catch(MessageNotReadableException)
- {
- Assert.Fail("should be readable");
- }
- catch(MessageNotWriteableException)
- {
- }
- }
-
- [Test]
- public void TestShortText()
- {
- string shortText = "Content";
- ActiveMQTextMessage shortMessage = new ActiveMQTextMessage();
- SetContent(shortMessage, shortText);
- Assert.IsTrue(shortMessage.ToString().Contains("Text = " + shortText));
- Assert.IsTrue(shortMessage.Text == shortText);
-
- string longText = "Very very very very veeeeeeery loooooooooooooooooooooooooooooooooong text";
- string longExpectedText = "Very very very very veeeeeeery looooooooooooo...ooooong text";
- ActiveMQTextMessage longMessage = new ActiveMQTextMessage();
- SetContent(longMessage, longText);
- Assert.IsTrue(longMessage.ToString().Contains("Text = " + longExpectedText));
- Assert.IsTrue(longMessage.Text == longText);
- }
-
- [Test]
- public void TestNullText()
- {
- ActiveMQTextMessage nullMessage = new ActiveMQTextMessage();
- SetContent(nullMessage, null);
- Assert.IsNull(nullMessage.Text);
- Assert.IsTrue(nullMessage.ToString().Contains("Text = null"));
- }
-
- protected void SetContent(Message message, String text)
- {
- MemoryStream mstream = new MemoryStream();
- EndianBinaryWriter dataOut = new EndianBinaryWriter(mstream);
- dataOut.WriteString32(text);
- dataOut.Close();
- message.Content = mstream.ToArray();
- }
- }
-}
+/*
+ * 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.IO;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.Util;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test.Commands
+{
+ [TestFixture]
+ public class ActiveMQTextMessageTest
+ {
+ [Test]
+ public void TestCommand()
+ {
+ ActiveMQTextMessage message = new ActiveMQTextMessage();
+
+ Assert.IsNull(message.Text);
+
+ // Test with ASCII Data.
+ message.Text = "Hello World";
+ Assert.IsNotNull(message.Text);
+ Assert.AreEqual("Hello World", message.Text);
+
+ String unicodeString =
+ "This unicode string contains two characters " +
+ "with codes outside an 8-bit code range, " +
+ "Pi (\u03a0) and Sigma (\u03a3).";
+
+ message.Text = unicodeString;
+ Assert.IsNotNull(message.Text);
+ Assert.AreEqual(unicodeString, message.Text);
+ }
+
+ [Test]
+ public void TestShallowCopy()
+ {
+ ActiveMQTextMessage msg = new ActiveMQTextMessage();
+ string testString = "str";
+ msg.Text = testString;
+ Message copy = msg.Clone() as Message;
+ Assert.IsTrue(msg.Text == ((ActiveMQTextMessage) copy).Text);
+ }
+
+ [Test]
+ public void TestSetText()
+ {
+ ActiveMQTextMessage msg = new ActiveMQTextMessage();
+ string str = "testText";
+ msg.Text = str;
+ Assert.AreEqual(msg.Text, str);
+ }
+
+ [Test]
+ public void TestGetBytes()
+ {
+ ActiveMQTextMessage msg = new ActiveMQTextMessage();
+ String str = "testText";
+ msg.Text = str;
+ msg.BeforeMarshall(null);
+
+ byte[] bytes = msg.Content;
+ msg = new ActiveMQTextMessage();
+ msg.Content = bytes;
+
+ Assert.AreEqual(msg.Text, str);
+ }
+
+ [Test]
+ public void TestClearBody()
+ {
+ ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+ textMessage.Text = "string";
+ textMessage.ClearBody();
+ Assert.IsFalse(textMessage.ReadOnlyBody);
+ Assert.IsNull(textMessage.Text);
+ try
+ {
+ textMessage.Text = "String";
+ Assert.IsTrue(textMessage.Text.Length > 0);
+ }
+ catch(MessageNotWriteableException)
+ {
+ Assert.Fail("should be writeable");
+ }
+ catch(MessageNotReadableException)
+ {
+ Assert.Fail("should be readable");
+ }
+ }
+
+ [Test]
+ public void TestReadOnlyBody()
+ {
+ ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+ textMessage.Text = "test";
+ textMessage.ReadOnlyBody = true;
+ try
+ {
+ Assert.IsTrue(textMessage.Text.Length > 0);
+ }
+ catch(MessageNotReadableException)
+ {
+ Assert.Fail("should be readable");
+ }
+ try
+ {
+ textMessage.Text = "test";
+ Assert.Fail("should throw exception");
+ }
+ catch(MessageNotWriteableException)
+ {
+ }
+ }
+
+ [Test]
+ public void TtestWriteOnlyBody()
+ {
+ // should always be readable
+ ActiveMQTextMessage textMessage = new ActiveMQTextMessage();
+ textMessage.ReadOnlyBody = false;
+ try
+ {
+ textMessage.Text = "test";
+ Assert.IsTrue(textMessage.Text.Length > 0);
+ }
+ catch(MessageNotReadableException)
+ {
+ Assert.Fail("should be readable");
+ }
+ textMessage.ReadOnlyBody = true;
+ try
+ {
+ Assert.IsTrue(textMessage.Text.Length > 0);
+ textMessage.Text = "test";
+ Assert.Fail("should throw exception");
+ }
+ catch(MessageNotReadableException)
+ {
+ Assert.Fail("should be readable");
+ }
+ catch(MessageNotWriteableException)
+ {
+ }
+ }
+
+ [Test]
+ public void TestShortText()
+ {
+ string shortText = "Content";
+ ActiveMQTextMessage shortMessage = new ActiveMQTextMessage();
+ SetContent(shortMessage, shortText);
+ Assert.IsTrue(shortMessage.ToString().Contains("Text = " + shortText));
+ Assert.IsTrue(shortMessage.Text == shortText);
+
+ string longText = "Very very very very veeeeeeery loooooooooooooooooooooooooooooooooong text";
+ string longExpectedText = "Very very very very veeeeeeery looooooooooooo...ooooong text";
+ ActiveMQTextMessage longMessage = new ActiveMQTextMessage();
+ SetContent(longMessage, longText);
+ Assert.IsTrue(longMessage.ToString().Contains("Text = " + longExpectedText));
+ Assert.IsTrue(longMessage.Text == longText);
+ }
+
+ [Test]
+ public void TestNullText()
+ {
+ ActiveMQTextMessage nullMessage = new ActiveMQTextMessage();
+ SetContent(nullMessage, null);
+ Assert.IsNull(nullMessage.Text);
+ Assert.IsTrue(nullMessage.ToString().Contains("Text = null"));
+ }
+
+ protected void SetContent(Message message, String text)
+ {
+ MemoryStream mstream = new MemoryStream();
+ EndianBinaryWriter dataOut = new EndianBinaryWriter(mstream);
+ dataOut.WriteString32(text);
+ dataOut.Close();
+ message.Content = mstream.ToArray();
+ }
+ }
+}
diff --git a/src/test/csharp/Commands/CommandTest.cs b/test/Commands/CommandTest.cs
similarity index 100%
rename from src/test/csharp/Commands/CommandTest.cs
rename to test/Commands/CommandTest.cs
diff --git a/src/test/csharp/Commands/MessageCompressionTest.cs b/test/Commands/MessageCompressionTest.cs
similarity index 100%
rename from src/test/csharp/Commands/MessageCompressionTest.cs
rename to test/Commands/MessageCompressionTest.cs
diff --git a/src/test/csharp/ConnectionFactoryTest.cs b/test/ConnectionFactoryTest.cs
similarity index 100%
rename from src/test/csharp/ConnectionFactoryTest.cs
rename to test/ConnectionFactoryTest.cs
diff --git a/src/test/csharp/ConnectionMetaDataTest.cs b/test/ConnectionMetaDataTest.cs
similarity index 100%
rename from src/test/csharp/ConnectionMetaDataTest.cs
rename to test/ConnectionMetaDataTest.cs
diff --git a/src/test/csharp/DtcBasicTransactionsTest.cs b/test/DtcBasicTransactionsTest.cs
similarity index 97%
rename from src/test/csharp/DtcBasicTransactionsTest.cs
rename to test/DtcBasicTransactionsTest.cs
index b553689..4d06bbe 100644
--- a/src/test/csharp/DtcBasicTransactionsTest.cs
+++ b/test/DtcBasicTransactionsTest.cs
@@ -1,101 +1,101 @@
-/*
- * 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.Threading;
-using Apache.NMS.ActiveMQ.Transactions;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- [Category("Manual")]
- class DtcBasicTransactionsTest : DtcTransactionsTestSupport
- {
- [SetUp]
- public override void SetUp()
- {
- base.SetUp();
-
- this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));
- this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
- }
-
- [Test]
- [ExpectedException("Apache.NMS.NMSException")]
- public void TestSessionCreateFailsWithInvalidLogLocation()
- {
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- NetTxConnection con = connection as NetTxConnection;
- NetTxRecoveryPolicy policy = con.RecoveryPolicy;
- (policy.RecoveryLogger as RecoveryFileLogger).Location = nonExistantPath;
- connection.CreateNetTxSession();
- }
- }
-
- [Test]
- public void TestTransactedDBReadAndProduce()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestTransacteDequeueAndDbWrite()
- {
- // Test initialize - Fills in DB with data to send.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has commited the transaction and stored all messages
- VerifyDatabaseTableIsFull();
-
- // check no messages are present in the queue after commit.
- VerifyNoMessagesInQueueNoRecovery();
- }
- }
-}
+/*
+ * 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.Threading;
+using Apache.NMS.ActiveMQ.Transactions;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ [Category("Manual")]
+ class DtcBasicTransactionsTest : DtcTransactionsTestSupport
+ {
+ [SetUp]
+ public override void SetUp()
+ {
+ base.SetUp();
+
+ this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+ this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+ }
+
+ [Test]
+ [ExpectedException(typeof(NMSException))]
+ public void TestSessionCreateFailsWithInvalidLogLocation()
+ {
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ NetTxConnection con = connection as NetTxConnection;
+ NetTxRecoveryPolicy policy = con.RecoveryPolicy;
+ (policy.RecoveryLogger as RecoveryFileLogger).Location = nonExistantPath;
+ connection.CreateNetTxSession();
+ }
+ }
+
+ [Test]
+ public void TestTransactedDBReadAndProduce()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestTransacteDequeueAndDbWrite()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has commited the transaction and stored all messages
+ VerifyDatabaseTableIsFull();
+
+ // check no messages are present in the queue after commit.
+ VerifyNoMessagesInQueueNoRecovery();
+ }
+ }
+}
diff --git a/src/test/csharp/DtcConsumerTransactionsTest.cs b/test/DtcConsumerTransactionsTest.cs
similarity index 98%
rename from src/test/csharp/DtcConsumerTransactionsTest.cs
rename to test/DtcConsumerTransactionsTest.cs
index caa1958..3128b94 100644
--- a/src/test/csharp/DtcConsumerTransactionsTest.cs
+++ b/test/DtcConsumerTransactionsTest.cs
@@ -1,745 +1,745 @@
-/*
- * 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.Data.SqlClient;
-using System.IO;
-using System.Threading;
-using System.Transactions;
-using Apache.NMS.ActiveMQ.Transport;
-using Apache.NMS.ActiveMQ.Transport.Tcp;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- [Category("Manual")]
- class DtcConsumerTransactionsTest : DtcTransactionsTestSupport
- {
- [SetUp]
- public override void SetUp()
- {
- base.SetUp();
-
- this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));
- this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
- }
-
- [Test]
- public void TestRedelivered()
- {
- // enqueue several messages
- PurgeDatabase();
- PurgeAndFillQueue();
-
- // receive just one
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.Start();
-
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
-
- scoped.Complete();
- }
- }
-
- session.Close();
- }
- }
-
- // check that others message have status redelivered = false
- IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = checkFactory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
- {
- IEnumerator enumerator = browser.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue!");
- Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
- }
- }
- }
- }
-
- [Test]
- public void TestRedeliveredCase2()
- {
- const int messageCount = 300;
- const int receiveCount = 150;
-
- // enqueue several messages
- PurgeDatabase();
- PurgeAndFillQueue(messageCount);
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.Start();
-
- // receive half of total messages
- for (int i = 0; i < receiveCount; i++)
- {
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- ITextMessage message =
- consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable,
- Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
-
- scoped.Complete();
- }
- }
-
- session.Close();
- }
-
- Tracer.Debug("Completed for loop iteration #" + i);
- }
- }
-
- // check that others message have status redelivered = false
- IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = checkFactory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
- {
- IEnumerator enumerator = browser.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue!");
- Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
- }
- }
- }
- }
-
- [Test]
- public void TestRedeliveredCase3()
- {
- const int messageCount = 300;
- const int receiveCount = 150;
-
- // enqueue several messages
- PurgeDatabase();
- PurgeAndFillQueue(messageCount);
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.Start();
-
- // receive half of total messages
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- for (int i = 0; i < receiveCount; i++)
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- ITextMessage message =
- consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable,
- Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
- scoped.Complete();
- }
- }
- }
-
- session.Close();
- }
- }
-
- Tracer.Debug("First stage ok");
-
- // check that others message have status redelivered = false
- IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = checkFactory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
- {
- IEnumerator enumerator = browser.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue!");
- Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
- }
- }
- }
- }
-
- [Test]
- public void TestRedeliveredNoComplete()
- {
- const int messageCount = 300;
- const int receiveCount = 150;
-
- // enqueue several messages
- PurgeDatabase();
- PurgeAndFillQueue(messageCount);
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- // allow no redelivery so that message immediatly goes to the DLQ if first read fails
- connection.RedeliveryPolicy.MaximumRedeliveries = 0;
- connection.Start();
-
- // receive half of total messages
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- for (int i = 0; i < receiveCount; i++)
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- ITextMessage message =
- consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable,
- Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
- }
- }
- }
-
- session.Close();
- }
- }
-
- Tracer.Debug("First stage ok");
-
- // check that others message have status redelivered = false
- IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = checkFactory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
- {
- IEnumerator enumerator = browser.GetEnumerator();
- while (enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue!");
- Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
- }
- }
- }
- }
-
- [Test]
- public void TestRecoveryAfterCommitFailsBeforeSent()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(1000);
- }
-
- // transaction should not have been commited
- VerifyNoMessagesInQueueNoRecovery();
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are not present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestRecoveryAfterCommitFailsAfterSent()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(1000);
- }
-
- // transaction should have been commited
- VerifyNoMessagesInQueueNoRecovery();
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are not present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestIterativeTransactedConsume()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue(5 * MSG_COUNT);
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull(5 * MSG_COUNT);
-
- // check messages are NOT present in the queue
- VerifyNoMessagesInQueueNoRecovery();
- }
-
- [Test]
- public void TestConsumeWithDBInsertLogLocation()
- {
- const string logLocation = @".\RecoveryDir";
- string newConnectionUri =
- connectionURI + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation +
- "&nms.configuredResourceManagerId=" +
- dtcFactory.ConfiguredResourceManagerId;
-
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- if (Directory.Exists(logLocation))
- {
- Directory.Delete(logLocation, true);
- }
-
- Directory.CreateDirectory(logLocation);
-
- dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- Assert.AreEqual(1, Directory.GetFiles(logLocation).Length);
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are NOT present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount(0, newConnectionUri);
-
- Assert.AreEqual(0, Directory.GetFiles(logLocation).Length);
- }
-
- [Test]
- public void TestRecoverAfterTransactionScopeAborted()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has NOT commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestRecoverAfterRollbackFailWhenScopeAborted()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
-
- ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has NOT commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are recovered and present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
-
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // Messages are visible since no prepare sent
- VerifyBrokerQueueCountNoRecovery();
-
- // verify sql server has NOT commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionAfterPrepareSent()
- {
- // Test initialize - Fills in queue with data to send and clears the DB.
- PurgeDatabase();
- PurgeAndFillQueue();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
-
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromQueueAndInsertIntoDbWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // not visible yet because it must be rolled back
- VerifyNoMessagesInQueueNoRecovery();
-
- // verify sql server has NOT commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void MessageShouldEnlistToTheCorrectTransaction()
- {
- const int messageCount = 100;
- const int receiveCount = 100;
-
- // enqueue several messages
- PurgeDatabase();
- PurgeAndFillQueue(messageCount);
-
- var enlistment = new TestSinglePhaseCommit();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.Start();
-
- // receive half of total messages
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- for (int i = 0; i < receiveCount; i++)
- {
- try
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- {
- ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
-
- Transaction.Current.EnlistDurable(Guid.NewGuid(), enlistment, EnlistmentOptions.None);
- if (new Random().Next(2) == 0)
- {
- Tracer.InfoFormat("Throwing random Exception for Message {0}", message.NMSMessageId);
- throw new Exception();
- }
-
- scoped.Complete();
- }
- }
- catch
- {
- }
-
- Assert.False(enlistment.singlePhaseCommit, "No single phase commit should happen.");
- }
- }
- }
- }
- }
-
- internal class TestSinglePhaseCommit : ISinglePhaseNotification
- {
- public bool singlePhaseCommit = false;
-
- public void Prepare(PreparingEnlistment preparingEnlistment)
- {
- preparingEnlistment.Prepared();
- }
- public void Commit(Enlistment enlistment)
- {
- enlistment.Done();
- }
-
- public void Rollback(Enlistment enlistment)
- {
- enlistment.Done();
- }
- public void InDoubt(Enlistment enlistment)
- {
- enlistment.Done();
- }
- public void SinglePhaseCommit(SinglePhaseEnlistment singlePhaseEnlistment)
- {
- Tracer.Info("Performing invalid single phase commit.");
- singlePhaseCommit = true;
- singlePhaseEnlistment.Committed();
- }
- }
-
- #region Asynchronous Consumer Inside of a Transaction Test / Example
-
- private const int BATCH_COUNT = 5;
- private int batchSequence;
- private DependentTransaction batchTxControl;
- private readonly ManualResetEvent awaitBatchProcessingStart = new ManualResetEvent(false);
-
- [Test]
- public void TestTransactedAsyncConsumption()
- {
- PurgeDatabase();
- PurgeAndFillQueue(MSG_COUNT * BATCH_COUNT);
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- using (NetTxSession session = connection.CreateNetTxSession() as NetTxSession)
- {
- IQueue queue = session.GetQueue(testQueueName);
- IMessageConsumer consumer = session.CreateConsumer(queue);
- consumer.Listener += AsyncTxAwareOnMessage;
-
- // Be carefull, message are dispatched once this is done, so you could receive
- // a Message outside a TX. We use the awaitBatchProcessingStart event here to
- // gate te OnMessage callback, once that method returns the Message is ack'd and
- // no longer has a chance to participate in a TX.
- connection.Start();
-
- for (int i = 0; i < BATCH_COUNT; ++i)
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- {
- session.Enlist(Transaction.Current);
-
- batchTxControl = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete);
- awaitBatchProcessingStart.Set();
- scoped.Complete();
- }
-
- // Reenlisting to fast seems to annoy the DTC. Also since DTC operations are
- // async we need to allow a little time for lag so that the last TX actually
- // completes before we start a new one.
- Thread.Sleep(250);
- }
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull(MSG_COUNT * BATCH_COUNT);
-
- // check messages are NOT present in the queue
- VerifyNoMessagesInQueue();
- }
-
- private void AsyncTxAwareOnMessage(IMessage message)
- {
- awaitBatchProcessingStart.WaitOne();
-
- try
- {
- using (TransactionScope scoped = new TransactionScope(batchTxControl))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- ITextMessage textMessage = message as ITextMessage;
- Assert.IsNotNull(message, "missing message");
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(textMessage.Text));
- sqlInsertCommand.ExecuteNonQuery();
- scoped.Complete();
- }
-
- if(++batchSequence == MSG_COUNT)
- {
- batchSequence = 0;
- awaitBatchProcessingStart.Reset();
- batchTxControl.Complete();
- }
- }
- catch (Exception e)
- {
- Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
- Tracer.Debug(e.ToString());
- }
- }
-
- #endregion
- }
-}
+/*
+ * 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.Data.SqlClient;
+using System.IO;
+using System.Threading;
+using System.Transactions;
+using Apache.NMS.ActiveMQ.Transport;
+using Apache.NMS.ActiveMQ.Transport.Tcp;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ [Category("Manual")]
+ class DtcConsumerTransactionsTest : DtcTransactionsTestSupport
+ {
+ [SetUp]
+ public override void SetUp()
+ {
+ base.SetUp();
+
+ this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+ this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+ }
+
+ [Test]
+ public void TestRedelivered()
+ {
+ // enqueue several messages
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ // receive just one
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.Start();
+
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+
+ scoped.Complete();
+ }
+ }
+
+ session.Close();
+ }
+ }
+
+ // check that others message have status redelivered = false
+ IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = checkFactory.CreateConnection())
+ {
+ connection.Start();
+
+ using (ISession session = connection.CreateSession())
+ using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+ {
+ IEnumerator enumerator = browser.GetEnumerator();
+
+ while (enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue!");
+ Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void TestRedeliveredCase2()
+ {
+ const int messageCount = 300;
+ const int receiveCount = 150;
+
+ // enqueue several messages
+ PurgeDatabase();
+ PurgeAndFillQueue(messageCount);
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.Start();
+
+ // receive half of total messages
+ for (int i = 0; i < receiveCount; i++)
+ {
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ ITextMessage message =
+ consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+ Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+
+ scoped.Complete();
+ }
+ }
+
+ session.Close();
+ }
+
+ Tracer.Debug("Completed for loop iteration #" + i);
+ }
+ }
+
+ // check that others message have status redelivered = false
+ IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = checkFactory.CreateConnection())
+ {
+ connection.Start();
+
+ using (ISession session = connection.CreateSession())
+ using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+ {
+ IEnumerator enumerator = browser.GetEnumerator();
+
+ while (enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue!");
+ Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void TestRedeliveredCase3()
+ {
+ const int messageCount = 300;
+ const int receiveCount = 150;
+
+ // enqueue several messages
+ PurgeDatabase();
+ PurgeAndFillQueue(messageCount);
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.Start();
+
+ // receive half of total messages
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ for (int i = 0; i < receiveCount; i++)
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ ITextMessage message =
+ consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+ Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+ scoped.Complete();
+ }
+ }
+ }
+
+ session.Close();
+ }
+ }
+
+ Tracer.Debug("First stage ok");
+
+ // check that others message have status redelivered = false
+ IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = checkFactory.CreateConnection())
+ {
+ connection.Start();
+
+ using (ISession session = connection.CreateSession())
+ using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+ {
+ IEnumerator enumerator = browser.GetEnumerator();
+
+ while (enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue!");
+ Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void TestRedeliveredNoComplete()
+ {
+ const int messageCount = 300;
+ const int receiveCount = 150;
+
+ // enqueue several messages
+ PurgeDatabase();
+ PurgeAndFillQueue(messageCount);
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ // allow no redelivery so that message immediatly goes to the DLQ if first read fails
+ connection.RedeliveryPolicy.MaximumRedeliveries = 0;
+ connection.Start();
+
+ // receive half of total messages
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ for (int i = 0; i < receiveCount; i++)
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ ITextMessage message =
+ consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable,
+ Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+ }
+ }
+ }
+
+ session.Close();
+ }
+ }
+
+ Tracer.Debug("First stage ok");
+
+ // check that others message have status redelivered = false
+ IConnectionFactory checkFactory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = checkFactory.CreateConnection())
+ {
+ connection.Start();
+
+ using (ISession session = connection.CreateSession())
+ using (IQueueBrowser browser = session.CreateBrowser(session.GetQueue(testQueueName)))
+ {
+ IEnumerator enumerator = browser.GetEnumerator();
+ while (enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue!");
+ Assert.IsFalse(msg.NMSRedelivered, "message is redelivered!");
+ }
+ }
+ }
+ }
+
+ [Test]
+ public void TestRecoveryAfterCommitFailsBeforeSent()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(1000);
+ }
+
+ // transaction should not have been commited
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are not present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestRecoveryAfterCommitFailsAfterSent()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(1000);
+ }
+
+ // transaction should have been commited
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are not present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestIterativeTransactedConsume()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue(5 * MSG_COUNT);
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull(5 * MSG_COUNT);
+
+ // check messages are NOT present in the queue
+ VerifyNoMessagesInQueueNoRecovery();
+ }
+
+ [Test]
+ public void TestConsumeWithDBInsertLogLocation()
+ {
+ const string logLocation = @".\RecoveryDir";
+ string newConnectionUri =
+ connectionUri + "?nms.RecoveryPolicy.RecoveryLogger.Location=" + logLocation +
+ "&nms.configuredResourceManagerId=" +
+ dtcFactory.ConfiguredResourceManagerId;
+
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ if (Directory.Exists(logLocation))
+ {
+ Directory.Delete(logLocation, true);
+ }
+
+ Directory.CreateDirectory(logLocation);
+
+ dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ Assert.AreEqual(1, Directory.GetFiles(logLocation).Length);
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are NOT present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount(0, newConnectionUri);
+
+ Assert.AreEqual(0, Directory.GetFiles(logLocation).Length);
+ }
+
+ [Test]
+ public void TestRecoverAfterTransactionScopeAborted()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has NOT commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestRecoverAfterRollbackFailWhenScopeAborted()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
+
+ ReadFromQueueAndInsertIntoDbWithScopeAborted(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has NOT commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are recovered and present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
+
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // Messages are visible since no prepare sent
+ VerifyBrokerQueueCountNoRecovery();
+
+ // verify sql server has NOT commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionAfterPrepareSent()
+ {
+ // Test initialize - Fills in queue with data to send and clears the DB.
+ PurgeDatabase();
+ PurgeAndFillQueue();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
+
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromQueueAndInsertIntoDbWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // not visible yet because it must be rolled back
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // verify sql server has NOT commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void MessageShouldEnlistToTheCorrectTransaction()
+ {
+ const int messageCount = 100;
+ const int receiveCount = 100;
+
+ // enqueue several messages
+ PurgeDatabase();
+ PurgeAndFillQueue(messageCount);
+
+ var enlistment = new TestSinglePhaseCommit();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.Start();
+
+ // receive half of total messages
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ for (int i = 0; i < receiveCount; i++)
+ {
+ try
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ {
+ ITextMessage message = consumer.Receive(TimeSpan.FromMilliseconds(10000)) as ITextMessage;
+
+ Transaction.Current.EnlistDurable(Guid.NewGuid(), enlistment, EnlistmentOptions.None);
+ if (new Random().Next(2) == 0)
+ {
+ Tracer.InfoFormat("Throwing random Exception for Message {0}", message.NMSMessageId);
+ throw new Exception();
+ }
+
+ scoped.Complete();
+ }
+ }
+ catch
+ {
+ }
+
+ Assert.False(enlistment.singlePhaseCommit, "No single phase commit should happen.");
+ }
+ }
+ }
+ }
+ }
+
+ internal class TestSinglePhaseCommit : ISinglePhaseNotification
+ {
+ public bool singlePhaseCommit = false;
+
+ public void Prepare(PreparingEnlistment preparingEnlistment)
+ {
+ preparingEnlistment.Prepared();
+ }
+ public void Commit(Enlistment enlistment)
+ {
+ enlistment.Done();
+ }
+
+ public void Rollback(Enlistment enlistment)
+ {
+ enlistment.Done();
+ }
+ public void InDoubt(Enlistment enlistment)
+ {
+ enlistment.Done();
+ }
+ public void SinglePhaseCommit(SinglePhaseEnlistment singlePhaseEnlistment)
+ {
+ Tracer.Info("Performing invalid single phase commit.");
+ singlePhaseCommit = true;
+ singlePhaseEnlistment.Committed();
+ }
+ }
+
+ #region Asynchronous Consumer Inside of a Transaction Test / Example
+
+ private const int BATCH_COUNT = 5;
+ private int batchSequence;
+ private DependentTransaction batchTxControl;
+ private readonly ManualResetEvent awaitBatchProcessingStart = new ManualResetEvent(false);
+
+ [Test]
+ public void TestTransactedAsyncConsumption()
+ {
+ PurgeDatabase();
+ PurgeAndFillQueue(MSG_COUNT * BATCH_COUNT);
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ using (NetTxSession session = connection.CreateNetTxSession() as NetTxSession)
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+ IMessageConsumer consumer = session.CreateConsumer(queue);
+ consumer.Listener += AsyncTxAwareOnMessage;
+
+ // Be carefull, message are dispatched once this is done, so you could receive
+ // a Message outside a TX. We use the awaitBatchProcessingStart event here to
+ // gate te OnMessage callback, once that method returns the Message is ack'd and
+ // no longer has a chance to participate in a TX.
+ connection.Start();
+
+ for (int i = 0; i < BATCH_COUNT; ++i)
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ {
+ session.Enlist(Transaction.Current);
+
+ batchTxControl = Transaction.Current.DependentClone(DependentCloneOption.BlockCommitUntilComplete);
+ awaitBatchProcessingStart.Set();
+ scoped.Complete();
+ }
+
+ // Reenlisting to fast seems to annoy the DTC. Also since DTC operations are
+ // async we need to allow a little time for lag so that the last TX actually
+ // completes before we start a new one.
+ Thread.Sleep(250);
+ }
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull(MSG_COUNT * BATCH_COUNT);
+
+ // check messages are NOT present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ private void AsyncTxAwareOnMessage(IMessage message)
+ {
+ awaitBatchProcessingStart.WaitOne();
+
+ try
+ {
+ using (TransactionScope scoped = new TransactionScope(batchTxControl))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ ITextMessage textMessage = message as ITextMessage;
+ Assert.IsNotNull(message, "missing message");
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(textMessage.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+ scoped.Complete();
+ }
+
+ if(++batchSequence == MSG_COUNT)
+ {
+ batchSequence = 0;
+ awaitBatchProcessingStart.Reset();
+ batchTxControl.Complete();
+ }
+ }
+ catch (Exception e)
+ {
+ Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+ Tracer.Debug(e.ToString());
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/src/test/csharp/DtcProducerTransactionsTest.cs b/test/DtcProducerTransactionsTest.cs
similarity index 98%
rename from src/test/csharp/DtcProducerTransactionsTest.cs
rename to test/DtcProducerTransactionsTest.cs
index 260cff4..5569343 100644
--- a/src/test/csharp/DtcProducerTransactionsTest.cs
+++ b/test/DtcProducerTransactionsTest.cs
@@ -1,323 +1,323 @@
-/*
- * 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.IO;
-using System.Threading;
-using Apache.NMS.ActiveMQ.Transactions;
-using Apache.NMS.ActiveMQ.Transport;
-using Apache.NMS.ActiveMQ.Transport.Tcp;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- [Category("Manual")]
- class DtcProducerTransactionsTest : DtcTransactionsTestSupport
- {
- [SetUp]
- public override void SetUp()
- {
- base.SetUp();
-
- this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionURI));
- this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionCommit()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(1000);
- }
-
- // transaction should not have been commited
- VerifyNoMessagesInQueueNoRecovery();
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- NetTxTransactionContext.ResetDtcRecovery();
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionPostCommitSend()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(1000);
- }
-
- // transaction should have been commited
- VerifyBrokerQueueCountNoRecovery();
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- VerifyBrokerQueueCount();
- }
-
- [Test]
- public void TestNoRecoverAfterFailOnTransactionWhenLogDeleted()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- NetTxConnectionFactory netTxFactory = dtcFactory;
- RecoveryFileLogger logger = netTxFactory.RecoveryPolicy.RecoveryLogger as RecoveryFileLogger;
- string logDirectory = logger.Location;
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // transaction should not have been commited
- VerifyNoMessagesInQueueNoRecovery();
-
- // delete all recovery files
- foreach (string file in Directory.GetFiles(logDirectory, "*.bin"))
- {
- File.Delete(file);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are NOT present in the queue bacause recovery file has been deleted
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestNoRecoverAfterFailOnTransactionWhenLogWriteFails()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- string newConnectionUri =
- connectionURI + "?nms.RecoveryPolicy.RecoveryLoggerType=harness" +
- "&nms.configuredResourceManagerId=" +
- dtcFactory.ConfiguredResourceManagerId;
-
- dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- IRecoveryLogger logger = (connection as NetTxConnection).RecoveryPolicy.RecoveryLogger;
- Assert.IsNotNull(logger);
- RecoveryLoggerHarness harness = logger as RecoveryLoggerHarness;
- Assert.IsNotNull(harness);
-
- harness.PreLogRecoveryInfoEvent += FailOnPreLogRecoveryHook;
-
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has not commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are not present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has not commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are not present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestRecoverAfterFailOnTransactionDuringPrepareSend()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
-
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestRecoverAfterTransactionScopeAborted()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ReadFromDbAndProduceToQueueWithScopeAborted(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has NOT commited the transaction
- VerifyDatabaseTableIsFull();
-
- // check messages are NOT present in the queue
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestRecoverAfterRollbackFailWhenScopeAborted()
- {
- // Test initialize - Fills in DB with data to send.
- PrepareDatabase();
-
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- ITransport transport = (connection as Connection).ITransport;
- TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
- Assert.IsNotNull(tcpFaulty);
- tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
-
- ReadFromDbAndProduceToQueueWithScopeAborted(connection);
-
- Thread.Sleep(2000);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsFull();
-
- // before recovering, messages should NOT be present in the queue
- VerifyNoMessagesInQueueNoRecovery();
-
- // check messages are not present in the queue after recover
- VerifyNoMessagesInQueue();
- }
-
- [Test]
- public void TestIterativeTransactedProduceWithDBDelete()
- {
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- connection.ExceptionListener += this.OnException;
- connection.Start();
-
- PrepareDatabase();
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- PrepareDatabase();
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- PrepareDatabase();
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- PrepareDatabase();
- ReadFromDbAndProduceToQueueWithCommit(connection);
-
- PrepareDatabase();
- ReadFromDbAndProduceToQueueWithCommit(connection);
- }
-
- // verify sql server has commited the transaction
- VerifyDatabaseTableIsEmpty();
-
- // check messages are present in the queue
- VerifyBrokerQueueCount(MSG_COUNT * 5);
- }
- }
-}
+/*
+ * 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.IO;
+using System.Threading;
+using Apache.NMS.ActiveMQ.Transactions;
+using Apache.NMS.ActiveMQ.Transport;
+using Apache.NMS.ActiveMQ.Transport.Tcp;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ [Category("Manual")]
+ class DtcProducerTransactionsTest : DtcTransactionsTestSupport
+ {
+ [SetUp]
+ public override void SetUp()
+ {
+ base.SetUp();
+
+ this.dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(connectionUri));
+ this.dtcFactory.ConfiguredResourceManagerId = Guid.NewGuid().ToString();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionCommit()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(1000);
+ }
+
+ // transaction should not have been commited
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ NetTxTransactionContext.ResetDtcRecovery();
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionPostCommitSend()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPostProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(1000);
+ }
+
+ // transaction should have been commited
+ VerifyBrokerQueueCountNoRecovery();
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ VerifyBrokerQueueCount();
+ }
+
+ [Test]
+ public void TestNoRecoverAfterFailOnTransactionWhenLogDeleted()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ NetTxConnectionFactory netTxFactory = dtcFactory;
+ RecoveryFileLogger logger = netTxFactory.RecoveryPolicy.RecoveryLogger as RecoveryFileLogger;
+ string logDirectory = logger.Location;
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnCommitTransportHook;
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // transaction should not have been commited
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // delete all recovery files
+ foreach (string file in Directory.GetFiles(logDirectory, "*.bin"))
+ {
+ File.Delete(file);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are NOT present in the queue bacause recovery file has been deleted
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestNoRecoverAfterFailOnTransactionWhenLogWriteFails()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ string newConnectionUri =
+ connectionUri + "?nms.RecoveryPolicy.RecoveryLoggerType=harness" +
+ "&nms.configuredResourceManagerId=" +
+ dtcFactory.ConfiguredResourceManagerId;
+
+ dtcFactory = new NetTxConnectionFactory(ReplaceEnvVar(newConnectionUri));
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ IRecoveryLogger logger = (connection as NetTxConnection).RecoveryPolicy.RecoveryLogger;
+ Assert.IsNotNull(logger);
+ RecoveryLoggerHarness harness = logger as RecoveryLoggerHarness;
+ Assert.IsNotNull(harness);
+
+ harness.PreLogRecoveryInfoEvent += FailOnPreLogRecoveryHook;
+
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has not commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are not present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionBeforePrepareSent()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnPrepareTransportHook;
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has not commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are not present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestRecoverAfterFailOnTransactionDuringPrepareSend()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPostProcessor += this.FailOnPrepareTransportHook;
+
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestRecoverAfterTransactionScopeAborted()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ReadFromDbAndProduceToQueueWithScopeAborted(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has NOT commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // check messages are NOT present in the queue
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestRecoverAfterRollbackFailWhenScopeAborted()
+ {
+ // Test initialize - Fills in DB with data to send.
+ PrepareDatabase();
+
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ ITransport transport = (connection as Connection).ITransport;
+ TcpFaultyTransport tcpFaulty = transport.Narrow(typeof(TcpFaultyTransport)) as TcpFaultyTransport;
+ Assert.IsNotNull(tcpFaulty);
+ tcpFaulty.OnewayCommandPreProcessor += this.FailOnRollbackTransportHook;
+
+ ReadFromDbAndProduceToQueueWithScopeAborted(connection);
+
+ Thread.Sleep(2000);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsFull();
+
+ // before recovering, messages should NOT be present in the queue
+ VerifyNoMessagesInQueueNoRecovery();
+
+ // check messages are not present in the queue after recover
+ VerifyNoMessagesInQueue();
+ }
+
+ [Test]
+ public void TestIterativeTransactedProduceWithDBDelete()
+ {
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ connection.ExceptionListener += this.OnException;
+ connection.Start();
+
+ PrepareDatabase();
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ PrepareDatabase();
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ PrepareDatabase();
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ PrepareDatabase();
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+
+ PrepareDatabase();
+ ReadFromDbAndProduceToQueueWithCommit(connection);
+ }
+
+ // verify sql server has commited the transaction
+ VerifyDatabaseTableIsEmpty();
+
+ // check messages are present in the queue
+ VerifyBrokerQueueCount(MSG_COUNT * 5);
+ }
+ }
+}
diff --git a/src/test/csharp/DtcTransactionsTestSupport.cs b/test/DtcTransactionsTestSupport.cs
similarity index 71%
rename from src/test/csharp/DtcTransactionsTestSupport.cs
rename to test/DtcTransactionsTestSupport.cs
index 030a9d3..88331cf 100644
--- a/src/test/csharp/DtcTransactionsTestSupport.cs
+++ b/test/DtcTransactionsTestSupport.cs
@@ -1,662 +1,793 @@
-/*
- * 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.IO;
-using System.Transactions;
-using System.Threading;
-
-using NUnit.Framework;
-using Apache.NMS.Test;
-using Apache.NMS.ActiveMQ.Commands;
-using Apache.NMS.ActiveMQ.Transport;
-using System.Data.SqlClient;
-using System.Collections;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- // PREREQUISITES to run those tests :
- // - A local instance of sql server 2008 running, with a db (e.g. TestDB) that
- // as a table (e.g. TestTable) with a single column (e.g. TestID) of type INT.
- // The test default to using an SQL Connection string with a user id of
- // 'user' and the password 'password'
- // - AMQ Server 5.4.2+
- // - NMS 1.5+
- //
- // IMPORTANT
- // Because you cannot perform recovery in a process more than once you cannot
- // run these tests sequentially in the NUnit GUI or NUnit Console runner you
- // must run them one at a time from the console or using a tool like the ReSharper
- // plugin for Visual Studio.
- //
-
- public class DtcTransactionsTestSupport : NMSTestSupport
- {
- protected const int MSG_COUNT = 5;
- protected string nonExistantPath;
- protected NetTxConnectionFactory dtcFactory;
-
- private ITrace oldTracer;
-
- protected const string sqlConnectionString =
- // "Data Source=localhost;Initial Catalog=TestDB;User ID=user;Password=password";
- "Data Source=.\\SQLEXPRESS;Initial Catalog=TestDB;Integrated Security = true";
- protected const string testTable = "TestTable";
- protected const string testColumn = "TestID";
- protected const string testQueueName = "TestQueue";
- protected const string connectionURI = "tcpfaulty://${activemqhost}:61616";
-
- [SetUp]
- public override void SetUp()
- {
- this.oldTracer = Tracer.Trace;
- this.nonExistantPath = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString());
-
- base.SetUp();
-
- PurgeDestination();
- }
-
- [TearDown]
- public override void TearDown()
- {
- DeleteDestination();
-
- base.TearDown();
-
- Tracer.Trace = this.oldTracer;
- }
-
- protected void OnException(Exception ex)
- {
- Tracer.DebugFormat("Test Driver received Error Notification: {0}", ex.Message);
- }
-
- #region Database Utility Methods
-
- protected static void PrepareDatabase()
- {
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
-
- // remove all data from test table
- using (SqlCommand sqlCommand = new SqlCommand(string.Format("TRUNCATE TABLE {0}", testTable), sqlConnection))
- {
- sqlCommand.ExecuteNonQuery();
- }
-
- // add some data to test table
- for (int i = 0; i < MSG_COUNT; ++i)
- {
- using (SqlCommand sqlCommand = new SqlCommand(
- string.Format(
- "INSERT INTO {0} ({1}) values ({2})",
- testTable,
- testColumn,
- i), sqlConnection))
- {
- sqlCommand.ExecuteNonQuery();
- }
- }
-
- sqlConnection.Close();
- }
- }
-
- protected static void PurgeDatabase()
- {
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
-
- // remove all data from test table
- using (SqlCommand sqlCommand = new SqlCommand(string.Format("TRUNCATE TABLE {0}", testTable), sqlConnection))
- {
- sqlCommand.ExecuteNonQuery();
- }
-
- sqlConnection.Close();
- }
- }
-
- protected static IList ExtractDataSet()
- {
- IList entries = new ArrayList();
-
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
-
- using (SqlCommand sqlReadCommand = new SqlCommand(
- string.Format("SELECT {0} FROM {1}", testColumn, testTable), sqlConnection))
- using (SqlDataReader reader = sqlReadCommand.ExecuteReader())
- {
- while (reader.Read())
- {
- entries.Add("Hello World " + (int)reader[0]);
- }
- }
- }
-
- return entries;
- }
-
- protected static void VerifyDatabaseTableIsEmpty()
- {
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
- SqlCommand sqlCommand = new SqlCommand(
- string.Format("SELECT COUNT(*) FROM {0}", testTable),
- sqlConnection);
- int count = (int)sqlCommand.ExecuteScalar();
- Assert.AreEqual(0, count, "wrong number of rows in DB");
- }
- }
-
- protected static void VerifyDatabaseTableIsFull()
- {
- VerifyDatabaseTableIsFull(MSG_COUNT);
- }
-
- protected static void VerifyDatabaseTableIsFull(int expected)
- {
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
- SqlCommand sqlCommand = new SqlCommand(
- string.Format("SELECT COUNT(*) FROM {0}", testTable),
- sqlConnection);
- int count = (int)sqlCommand.ExecuteScalar();
- Assert.AreEqual(expected, count, "wrong number of rows in DB");
- }
- }
-
- #endregion
-
- #region Destination Utility Methods
-
- protected static void DeleteDestination()
- {
- IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (Connection connection = factory.CreateConnection() as Connection)
- {
- using (ISession session = connection.CreateSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
- try
- {
- connection.DeleteDestination(queue);
- }
- catch
- {
- }
- }
- }
- }
-
- protected static void PurgeDestination()
- {
- IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = factory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- using (IMessageConsumer consumer = session.CreateConsumer(session.GetQueue(testQueueName)))
- {
- IMessage recvd;
- while ((recvd = consumer.Receive(TimeSpan.FromMilliseconds(3000))) != null)
- {
- Tracer.Debug("Setup Purged Message: " + recvd);
- }
- }
- }
- }
-
- protected static void PurgeAndFillQueue()
- {
- PurgeAndFillQueue(MSG_COUNT);
- }
-
- protected static void PurgeAndFillQueue(int msgCount)
- {
- IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = factory.CreateConnection())
- {
- connection.Start();
-
- using (ISession session = connection.CreateSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // empty queue
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- while ((consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)
- {
- }
- }
-
- // enqueue several messages
- using (IMessageProducer producer = session.CreateProducer(queue))
- {
- producer.DeliveryMode = MsgDeliveryMode.Persistent;
-
- for (int i = 0; i < msgCount; i++)
- {
- producer.Send(session.CreateTextMessage(i.ToString()));
- }
- }
- }
- }
- }
-
- #endregion
-
- #region Broker Queue State Validation Routines
-
- protected static void VerifyBrokerQueueCountNoRecovery()
- {
- VerifyBrokerQueueCountNoRecovery(MSG_COUNT);
- }
-
- protected static void VerifyBrokerQueueCountNoRecovery(int expectedNumberOfMessages)
- {
- IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = factory.CreateConnection())
- {
- // check messages are present in the queue
- using (ISession session = connection.CreateSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- using (IQueueBrowser browser = session.CreateBrowser(queue))
- {
- connection.Start();
- int count = 0;
- IEnumerator enumerator = browser.GetEnumerator();
-
- while(enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue !");
- count++;
- }
-
- // count should match the expected count
- Assert.AreEqual(expectedNumberOfMessages, count);
- }
- }
- }
- }
-
- protected void VerifyBrokerQueueCount()
- {
- VerifyBrokerQueueCount(MSG_COUNT, connectionURI);
- }
-
- protected void VerifyBrokerQueueCount(int expectedCount)
- {
- VerifyBrokerQueueCount(expectedCount, connectionURI);
- }
-
- protected void VerifyBrokerQueueCount(string connectionUri)
- {
- VerifyBrokerQueueCount(MSG_COUNT, connectionUri);
- }
-
- protected void VerifyBrokerQueueCount(int expectedCount, string connectionUri)
- {
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- // check messages are present in the queue
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- using (IQueueBrowser browser = session.CreateBrowser(queue))
- {
- connection.Start();
- int count = 0;
- IEnumerator enumerator = browser.GetEnumerator();
-
- while (enumerator.MoveNext())
- {
- IMessage msg = enumerator.Current as IMessage;
- Assert.IsNotNull(msg, "message is not in the queue !");
- count++;
- }
-
- // count should match the expected count
- Assert.AreEqual(expectedCount, count);
- }
- }
- }
- }
-
- protected void VerifyNoMessagesInQueueNoRecovery()
- {
- VerifyBrokerQueueCountNoRecovery(0);
- }
-
- protected void VerifyNoMessagesInQueue()
- {
- VerifyBrokerQueueCount(0);
- }
-
- protected static void VerifyBrokerStateNoRecover(int expectedNumberOfMessages)
- {
- IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionURI));
-
- using (IConnection connection = factory.CreateConnection())
- {
- // check messages are present in the queue
- using (ISession session = connection.CreateSession())
- {
- IDestination queue = session.GetQueue(testQueueName);
-
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- connection.Start();
- IMessage msg;
-
- for (int i = 0; i < expectedNumberOfMessages; ++i)
- {
- msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
- Assert.IsNotNull(msg, "message is not in the queue !");
- }
-
- // next message should be empty
- msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
- Assert.IsNull(msg, "message found but not expected !");
- consumer.Close();
- }
- }
-
- connection.Close();
- }
- }
-
- protected void VerifyBrokerHasMessagesInQueue(string connectionURI)
- {
- using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
- {
- // check messages are present in the queue
- using (INetTxSession session = connection.CreateNetTxSession())
- {
- IDestination queue = session.GetQueue(testQueueName);
-
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- connection.Start();
-
- for (int i = 0; i < MSG_COUNT; ++i)
- {
- IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
- Assert.IsNotNull(msg, "message is not in the queue !");
- }
-
- consumer.Close();
- }
- }
- }
- }
-
-
- #endregion
-
- #region Transport Hools for controlling failure point.
-
- public void FailOnPrepareTransportHook(ITransport transport, Command command)
- {
- if (command is TransactionInfo)
- {
- TransactionInfo txInfo = command as TransactionInfo;
- if (txInfo.Type == (byte)TransactionType.Prepare)
- {
- Thread.Sleep(1000);
- Tracer.Debug("Throwing Error on Prepare.");
- throw new Exception("Error writing Prepare command");
- }
- }
- }
-
- public void FailOnRollbackTransportHook(ITransport transport, Command command)
- {
- if (command is TransactionInfo)
- {
- TransactionInfo txInfo = command as TransactionInfo;
- if (txInfo.Type == (byte)TransactionType.Rollback)
- {
- Tracer.Debug("Throwing Error on Rollback.");
- throw new Exception("Error writing Rollback command");
- }
- }
- }
-
- public void FailOnCommitTransportHook(ITransport transport, Command command)
- {
- if (command is TransactionInfo)
- {
- TransactionInfo txInfo = command as TransactionInfo;
- if (txInfo.Type == (byte)TransactionType.CommitTwoPhase)
- {
- Tracer.Debug("Throwing Error on Commit.");
- throw new Exception("Error writing Commit command");
- }
- }
- }
-
- #endregion
-
- #region Recovery Harness Hooks for controlling failure conditions
-
- public void FailOnPreLogRecoveryHook(XATransactionId xid, byte[] recoveryInformatio)
- {
- Tracer.Debug("Throwing Error before the Recovery Information is Logged.");
- throw new Exception("Intentional Error Logging Recovery Information");
- }
-
- #endregion
-
- #region Produce Messages use cases
-
- protected static void ReadFromDbAndProduceToQueueWithCommit(INetTxConnection connection)
- {
- IList entries = ExtractDataSet();
-
- using (INetTxSession session = connection.CreateNetTxSession(true))
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // enqueue several messages read from DB
- try
- {
- using (IMessageProducer producer = session.CreateProducer(queue))
- {
- producer.DeliveryMode = MsgDeliveryMode.Persistent;
-
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
-
- Assert.IsNotNull(Transaction.Current);
-
- Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
- foreach (string textBody in entries)
- {
- producer.Send(session.CreateTextMessage(textBody));
- }
-
- using (SqlCommand sqlDeleteCommand = new SqlCommand(
- string.Format("DELETE FROM {0}", testTable), sqlConnection))
- {
- int count = sqlDeleteCommand.ExecuteNonQuery();
- Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
- }
-
- scoped.Complete();
- }
- }
- }
- catch (Exception e) // exception thrown in TransactionContext.Commit(Enlistment enlistment)
- {
- Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
- Tracer.Debug(e.ToString());
- }
- }
- }
-
- protected static void ReadFromDbAndProduceToQueueWithScopeAborted(INetTxConnection connection)
- {
- IList entries = ExtractDataSet();
-
- using (INetTxSession session = connection.CreateNetTxSession(true))
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // enqueue several messages read from DB
- try
- {
- using (IMessageProducer producer = session.CreateProducer(queue))
- {
- producer.DeliveryMode = MsgDeliveryMode.Persistent;
-
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- {
- sqlConnection.Open();
-
- Assert.IsNotNull(Transaction.Current);
-
- Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
- foreach (string textBody in entries)
- {
- producer.Send(session.CreateTextMessage(textBody));
- }
-
- using (SqlCommand sqlDeleteCommand = new SqlCommand(
- string.Format("DELETE FROM {0}", testTable), sqlConnection))
- {
- int count = sqlDeleteCommand.ExecuteNonQuery();
- Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
- }
- }
- }
- }
- catch (Exception e)
- {
- Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
- Tracer.Debug(e.ToString());
- }
- }
- }
-
- #endregion
-
- #region Consume Messages Use Cases
-
- protected static void ReadFromQueueAndInsertIntoDbWithCommit(INetTxConnection connection)
- {
- using (INetTxSession session = connection.CreateNetTxSession(true))
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- try
- {
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
-
- Assert.IsNotNull(Transaction.Current);
-
- for (int i = 0; i < MSG_COUNT; i++)
- {
- ITextMessage message = consumer.Receive() as ITextMessage;
- Assert.IsNotNull(message, "missing message");
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
- }
-
- scoped.Complete();
- }
- }
- }
- catch (Exception e)
- {
- Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
- Tracer.Debug(e.ToString());
- }
- }
- }
-
- protected static void ReadFromQueueAndInsertIntoDbWithScopeAborted(INetTxConnection connection)
- {
- using (INetTxSession session = connection.CreateNetTxSession(true))
- {
- IQueue queue = session.GetQueue(testQueueName);
-
- // read message from queue and insert into db table
- try
- {
- using (IMessageConsumer consumer = session.CreateConsumer(queue))
- {
- using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
- using (SqlConnection sqlConnection = new SqlConnection(sqlConnectionString))
- using (SqlCommand sqlInsertCommand = new SqlCommand())
- {
- sqlConnection.Open();
- sqlInsertCommand.Connection = sqlConnection;
- Assert.IsNotNull(Transaction.Current);
-
- for (int i = 0; i < MSG_COUNT; i++)
- {
- ITextMessage message = consumer.Receive() as ITextMessage;
- Assert.IsNotNull(message, "missing message");
-
- sqlInsertCommand.CommandText =
- string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
- sqlInsertCommand.ExecuteNonQuery();
- }
- }
- }
- }
- catch (Exception e)
- {
- Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
- Tracer.Debug(e.ToString());
- }
- }
- }
-
- #endregion
- }
-}
+/*
+ * 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.IO;
+using System.Transactions;
+using System.Threading;
+using System.Xml.Linq;
+using NUnit.Framework;
+using Apache.NMS.Test;
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.Transport;
+using System.Data.SqlClient;
+using System.Collections;
+using System.Data;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ // PREREQUISITES to run those tests :
+ // - A local instance of sql server 2008 running, with a db (e.g. TestDB) that
+ // as a table (e.g. TestTable) with a single column (e.g. TestID) of type INT.
+ // The test default to using an SQL Connection string with a user id of
+ // 'user' and the password 'password'
+ // - AMQ Server 5.4.2+
+ // - NMS 1.5+
+ //
+ // IMPORTANT
+ // Because you cannot perform recovery in a process more than once you cannot
+ // run these tests sequentially in the NUnit GUI or NUnit Console runner you
+ // must run them one at a time from the console or using a tool like the ReSharper
+ // plugin for Visual Studio.
+ //
+
+ public class DtcTransactionsTestSupport : NMSTestSupport
+ {
+ protected const int MSG_COUNT = 5;
+ protected string nonExistantPath;
+ protected NetTxConnectionFactory dtcFactory;
+
+ private ITrace oldTracer;
+
+ protected static string createDbConnectionString = string.Empty;
+ protected static string createTableConnectionString = string.Empty;
+ protected static string testDbName = string.Empty;
+ protected static string testTable = string.Empty;
+ protected static string testColumn = string.Empty;
+ protected static string testQueueName = string.Empty;
+ protected static string testDbFileNameLocation = string.Empty;
+ protected static string connectionUri = string.Empty;
+
+ [SetUp]
+ public override void SetUp()
+ {
+ var currentFilePath = Directory.GetCurrentDirectory();
+ var xElement = XElement.Load(currentFilePath + "\\test\\TestDbConfig.xml");
+
+ var testDbConnectionString = xElement.Element("createDbConnectionString");
+ if (testDbConnectionString != null) createDbConnectionString = testDbConnectionString.Attribute("name")?.Value;
+
+ var testTableConnectionString = xElement.Element("createTableConnectionString");
+ if (testTableConnectionString != null) createTableConnectionString = testTableConnectionString.Attribute("name")?.Value;
+
+ var table = xElement.Element("testSqlTable");
+ if (table != null) testTable = table.Attribute("name")?.Value;
+
+ var column = xElement.Element("testSqlColumn");
+ if (column != null) testColumn = column.Attribute("name")?.Value;
+
+ var dbName = xElement.Element("testDbName");
+ if (dbName != null) testDbName = dbName.Attribute("name")?.Value;
+
+ var queueName = xElement.Element("testSqlQueueName");
+ if (queueName != null) testQueueName = queueName.Attribute("name")?.Value;
+
+ var fileName = xElement.Element("dbFileNameLocation");
+ if (fileName != null) testDbFileNameLocation = fileName.Attribute("name")?.Value;
+
+ var conUri = xElement.Element("connectionURI");
+ if (conUri != null) connectionUri = conUri.Attribute("name")?.Value;
+
+ this.oldTracer = Tracer.Trace;
+ this.nonExistantPath = Path.Combine(Directory.GetCurrentDirectory(), Guid.NewGuid().ToString());
+
+ base.SetUp();
+
+ if (!CheckDatabaseExists(createDbConnectionString, testDbName))
+ {
+ CreateTestDb();
+ CreateTestTable();
+ }
+
+
+ PurgeDestination();
+ }
+
+ [TearDown]
+ public override void TearDown()
+ {
+ DeleteDestination();
+
+ base.TearDown();
+
+ Tracer.Trace = this.oldTracer;
+ }
+
+ private bool CheckDatabaseExists(string sqlTmpConnectionString, string databaseName)
+ {
+ bool result;
+ try
+ {
+ var tmpConn = new SqlConnection(sqlTmpConnectionString);
+
+ var sqlCreateDbQuery = $"SELECT database_id FROM sys.databases WHERE Name = '{databaseName}'";
+
+ using (tmpConn)
+ {
+ using (var sqlCmd = new SqlCommand(sqlCreateDbQuery, tmpConn))
+ {
+ tmpConn.Open();
+
+ var resultObj = sqlCmd.ExecuteScalar();
+
+ var databaseId = 0;
+
+ if (resultObj != null)
+ {
+ int.TryParse(resultObj.ToString(), out databaseId);
+ }
+
+ tmpConn.Close();
+
+ result = (databaseId > 0);
+ }
+ }
+ }
+ catch (Exception)
+ {
+ result = false;
+ }
+
+ return result;
+ }
+
+ private void CreateTestDb()
+ {
+ //var createConnection = new SqlConnection("Data Source=WKRKL-F1493EW;Trusted_Connection=yes;User ID=Rafal.Bak;Password=Miesiac*2");
+ var createConnection = new SqlConnection(createDbConnectionString);
+
+ var createDb = "CREATE DATABASE " + testDbName + " ON PRIMARY " +
+ "(NAME = " + testDbName + ", " +
+ "FILENAME = '" + testDbFileNameLocation + "\\MyDatabaseData.mdf', " +
+ "SIZE = 8192KB, MAXSIZE = UNLIMITED, FILEGROWTH = 65536KB) " +
+ "LOG ON (NAME = TestDB_log, " +
+ "FILENAME = '" + testDbFileNameLocation + "\\MyDatabaseLog.ldf', " +
+ "SIZE = 8192KB, " +
+ "MAXSIZE = 2048GB," +
+ "FILEGROWTH = 65536KB) ";
+
+ var createDbCommand = new SqlCommand(createDb, createConnection);
+ try
+ {
+ createConnection.Open();
+ createDbCommand.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+ finally
+ {
+ if (createConnection.State == ConnectionState.Open)
+ {
+ createConnection.Close();
+ }
+ }
+ }
+
+ private void CreateTestTable()
+ {
+ var createConnection = new SqlConnection(createTableConnectionString);
+
+ var createTable = "CREATE TABLE [dbo].[" + testTable + "]([" + testColumn +
+ "][nchar](10) NULL ) ON [PRIMARY]";
+
+ var createTableCommand = new SqlCommand(createTable, createConnection);
+ try
+ {
+ createConnection.Open();
+ createTableCommand.ExecuteNonQuery();
+ }
+ catch (Exception ex)
+ {
+ throw new Exception(ex.Message);
+ }
+ finally
+ {
+ if (createConnection.State == ConnectionState.Open)
+ {
+ createConnection.Close();
+ }
+ }
+ }
+
+ protected void OnException(Exception ex)
+ {
+ Tracer.DebugFormat("Test Driver received Error Notification: {0}", ex.Message);
+ }
+
+ #region Database Utility Methods
+
+ protected static void PrepareDatabase()
+ {
+ using (var sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+
+ // remove all data from test table
+ using (SqlCommand sqlCommand = new SqlCommand($"TRUNCATE TABLE {testTable}", sqlConnection))
+ {
+ sqlCommand.ExecuteNonQuery();
+ }
+
+ // add some data to test table
+ for (var i = 0; i < MSG_COUNT; ++i)
+ {
+ using (var sqlCommand = new SqlCommand(
+ $"INSERT INTO {testTable} ({testColumn}) values ({i})", sqlConnection))
+ {
+ sqlCommand.ExecuteNonQuery();
+ }
+ }
+
+ sqlConnection.Close();
+ }
+ }
+
+ protected static void PurgeDatabase()
+ {
+ using (var sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+
+ // remove all data from test table
+ using (var sqlCommand = new SqlCommand($"TRUNCATE TABLE {testTable}", sqlConnection))
+ {
+ sqlCommand.ExecuteNonQuery();
+ }
+
+ sqlConnection.Close();
+ }
+ }
+
+ protected static IList ExtractDataSet()
+ {
+ IList entries = new ArrayList();
+
+ using (var sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+
+ using (var sqlReadCommand = new SqlCommand(
+ $"SELECT {testColumn} FROM {testTable}", sqlConnection))
+ using (var reader = sqlReadCommand.ExecuteReader())
+ {
+ while (reader.Read())
+ {
+ entries.Add("Hello World " + (string)reader[0]);
+ }
+ }
+ }
+
+ return entries;
+ }
+
+ protected static void VerifyDatabaseTableIsEmpty()
+ {
+ using (var sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+ var sqlCommand = new SqlCommand(
+ $"SELECT COUNT(*) FROM {testTable}",
+ sqlConnection);
+ var count = (int)sqlCommand.ExecuteScalar();
+ Assert.AreEqual(0, count, "wrong number of rows in DB");
+ }
+ }
+
+ protected static void VerifyDatabaseTableIsFull()
+ {
+ VerifyDatabaseTableIsFull(MSG_COUNT);
+ }
+
+ protected static void VerifyDatabaseTableIsFull(int expected)
+ {
+ using (var sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+ var sqlCommand = new SqlCommand(
+ $"SELECT COUNT(*) FROM {testTable}",
+ sqlConnection);
+ var count = (int)sqlCommand.ExecuteScalar();
+ Assert.AreEqual(expected, count, "wrong number of rows in DB");
+ }
+ }
+
+ #endregion
+
+ #region Destination Utility Methods
+
+ protected static void DeleteDestination()
+ {
+ IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (var connection = factory.CreateConnection() as Connection)
+ {
+ using (var session = connection.CreateSession())
+ {
+ var queue = session.GetQueue(testQueueName);
+ try
+ {
+ connection.DeleteDestination(queue);
+ }
+ catch(Exception e)
+ {
+ throw new Exception(e.Message);
+ }
+ }
+ }
+ }
+
+ protected static void PurgeDestination()
+ {
+ IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (var connection = factory.CreateConnection())
+ {
+ connection.Start();
+
+ using (var session = connection.CreateSession())
+ using (var consumer = session.CreateConsumer(session.GetQueue(testQueueName)))
+ {
+ IMessage recvd;
+ while ((recvd = consumer.Receive(TimeSpan.FromMilliseconds(3000))) != null)
+ {
+ Tracer.Debug("Setup Purged Message: " + recvd);
+ }
+ }
+ }
+ }
+
+ protected static void PurgeAndFillQueue()
+ {
+ PurgeAndFillQueue(MSG_COUNT);
+ }
+
+ protected static void PurgeAndFillQueue(int msgCount)
+ {
+ IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (var connection = factory.CreateConnection())
+ {
+ connection.Start();
+
+ using (var session = connection.CreateSession())
+ {
+ var queue = session.GetQueue(testQueueName);
+
+ // empty queue
+ using (var consumer = session.CreateConsumer(queue))
+ {
+ while ((consumer.Receive(TimeSpan.FromMilliseconds(2000))) != null)
+ {
+ }
+ }
+
+ // enqueue several messages
+ using (var producer = session.CreateProducer(queue))
+ {
+ producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+ for (var i = 0; i < msgCount; i++)
+ {
+ producer.Send(session.CreateTextMessage(i.ToString()));
+ }
+ }
+ }
+ }
+ }
+
+ #endregion
+
+ #region Broker Queue State Validation Routines
+
+ protected static void VerifyBrokerQueueCountNoRecovery()
+ {
+ VerifyBrokerQueueCountNoRecovery(MSG_COUNT);
+ }
+
+ protected static void VerifyBrokerQueueCountNoRecovery(int expectedNumberOfMessages)
+ {
+ IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = factory.CreateConnection())
+ {
+ // check messages are present in the queue
+ using (ISession session = connection.CreateSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ using (IQueueBrowser browser = session.CreateBrowser(queue))
+ {
+ connection.Start();
+ int count = 0;
+ IEnumerator enumerator = browser.GetEnumerator();
+
+ while(enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue !");
+ count++;
+ }
+
+ // count should match the expected count
+ Assert.AreEqual(expectedNumberOfMessages, count);
+ }
+ }
+ }
+ }
+
+ protected void VerifyBrokerQueueCount()
+ {
+ VerifyBrokerQueueCount(MSG_COUNT, connectionUri);
+ }
+
+ protected void VerifyBrokerQueueCount(int expectedCount)
+ {
+ VerifyBrokerQueueCount(expectedCount, connectionUri);
+ }
+
+ protected void VerifyBrokerQueueCount(string connectionUri)
+ {
+ VerifyBrokerQueueCount(MSG_COUNT, connectionUri);
+ }
+
+ protected void VerifyBrokerQueueCount(int expectedCount, string connectionUri)
+ {
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ // check messages are present in the queue
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ using (IQueueBrowser browser = session.CreateBrowser(queue))
+ {
+ connection.Start();
+ int count = 0;
+ IEnumerator enumerator = browser.GetEnumerator();
+
+ while (enumerator.MoveNext())
+ {
+ IMessage msg = enumerator.Current as IMessage;
+ Assert.IsNotNull(msg, "message is not in the queue !");
+ count++;
+ }
+
+ // count should match the expected count
+ Assert.AreEqual(expectedCount, count);
+ }
+ }
+ }
+ }
+
+ protected void VerifyNoMessagesInQueueNoRecovery()
+ {
+ VerifyBrokerQueueCountNoRecovery(0);
+ }
+
+ protected void VerifyNoMessagesInQueue()
+ {
+ VerifyBrokerQueueCount(0);
+ }
+
+ protected static void VerifyBrokerStateNoRecover(int expectedNumberOfMessages)
+ {
+ IConnectionFactory factory = new ConnectionFactory(ReplaceEnvVar(connectionUri));
+
+ using (IConnection connection = factory.CreateConnection())
+ {
+ // check messages are present in the queue
+ using (ISession session = connection.CreateSession())
+ {
+ IDestination queue = session.GetQueue(testQueueName);
+
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ connection.Start();
+ IMessage msg;
+
+ for (int i = 0; i < expectedNumberOfMessages; ++i)
+ {
+ msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNotNull(msg, "message is not in the queue !");
+ }
+
+ // next message should be empty
+ msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNull(msg, "message found but not expected !");
+ consumer.Close();
+ }
+ }
+
+ connection.Close();
+ }
+ }
+
+ protected void VerifyBrokerHasMessagesInQueue(string connectionURI)
+ {
+ using (INetTxConnection connection = dtcFactory.CreateNetTxConnection())
+ {
+ // check messages are present in the queue
+ using (INetTxSession session = connection.CreateNetTxSession())
+ {
+ IDestination queue = session.GetQueue(testQueueName);
+
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ connection.Start();
+
+ for (int i = 0; i < MSG_COUNT; ++i)
+ {
+ IMessage msg = consumer.Receive(TimeSpan.FromMilliseconds(2000));
+ Assert.IsNotNull(msg, "message is not in the queue !");
+ }
+
+ consumer.Close();
+ }
+ }
+ }
+ }
+
+
+ #endregion
+
+ #region Transport Hools for controlling failure point.
+
+ public void FailOnPrepareTransportHook(ITransport transport, Command command)
+ {
+ if (command is TransactionInfo)
+ {
+ TransactionInfo txInfo = command as TransactionInfo;
+ if (txInfo.Type == (byte)TransactionType.Prepare)
+ {
+ Thread.Sleep(1000);
+ Tracer.Debug("Throwing Error on Prepare.");
+ throw new Exception("Error writing Prepare command");
+ }
+ }
+ }
+
+ public void FailOnRollbackTransportHook(ITransport transport, Command command)
+ {
+ if (command is TransactionInfo)
+ {
+ TransactionInfo txInfo = command as TransactionInfo;
+ if (txInfo.Type == (byte)TransactionType.Rollback)
+ {
+ Tracer.Debug("Throwing Error on Rollback.");
+ throw new Exception("Error writing Rollback command");
+ }
+ }
+ }
+
+ public void FailOnCommitTransportHook(ITransport transport, Command command)
+ {
+ if (command is TransactionInfo)
+ {
+ TransactionInfo txInfo = command as TransactionInfo;
+ if (txInfo.Type == (byte)TransactionType.CommitTwoPhase)
+ {
+ Tracer.Debug("Throwing Error on Commit.");
+ throw new Exception("Error writing Commit command");
+ }
+ }
+ }
+
+ #endregion
+
+ #region Recovery Harness Hooks for controlling failure conditions
+
+ public void FailOnPreLogRecoveryHook(XATransactionId xid, byte[] recoveryInformatio)
+ {
+ Tracer.Debug("Throwing Error before the Recovery Information is Logged.");
+ throw new Exception("Intentional Error Logging Recovery Information");
+ }
+
+ #endregion
+
+ #region Produce Messages use cases
+
+ protected static void ReadFromDbAndProduceToQueueWithCommit(INetTxConnection connection)
+ {
+ IList entries = ExtractDataSet();
+
+ using (INetTxSession session = connection.CreateNetTxSession(true))
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // enqueue several messages read from DB
+ try
+ {
+ using (IMessageProducer producer = session.CreateProducer(queue))
+ {
+ producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+
+ Assert.IsNotNull(Transaction.Current);
+
+ Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
+ foreach (string textBody in entries)
+ {
+ producer.Send(session.CreateTextMessage(textBody));
+ }
+
+ using (SqlCommand sqlDeleteCommand = new SqlCommand(
+ string.Format("DELETE FROM {0}", testTable), sqlConnection))
+ {
+ int count = sqlDeleteCommand.ExecuteNonQuery();
+ Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
+ }
+
+ scoped.Complete();
+ }
+ }
+ }
+ catch (Exception e) // exception thrown in TransactionContext.Commit(Enlistment enlistment)
+ {
+ Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+ Tracer.Debug(e.ToString());
+ }
+ }
+ }
+
+ protected static void ReadFromDbAndProduceToQueueWithScopeAborted(INetTxConnection connection)
+ {
+ IList entries = ExtractDataSet();
+
+ using (INetTxSession session = connection.CreateNetTxSession(true))
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // enqueue several messages read from DB
+ try
+ {
+ using (IMessageProducer producer = session.CreateProducer(queue))
+ {
+ producer.DeliveryMode = MsgDeliveryMode.Persistent;
+
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ {
+ sqlConnection.Open();
+
+ Assert.IsNotNull(Transaction.Current);
+
+ Tracer.DebugFormat("Sending {0} messages to Broker in this TX", entries.Count);
+ foreach (string textBody in entries)
+ {
+ producer.Send(session.CreateTextMessage(textBody));
+ }
+
+ using (SqlCommand sqlDeleteCommand = new SqlCommand(
+ string.Format("DELETE FROM {0}", testTable), sqlConnection))
+ {
+ int count = sqlDeleteCommand.ExecuteNonQuery();
+ Assert.AreEqual(entries.Count, count, "wrong number of rows deleted");
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+ Tracer.Debug(e.ToString());
+ }
+ }
+ }
+
+ #endregion
+
+ #region Consume Messages Use Cases
+
+ protected static void ReadFromQueueAndInsertIntoDbWithCommit(INetTxConnection connection)
+ {
+ using (INetTxSession session = connection.CreateNetTxSession(true))
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ try
+ {
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+
+ Assert.IsNotNull(Transaction.Current);
+
+ for (int i = 0; i < MSG_COUNT; i++)
+ {
+ ITextMessage message = consumer.Receive() as ITextMessage;
+ Assert.IsNotNull(message, "missing message");
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+ }
+
+ scoped.Complete();
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+ Tracer.Debug(e.ToString());
+ }
+ }
+ }
+
+ protected static void ReadFromQueueAndInsertIntoDbWithScopeAborted(INetTxConnection connection)
+ {
+ using (INetTxSession session = connection.CreateNetTxSession(true))
+ {
+ IQueue queue = session.GetQueue(testQueueName);
+
+ // read message from queue and insert into db table
+ try
+ {
+ using (IMessageConsumer consumer = session.CreateConsumer(queue))
+ {
+ using (TransactionScope scoped = new TransactionScope(TransactionScopeOption.RequiresNew))
+ using (SqlConnection sqlConnection = new SqlConnection(createDbConnectionString))
+ using (SqlCommand sqlInsertCommand = new SqlCommand())
+ {
+ sqlConnection.Open();
+ sqlInsertCommand.Connection = sqlConnection;
+ Assert.IsNotNull(Transaction.Current);
+
+ for (int i = 0; i < MSG_COUNT; i++)
+ {
+ ITextMessage message = consumer.Receive() as ITextMessage;
+ Assert.IsNotNull(message, "missing message");
+
+ sqlInsertCommand.CommandText =
+ string.Format("INSERT INTO {0} VALUES ({1})", testTable, Convert.ToInt32(message.Text));
+ sqlInsertCommand.ExecuteNonQuery();
+ }
+ }
+ }
+ }
+ catch (Exception e)
+ {
+ Tracer.Debug("TX;Error from TransactionScope: " + e.Message);
+ Tracer.Debug(e.ToString());
+ }
+ }
+ }
+
+ #endregion
+ }
+}
diff --git a/src/test/csharp/ExclusiveConsumerTest.cs b/test/ExclusiveConsumerTest.cs
similarity index 100%
rename from src/test/csharp/ExclusiveConsumerTest.cs
rename to test/ExclusiveConsumerTest.cs
diff --git a/test/Extensions/ExpectedExceptionAttribute.cs b/test/Extensions/ExpectedExceptionAttribute.cs
new file mode 100644
index 0000000..5959b17
--- /dev/null
+++ b/test/Extensions/ExpectedExceptionAttribute.cs
@@ -0,0 +1,66 @@
+using System;
+using NUnit.Framework;
+using NUnit.Framework.Interfaces;
+using NUnit.Framework.Internal;
+using NUnit.Framework.Internal.Commands;
+
+namespace NUnit.Framework
+{
+ /// <summary>
+ /// A simple ExpectedExceptionAttribute
+ /// https://github.com/nunit/nunit-csharp-samples/blob/master/ExpectedExceptionExample/ExpectedExceptionAttribute.cs
+ /// </summary>
+ [AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = false)]
+ public class ExpectedExceptionAttribute : NUnitAttribute, IWrapTestMethod
+ {
+ private readonly Type _expectedExceptionType;
+
+ public ExpectedExceptionAttribute(Type type)
+ {
+ _expectedExceptionType = type;
+ }
+
+ public TestCommand Wrap(TestCommand command)
+ {
+ return new ExpectedExceptionCommand(command, _expectedExceptionType);
+ }
+
+ private class ExpectedExceptionCommand : DelegatingTestCommand
+ {
+ private readonly Type _expectedType;
+
+ public ExpectedExceptionCommand(TestCommand innerCommand, Type expectedType)
+ : base(innerCommand)
+ {
+ _expectedType = expectedType;
+ }
+
+ public override TestResult Execute(TestExecutionContext context)
+ {
+ Type caughtType = null;
+
+ try
+ {
+ innerCommand.Execute(context);
+ }
+ catch (Exception ex)
+ {
+ if (ex is NUnitException)
+ ex = ex.InnerException;
+ caughtType = ex.GetType();
+ }
+
+ if (caughtType == _expectedType)
+ context.CurrentResult.SetResult(ResultState.Success);
+ else if (caughtType != null)
+ context.CurrentResult.SetResult(ResultState.Failure,
+ string.Format("Expected {0} but got {1}", _expectedType.Name, caughtType.Name));
+ else
+ context.CurrentResult.SetResult(ResultState.Failure,
+ string.Format("Expected {0} but no exception was thrown", _expectedType.Name));
+
+ return context.CurrentResult;
+ }
+ }
+ }
+}
diff --git a/src/test/csharp/IndividualAckTest.cs b/test/IndividualAckTest.cs
similarity index 100%
rename from src/test/csharp/IndividualAckTest.cs
rename to test/IndividualAckTest.cs
diff --git a/src/test/csharp/InvalidCredentialsTest.cs b/test/InvalidCredentialsTest.cs
similarity index 100%
rename from src/test/csharp/InvalidCredentialsTest.cs
rename to test/InvalidCredentialsTest.cs
diff --git a/src/test/csharp/MessageConsumerTest.cs b/test/MessageConsumerTest.cs
similarity index 100%
rename from src/test/csharp/MessageConsumerTest.cs
rename to test/MessageConsumerTest.cs
diff --git a/src/test/csharp/MessageListenerRedeliveryTest.cs b/test/MessageListenerRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/MessageListenerRedeliveryTest.cs
rename to test/MessageListenerRedeliveryTest.cs
diff --git a/src/test/csharp/MessageProducerTest.cs b/test/MessageProducerTest.cs
similarity index 100%
rename from src/test/csharp/MessageProducerTest.cs
rename to test/MessageProducerTest.cs
diff --git a/src/test/csharp/NMSConnectionFactoryTest.cs b/test/NMSConnectionFactoryTest.cs
similarity index 79%
rename from src/test/csharp/NMSConnectionFactoryTest.cs
rename to test/NMSConnectionFactoryTest.cs
index a8b32e2..cd99ee4 100644
--- a/src/test/csharp/NMSConnectionFactoryTest.cs
+++ b/test/NMSConnectionFactoryTest.cs
@@ -22,6 +22,7 @@
using Apache.NMS.ActiveMQ.Transport.Mock;
using Apache.NMS.Test;
using NUnit.Framework;
+using NUnit.Framework.Constraints;
namespace Apache.NMS.ActiveMQ.Test
{
@@ -55,28 +56,6 @@
[TestCase("activemq:failover:discovery:(multicast://default)")]
[TestCase("activemq:failover:(discovery:(multicast://default))")]
#endif
-
- [TestCase("activemq:tcp://${activemqhost}:61616/InvalidHost:0", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:tcp://${activemqhost}:61616/0.0.0.0:-1", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("tcp://InvalidHost:61616", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:tcp://InvalidHost:61616", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:tcp://InvalidHost:61616?connection.asyncclose=false", ExpectedException = typeof(NMSConnectionException))]
-
- [TestCase("tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true", ExpectedException = typeof(NMSConnectionException))]
-
- [TestCase("ftp://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("http://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("discovery://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("sms://${activemqhost}:61616", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:multicast://${activemqhost}:6155", ExpectedException = typeof(NMSConnectionException))]
- [TestCase("activemq:(tcp://${activemqhost}:61616)?connection.asyncClose=false", ExpectedException = typeof(NMSConnectionException))]
-
- [TestCase("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)", ExpectedException = typeof(UriFormatException))]
- [TestCase("tcp://${activemqhost}:61616,tcp://${activemqhost}:61616", ExpectedException = typeof(UriFormatException))]
public void TestURI(string connectionURI)
{
NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
@@ -89,6 +68,56 @@
}
}
+ [TestCase("activemq:tcp://${activemqhost}:61616/InvalidHost:0")]
+ [TestCase("activemq:tcp://${activemqhost}:61616/0.0.0.0:-1")]
+ [TestCase("tcp://InvalidHost:61616")]
+ [TestCase("activemq:tcp://InvalidHost:61616")]
+ [TestCase("activemq:tcp://InvalidHost:61616?connection.asyncclose=false")]
+
+ [TestCase("tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+ [TestCase("activemq:tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+ [TestCase("activemq:failover:tcp://${activemqhost}:61616?connection.InvalidParameter=true")]
+ [TestCase("activemq:failover:(tcp://${activemqhost}:61616)?connection.InvalidParameter=true")]
+ [TestCase("activemq:failover:(tcp://${activemqhost}:61616,tcp://${activemqbackuphost}:61616)?connection.InvalidParameter=true")]
+
+ [TestCase("ftp://${activemqhost}:61616")]
+ [TestCase("http://${activemqhost}:61616")]
+ [TestCase("discovery://${activemqhost}:6155")]
+ [TestCase("sms://${activemqhost}:61616")]
+ [TestCase("activemq:multicast://${activemqhost}:6155")]
+ [TestCase("activemq:(tcp://${activemqhost}:61616)?connection.asyncClose=false")]
+ public void TestURIFailures_NMSConnectionException(string connectionURI)
+ {
+ Assert.Throws<NMSConnectionException>(() =>
+ {
+ NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
+ Assert.IsNotNull(factory);
+ Assert.IsNotNull(factory.ConnectionFactory);
+ using(IConnection connection = factory.CreateConnection("", ""))
+ {
+ Assert.IsNotNull(connection);
+ connection.Close();
+ }
+ });
+ }
+
+ [TestCase("(tcp://${activemqhost}:61616,tcp://${activemqhost}:61616)")]
+ [TestCase("tcp://${activemqhost}:61616,tcp://${activemqhost}:61616")]
+ public void TestURIFailures_UriFormatException(string connectionURI)
+ {
+ Assert.Throws<UriFormatException>(() =>
+ {
+ NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(connectionURI));
+ Assert.IsNotNull(factory);
+ Assert.IsNotNull(factory.ConnectionFactory);
+ using(IConnection connection = factory.CreateConnection("", ""))
+ {
+ Assert.IsNotNull(connection);
+ connection.Close();
+ }
+ });
+ }
+
[Test]
public void TestConnectionSendsAuthenticationData()
{
diff --git a/test/NMSKey.snk b/test/NMSKey.snk
new file mode 100644
index 0000000..fdd5b24
--- /dev/null
+++ b/test/NMSKey.snk
Binary files differ
diff --git a/src/test/csharp/NMSSessionRecoverTest.cs b/test/NMSSessionRecoverTest.cs
similarity index 100%
rename from src/test/csharp/NMSSessionRecoverTest.cs
rename to test/NMSSessionRecoverTest.cs
diff --git a/src/test/csharp/NetTxConnectionFactoryTest.cs b/test/NetTxConnectionFactoryTest.cs
similarity index 99%
rename from src/test/csharp/NetTxConnectionFactoryTest.cs
rename to test/NetTxConnectionFactoryTest.cs
index f7796ef..55b8a7d 100644
--- a/src/test/csharp/NetTxConnectionFactoryTest.cs
+++ b/test/NetTxConnectionFactoryTest.cs
@@ -281,7 +281,7 @@
}
[Test]
- [ExpectedException( "Apache.NMS.NMSException" )]
+ [ExpectedException( typeof(Apache.NMS.NMSException))]
public void TestConfigureRecoveryPolicyLoggerTypeWithInvalidType(
[Values("tcp://${activemqhost}:61616?nms.RecoveryPolicy.RecoveryLoggerType=invalid")]
string baseConnectionURI)
diff --git a/src/test/csharp/NetTxTransactionTest.cs b/test/NetTxTransactionTest.cs
similarity index 100%
rename from src/test/csharp/NetTxTransactionTest.cs
rename to test/NetTxTransactionTest.cs
diff --git a/src/test/csharp/NmsConsoleTracer.cs b/test/NmsConsoleTracer.cs
similarity index 99%
rename from src/test/csharp/NmsConsoleTracer.cs
rename to test/NmsConsoleTracer.cs
index 37f7ad7..906823a 100644
--- a/src/test/csharp/NmsConsoleTracer.cs
+++ b/test/NmsConsoleTracer.cs
@@ -1,75 +1,75 @@
-/*
- * 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.
- */
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- public class NmsConsoleTracer : Apache.NMS.ITrace
- {
- #region ITrace Members
- public void Debug(string message)
- {
- System.Console.WriteLine(string.Format("DEBUG: {0}", message));
- }
-
- public void Error(string message)
- {
- System.Console.WriteLine(string.Format("ERROR: {0}", message));
- }
-
- public void Fatal(string message)
- {
- System.Console.WriteLine(string.Format("FATAL: {0}", message));
- }
-
- public void Info(string message)
- {
- System.Console.WriteLine(string.Format("INFO: {0}", message));
- }
-
- public void Warn(string message)
- {
- System.Console.WriteLine(string.Format("WARN: {0}", message));
- }
-
- public bool IsDebugEnabled
- {
- get { return true; }
- }
-
- public bool IsErrorEnabled
- {
- get { return true; }
- }
-
- public bool IsFatalEnabled
- {
- get { return true; }
- }
-
- public bool IsInfoEnabled
- {
- get { return true; }
- }
-
- public bool IsWarnEnabled
- {
- get { return true; }
- }
-
- #endregion
- }
-}
+/*
+ * 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.
+ */
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ public class NmsConsoleTracer : Apache.NMS.ITrace
+ {
+ #region ITrace Members
+ public void Debug(string message)
+ {
+ System.Console.WriteLine(string.Format("DEBUG: {0}", message));
+ }
+
+ public void Error(string message)
+ {
+ System.Console.WriteLine(string.Format("ERROR: {0}", message));
+ }
+
+ public void Fatal(string message)
+ {
+ System.Console.WriteLine(string.Format("FATAL: {0}", message));
+ }
+
+ public void Info(string message)
+ {
+ System.Console.WriteLine(string.Format("INFO: {0}", message));
+ }
+
+ public void Warn(string message)
+ {
+ System.Console.WriteLine(string.Format("WARN: {0}", message));
+ }
+
+ public bool IsDebugEnabled
+ {
+ get { return true; }
+ }
+
+ public bool IsErrorEnabled
+ {
+ get { return true; }
+ }
+
+ public bool IsFatalEnabled
+ {
+ get { return true; }
+ }
+
+ public bool IsInfoEnabled
+ {
+ get { return true; }
+ }
+
+ public bool IsWarnEnabled
+ {
+ get { return true; }
+ }
+
+ #endregion
+ }
+}
diff --git a/src/test/csharp/NonBlockingConsumerRedeliveryTest.cs b/test/NonBlockingConsumerRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/NonBlockingConsumerRedeliveryTest.cs
rename to test/NonBlockingConsumerRedeliveryTest.cs
diff --git a/src/test/csharp/OpenWire/BaseDataStreamMarshallerTest.cs b/test/OpenWire/BaseDataStreamMarshallerTest.cs
similarity index 100%
rename from src/test/csharp/OpenWire/BaseDataStreamMarshallerTest.cs
rename to test/OpenWire/BaseDataStreamMarshallerTest.cs
diff --git a/src/test/csharp/OpenWire/BooleanStreamTest.cs b/test/OpenWire/BooleanStreamTest.cs
similarity index 100%
rename from src/test/csharp/OpenWire/BooleanStreamTest.cs
rename to test/OpenWire/BooleanStreamTest.cs
diff --git a/src/test/csharp/OpenWire/MaxInactivityDurationTest.cs b/test/OpenWire/MaxInactivityDurationTest.cs
similarity index 99%
rename from src/test/csharp/OpenWire/MaxInactivityDurationTest.cs
rename to test/OpenWire/MaxInactivityDurationTest.cs
index b3c8c67..1c18238 100644
--- a/src/test/csharp/OpenWire/MaxInactivityDurationTest.cs
+++ b/test/OpenWire/MaxInactivityDurationTest.cs
@@ -1,120 +1,120 @@
-/*
- * 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.Diagnostics;
-using System.Threading;
-using Apache.NMS.Test;
-using Apache.NMS.Util;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- public class MaxInactivityDurationTest : NMSTestSupport
- {
- protected static string DESTINATION_NAME = "TEST.MaxInactivityDuration";
- protected static string CORRELATION_ID = "MaxInactivityCorrelationID";
-
- [Test]
- public void TestMaxInactivityDuration()
- {
- string testuri = "activemq:tcp://${activemqhost}:61616" +
- "?wireFormat.maxInactivityDurationInitialDelay=5000" +
- "&wireFormat.maxInactivityDuration=10000" +
- "&connection.asyncClose=false";
-
- NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
- using(IConnection connection = factory.CreateConnection("", ""))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
- {
- IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- SendMessage(producer);
-
- IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
-
- // Go inactive...
- Thread.Sleep(TimeSpan.FromSeconds(30));
-
- // Send another message.
- SendMessage(producer);
- receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
- }
- }
- }
- }
-
- protected void SendMessage(IMessageProducer producer)
- {
- IMessage request = producer.CreateMessage();
- request.NMSCorrelationID = CORRELATION_ID;
- request.NMSType = "Test";
- producer.Send(request);
- }
-
- [Test, Sequential]
- public void TestInactivityMonitorThreadLeak(
- [Values(0, 1000)]
- int inactivityDuration)
- {
- Process currentProcess = Process.GetCurrentProcess();
- Tracer.InfoFormat("Beginning thread count: {0}, handle count: {1}", currentProcess.Threads.Count, currentProcess.HandleCount);
-
- string testuri = string.Format("activemq:tcp://${{activemqhost}}:61616?wireFormat.maxInactivityDuration={0}", inactivityDuration);
-
- NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
-
- // We measure the initial resource counts, and then allow a certain fudge factor for the resources
- // to fluctuate at run-time. We allow for a certain amount of fluctuation, but if the counts
- // grow outside the safe boundaries of delayed garbage collection, then we fail the test.
- currentProcess = Process.GetCurrentProcess();
- int beginThreadCount = currentProcess.Threads.Count;
- int beginHandleCount = currentProcess.HandleCount;
- int maxThreadGrowth = 10;
- int maxHandleGrowth = 500;
-
- for(int i = 0; i < 200; i++)
- {
- using(IConnection connection = factory.CreateConnection("ResourceLeakTest", "Password"))
- {
- using(ISession session = connection.CreateSession())
- {
- IDestination destination = SessionUtil.GetDestination(session, "topic://TEST.NMSResourceLeak");
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- {
- connection.Start();
- }
- }
- }
-
- currentProcess = Process.GetCurrentProcess();
- int endThreadCount = currentProcess.Threads.Count;
- int endHandleCount = currentProcess.HandleCount;
-
- Assert.Less(endThreadCount, beginThreadCount + maxThreadGrowth, string.Format("Thread count grew beyond maximum of {0} on iteration #{1}.", maxThreadGrowth, i));
- Assert.Less(endHandleCount, beginHandleCount + maxHandleGrowth, string.Format("Handle count grew beyond maximum of {0} on iteration #{1}.", maxHandleGrowth, i));
- }
- }
- }
-}
+/*
+ * 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.Diagnostics;
+using System.Threading;
+using Apache.NMS.Test;
+using Apache.NMS.Util;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ public class MaxInactivityDurationTest : NMSTestSupport
+ {
+ protected static string DESTINATION_NAME = "TEST.MaxInactivityDuration";
+ protected static string CORRELATION_ID = "MaxInactivityCorrelationID";
+
+ [Test]
+ public void TestMaxInactivityDuration()
+ {
+ string testuri = "activemq:tcp://${activemqhost}:61616" +
+ "?wireFormat.maxInactivityDurationInitialDelay=5000" +
+ "&wireFormat.maxInactivityDuration=10000" +
+ "&connection.asyncClose=false";
+
+ NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
+ using(IConnection connection = factory.CreateConnection("", ""))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
+ {
+ IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ SendMessage(producer);
+
+ IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
+
+ // Go inactive...
+ Thread.Sleep(TimeSpan.FromSeconds(30));
+
+ // Send another message.
+ SendMessage(producer);
+ receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.AreEqual(CORRELATION_ID, receivedMsg.NMSCorrelationID, "Invalid correlation ID.");
+ }
+ }
+ }
+ }
+
+ protected void SendMessage(IMessageProducer producer)
+ {
+ IMessage request = producer.CreateMessage();
+ request.NMSCorrelationID = CORRELATION_ID;
+ request.NMSType = "Test";
+ producer.Send(request);
+ }
+
+ [Test, Sequential]
+ public void TestInactivityMonitorThreadLeak(
+ [Values(0, 1000)]
+ int inactivityDuration)
+ {
+ Process currentProcess = Process.GetCurrentProcess();
+ Tracer.InfoFormat("Beginning thread count: {0}, handle count: {1}", currentProcess.Threads.Count, currentProcess.HandleCount);
+
+ string testuri = string.Format("activemq:tcp://${{activemqhost}}:61616?wireFormat.maxInactivityDuration={0}", inactivityDuration);
+
+ NMSConnectionFactory factory = new NMSConnectionFactory(NMSTestSupport.ReplaceEnvVar(testuri));
+
+ // We measure the initial resource counts, and then allow a certain fudge factor for the resources
+ // to fluctuate at run-time. We allow for a certain amount of fluctuation, but if the counts
+ // grow outside the safe boundaries of delayed garbage collection, then we fail the test.
+ currentProcess = Process.GetCurrentProcess();
+ int beginThreadCount = currentProcess.Threads.Count;
+ int beginHandleCount = currentProcess.HandleCount;
+ int maxThreadGrowth = 10;
+ int maxHandleGrowth = 500;
+
+ for(int i = 0; i < 200; i++)
+ {
+ using(IConnection connection = factory.CreateConnection("ResourceLeakTest", "Password"))
+ {
+ using(ISession session = connection.CreateSession())
+ {
+ IDestination destination = SessionUtil.GetDestination(session, "topic://TEST.NMSResourceLeak");
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ {
+ connection.Start();
+ }
+ }
+ }
+
+ currentProcess = Process.GetCurrentProcess();
+ int endThreadCount = currentProcess.Threads.Count;
+ int endHandleCount = currentProcess.HandleCount;
+
+ Assert.Less(endThreadCount, beginThreadCount + maxThreadGrowth, string.Format("Thread count grew beyond maximum of {0} on iteration #{1}.", maxThreadGrowth, i));
+ Assert.Less(endHandleCount, beginHandleCount + maxHandleGrowth, string.Format("Handle count grew beyond maximum of {0} on iteration #{1}.", maxHandleGrowth, i));
+ }
+ }
+ }
+}
diff --git a/src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs b/test/OpenWire/PrefetchSizeZeroTest.cs
similarity index 99%
rename from src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs
rename to test/OpenWire/PrefetchSizeZeroTest.cs
index 7c6c032..dcd7b62 100644
--- a/src/test/csharp/OpenWire/PrefetchSizeZeroTest.cs
+++ b/test/OpenWire/PrefetchSizeZeroTest.cs
@@ -1,72 +1,72 @@
-/*
- * 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.Test;
-using Apache.NMS.Util;
-using Apache.NMS.ActiveMQ;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- public class PrefetchSizeZeroTest : NMSTestSupport
- {
- protected static string DESTINATION_NAME = "TEST.PrefetchSizeZero";
-
- [Test]
- public void TestZeroPrefetchSize()
- {
- using(IConnection connection = CreateConnection())
- {
- (connection as Apache.NMS.ActiveMQ.Connection).PrefetchPolicy.All = 0;
-
- connection.Start();
- using(Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
- {
- IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- SendMessage(producer);
- SendMessage(producer);
-
- IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.IsNotNull(receivedMsg);
- receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.IsNotNull(receivedMsg);
- receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.IsNull(receivedMsg);
-
- // Send another message.
- SendMessage(producer);
- receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
- Assert.IsNotNull(receivedMsg);
-
- }
- }
- }
- }
-
- protected void SendMessage(IMessageProducer producer)
- {
- IMessage request = producer.CreateMessage();
- request.NMSType = "Test";
- producer.Send(request);
- }
- }
-}
+/*
+ * 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.Test;
+using Apache.NMS.Util;
+using Apache.NMS.ActiveMQ;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ public class PrefetchSizeZeroTest : NMSTestSupport
+ {
+ protected static string DESTINATION_NAME = "TEST.PrefetchSizeZero";
+
+ [Test]
+ public void TestZeroPrefetchSize()
+ {
+ using(IConnection connection = CreateConnection())
+ {
+ (connection as Apache.NMS.ActiveMQ.Connection).PrefetchPolicy.All = 0;
+
+ connection.Start();
+ using(Session session = (Session)connection.CreateSession(AcknowledgementMode.AutoAcknowledge))
+ {
+ IDestination destination = SessionUtil.GetDestination(session, DESTINATION_NAME);
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ SendMessage(producer);
+ SendMessage(producer);
+
+ IMessage receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.IsNotNull(receivedMsg);
+ receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.IsNotNull(receivedMsg);
+ receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.IsNull(receivedMsg);
+
+ // Send another message.
+ SendMessage(producer);
+ receivedMsg = consumer.Receive(TimeSpan.FromSeconds(5));
+ Assert.IsNotNull(receivedMsg);
+
+ }
+ }
+ }
+ }
+
+ protected void SendMessage(IMessageProducer producer)
+ {
+ IMessage request = producer.CreateMessage();
+ request.NMSType = "Test";
+ producer.Send(request);
+ }
+ }
+}
diff --git a/src/test/csharp/OptimizedAckTest.cs b/test/OptimizedAckTest.cs
similarity index 100%
rename from src/test/csharp/OptimizedAckTest.cs
rename to test/OptimizedAckTest.cs
diff --git a/src/test/csharp/QueueBrowserTests.cs b/test/QueueBrowserTests.cs
similarity index 99%
rename from src/test/csharp/QueueBrowserTests.cs
rename to test/QueueBrowserTests.cs
index c737090..85c96db 100644
--- a/src/test/csharp/QueueBrowserTests.cs
+++ b/test/QueueBrowserTests.cs
@@ -194,7 +194,7 @@
}
[Test]
- [ExpectedException("Apache.NMS.NMSException")]
+ [ExpectedException(typeof(NMSException))]
public void TestCreateBrowserFailsWithZeroPrefetch()
{
using (Connection connection = CreateConnection() as Connection)
diff --git a/src/test/csharp/QueueConsumerPriorityTest.cs b/test/QueueConsumerPriorityTest.cs
similarity index 100%
rename from src/test/csharp/QueueConsumerPriorityTest.cs
rename to test/QueueConsumerPriorityTest.cs
diff --git a/src/test/csharp/RollbackRedeliveryTest.cs b/test/RollbackRedeliveryTest.cs
similarity index 100%
rename from src/test/csharp/RollbackRedeliveryTest.cs
rename to test/RollbackRedeliveryTest.cs
diff --git a/src/test/csharp/State/ConnectionStateTest.cs b/test/State/ConnectionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ConnectionStateTest.cs
rename to test/State/ConnectionStateTest.cs
diff --git a/src/test/csharp/State/ConnectionStateTrackerTest.cs b/test/State/ConnectionStateTrackerTest.cs
similarity index 100%
rename from src/test/csharp/State/ConnectionStateTrackerTest.cs
rename to test/State/ConnectionStateTrackerTest.cs
diff --git a/src/test/csharp/State/ConsumerStateTest.cs b/test/State/ConsumerStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ConsumerStateTest.cs
rename to test/State/ConsumerStateTest.cs
diff --git a/src/test/csharp/State/ProducerStateTest.cs b/test/State/ProducerStateTest.cs
similarity index 100%
rename from src/test/csharp/State/ProducerStateTest.cs
rename to test/State/ProducerStateTest.cs
diff --git a/src/test/csharp/State/SessionStateTest.cs b/test/State/SessionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/SessionStateTest.cs
rename to test/State/SessionStateTest.cs
diff --git a/src/test/csharp/State/TransactionStateTest.cs b/test/State/TransactionStateTest.cs
similarity index 100%
rename from src/test/csharp/State/TransactionStateTest.cs
rename to test/State/TransactionStateTest.cs
diff --git a/src/test/csharp/TempDestinationTest.cs b/test/TempDestinationTest.cs
similarity index 100%
rename from src/test/csharp/TempDestinationTest.cs
rename to test/TempDestinationTest.cs
diff --git a/test/TestDbConfig.xml b/test/TestDbConfig.xml
new file mode 100644
index 0000000..56e15fe
--- /dev/null
+++ b/test/TestDbConfig.xml
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<root>
+ <createDbConnectionString name="Data Source=WKRKL-F1400EW;User ID=test.user;Password=Password*01"/>
+ <createTableConnectionString name="Data Source=WKRKL-F1400EW;Initial Catalog=TestDB;User ID=test.user;Password=Password*01"/>
+ <testSqlTable name="TestTable"/>
+ <testSqlColumn name="TestID"/>
+ <testSqlQueueName name="TestQueue"/>
+ <testDbName name="TestDB"/>
+ <dbFileNameLocation name="C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\"/>
+ <connectionURI name="tcpfaulty://${activemqhost}:61616"/>
+</root>
\ No newline at end of file
diff --git a/src/test/csharp/TestMain.cs b/test/TestMain.cs
similarity index 100%
rename from src/test/csharp/TestMain.cs
rename to test/TestMain.cs
diff --git a/src/test/csharp/TestMainAsync.cs b/test/TestMainAsync.cs
similarity index 99%
rename from src/test/csharp/TestMainAsync.cs
rename to test/TestMainAsync.cs
index 20018a5..479bde6 100644
--- a/src/test/csharp/TestMainAsync.cs
+++ b/test/TestMainAsync.cs
@@ -1,122 +1,122 @@
-/*
- * 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.
- */
-
-// NOTE: Keep leading spaces. Do not convert to tabs. This file
-// is auto-linked on the NMS website as example code.
-
-#if false // This file should not be compiled into the product. Demo only.
-// START SNIPPET: demo
-using System;
-using System.Threading;
-using Apache.NMS;
-using Apache.NMS.Util;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
-public class TestMain
-{
- protected static AutoResetEvent semaphore = new AutoResetEvent(false);
- protected static ITextMessage message = null;
- protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
-
- public static void Main(string[] args)
- {
- // Example connection strings:
- // activemq:tcp://activemqhost:61616
- // stomp:tcp://activemqhost:61613
- // ems:tcp://tibcohost:7222
- // msmq://localhost
-
- Uri connecturi = new Uri("activemq:tcp://activemqhost:61616");
-
- Console.WriteLine("About to connect to " + connecturi);
-
- // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder.
- IConnectionFactory factory = new NMSConnectionFactory(connecturi);
-
- using(IConnection connection = factory.CreateConnection())
- using(ISession session = connection.CreateSession())
- {
- // Examples for getting a destination:
- //
- // Hard coded destinations:
- // IDestination destination = session.GetQueue("FOO.BAR");
- // Debug.Assert(destination is IQueue);
- // IDestination destination = session.GetTopic("FOO.BAR");
- // Debug.Assert(destination is ITopic);
- //
- // Embedded destination type in the name:
- // IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
- // Debug.Assert(destination is IQueue);
- // IDestination destination = SessionUtil.GetDestination(session, "topic://FOO.BAR");
- // Debug.Assert(destination is ITopic);
- //
- // Defaults to queue if type is not specified:
- // IDestination destination = SessionUtil.GetDestination(session, "FOO.BAR");
- // Debug.Assert(destination is IQueue);
- //
- // .NET 3.5 Supports Extension methods for a simplified syntax:
- // IDestination destination = session.GetDestination("queue://FOO.BAR");
- // Debug.Assert(destination is IQueue);
- // IDestination destination = session.GetDestination("topic://FOO.BAR");
- // Debug.Assert(destination is ITopic);
-
- IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
- Console.WriteLine("Using destination: " + destination);
-
- // Create a consumer and producer
- using(IMessageConsumer consumer = session.CreateConsumer(destination))
- using(IMessageProducer producer = session.CreateProducer(destination))
- {
- // Start the connection so that messages will be processed.
- connection.Start();
- producer.DeliveryMode = MsgDeliveryMode.Persistent;
- producer.RequestTimeout = receiveTimeout;
- consumer.Listener += new MessageListener(OnMessage);
-
- // Send a message
- ITextMessage request = session.CreateTextMessage("Hello World!");
- request.NMSCorrelationID = "abc";
- request.Properties["NMSXGroupID"] = "cheese";
- request.Properties["myHeader"] = "Cheddar";
-
- producer.Send(request);
-
- // Wait for the message
- semaphore.WaitOne((int) receiveTimeout.TotalMilliseconds, true);
- if(message == null)
- {
- Console.WriteLine("No message received!");
- }
- else
- {
- Console.WriteLine("Received message with ID: " + message.NMSMessageId);
- Console.WriteLine("Received message with text: " + message.Text);
- }
- }
- }
- }
-
- protected static void OnMessage(IMessage receivedMsg)
- {
- message = receivedMsg as ITextMessage;
- semaphore.Set();
- }
-}
-}
-// END SNIPPET: demo
-#endif
+/*
+ * 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.
+ */
+
+// NOTE: Keep leading spaces. Do not convert to tabs. This file
+// is auto-linked on the NMS website as example code.
+
+#if false // This file should not be compiled into the product. Demo only.
+// START SNIPPET: demo
+using System;
+using System.Threading;
+using Apache.NMS;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+public class TestMain
+{
+ protected static AutoResetEvent semaphore = new AutoResetEvent(false);
+ protected static ITextMessage message = null;
+ protected static TimeSpan receiveTimeout = TimeSpan.FromSeconds(10);
+
+ public static void Main(string[] args)
+ {
+ // Example connection strings:
+ // activemq:tcp://activemqhost:61616
+ // stomp:tcp://activemqhost:61613
+ // ems:tcp://tibcohost:7222
+ // msmq://localhost
+
+ Uri connecturi = new Uri("activemq:tcp://activemqhost:61616");
+
+ Console.WriteLine("About to connect to " + connecturi);
+
+ // NOTE: ensure the nmsprovider-activemq.config file exists in the executable folder.
+ IConnectionFactory factory = new NMSConnectionFactory(connecturi);
+
+ using(IConnection connection = factory.CreateConnection())
+ using(ISession session = connection.CreateSession())
+ {
+ // Examples for getting a destination:
+ //
+ // Hard coded destinations:
+ // IDestination destination = session.GetQueue("FOO.BAR");
+ // Debug.Assert(destination is IQueue);
+ // IDestination destination = session.GetTopic("FOO.BAR");
+ // Debug.Assert(destination is ITopic);
+ //
+ // Embedded destination type in the name:
+ // IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
+ // Debug.Assert(destination is IQueue);
+ // IDestination destination = SessionUtil.GetDestination(session, "topic://FOO.BAR");
+ // Debug.Assert(destination is ITopic);
+ //
+ // Defaults to queue if type is not specified:
+ // IDestination destination = SessionUtil.GetDestination(session, "FOO.BAR");
+ // Debug.Assert(destination is IQueue);
+ //
+ // .NET 3.5 Supports Extension methods for a simplified syntax:
+ // IDestination destination = session.GetDestination("queue://FOO.BAR");
+ // Debug.Assert(destination is IQueue);
+ // IDestination destination = session.GetDestination("topic://FOO.BAR");
+ // Debug.Assert(destination is ITopic);
+
+ IDestination destination = SessionUtil.GetDestination(session, "queue://FOO.BAR");
+ Console.WriteLine("Using destination: " + destination);
+
+ // Create a consumer and producer
+ using(IMessageConsumer consumer = session.CreateConsumer(destination))
+ using(IMessageProducer producer = session.CreateProducer(destination))
+ {
+ // Start the connection so that messages will be processed.
+ connection.Start();
+ producer.DeliveryMode = MsgDeliveryMode.Persistent;
+ producer.RequestTimeout = receiveTimeout;
+ consumer.Listener += new MessageListener(OnMessage);
+
+ // Send a message
+ ITextMessage request = session.CreateTextMessage("Hello World!");
+ request.NMSCorrelationID = "abc";
+ request.Properties["NMSXGroupID"] = "cheese";
+ request.Properties["myHeader"] = "Cheddar";
+
+ producer.Send(request);
+
+ // Wait for the message
+ semaphore.WaitOne((int) receiveTimeout.TotalMilliseconds, true);
+ if(message == null)
+ {
+ Console.WriteLine("No message received!");
+ }
+ else
+ {
+ Console.WriteLine("Received message with ID: " + message.NMSMessageId);
+ Console.WriteLine("Received message with text: " + message.Text);
+ }
+ }
+ }
+ }
+
+ protected static void OnMessage(IMessage receivedMsg)
+ {
+ message = receivedMsg as ITextMessage;
+ semaphore.Set();
+ }
+}
+}
+// END SNIPPET: demo
+#endif
diff --git a/src/test/csharp/Threads/CompositeTaskRunnerTest.cs b/test/Threads/CompositeTaskRunnerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/CompositeTaskRunnerTest.cs
rename to test/Threads/CompositeTaskRunnerTest.cs
diff --git a/src/test/csharp/Threads/DedicatedTaskRunnerTest.cs b/test/Threads/DedicatedTaskRunnerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/DedicatedTaskRunnerTest.cs
rename to test/Threads/DedicatedTaskRunnerTest.cs
diff --git a/src/test/csharp/Threads/SchedulerTest.cs b/test/Threads/SchedulerTest.cs
similarity index 100%
rename from src/test/csharp/Threads/SchedulerTest.cs
rename to test/Threads/SchedulerTest.cs
diff --git a/src/test/csharp/Threads/ThreadPoolExecutorTest.cs b/test/Threads/ThreadPoolExecutorTest.cs
similarity index 100%
rename from src/test/csharp/Threads/ThreadPoolExecutorTest.cs
rename to test/Threads/ThreadPoolExecutorTest.cs
diff --git a/src/test/csharp/Threads/TimerExTest.cs b/test/Threads/TimerExTest.cs
similarity index 100%
rename from src/test/csharp/Threads/TimerExTest.cs
rename to test/Threads/TimerExTest.cs
diff --git a/src/test/csharp/Transactions/RecoveryFileLoggerTest.cs b/test/Transactions/RecoveryFileLoggerTest.cs
similarity index 100%
rename from src/test/csharp/Transactions/RecoveryFileLoggerTest.cs
rename to test/Transactions/RecoveryFileLoggerTest.cs
diff --git a/src/test/csharp/Transactions/RecoveryLoggerHarness.cs b/test/Transactions/RecoveryLoggerHarness.cs
similarity index 99%
rename from src/test/csharp/Transactions/RecoveryLoggerHarness.cs
rename to test/Transactions/RecoveryLoggerHarness.cs
index fb69338..ac574cd 100644
--- a/src/test/csharp/Transactions/RecoveryLoggerHarness.cs
+++ b/test/Transactions/RecoveryLoggerHarness.cs
@@ -1,229 +1,229 @@
-/*
- * 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.Generic;
-
-using Apache.NMS.ActiveMQ.Commands;
-using Apache.NMS.ActiveMQ.Util;
-using Apache.NMS.Util;
-
-namespace Apache.NMS.ActiveMQ.Transactions
-{
- public class RecoveryLoggerHarness : IRecoveryLogger
- {
- public delegate void HarnessedEventHandler();
- public delegate void HarnessedLogRecoveryInfoHandler(XATransactionId xid, byte[] recoveryInfo);
- public delegate void HarnessedLogRecoveredHandler(XATransactionId xid);
- public delegate void HarnessedGetRecoverablesHandler(KeyValuePair<XATransactionId, byte[]>[] recoverables);
-
- private static readonly FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory> FACTORY_FINDER =
- new FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory>();
-
- private IRecoveryLogger containedLogger;
-
- public event HarnessedEventHandler PreInitializeEvent;
- public event HarnessedEventHandler PostInitializeEvent;
-
- public event HarnessedLogRecoveryInfoHandler PreLogRecoveryInfoEvent;
- public event HarnessedLogRecoveryInfoHandler PostLogRecoveryInfoEvent;
-
- public event HarnessedLogRecoveredHandler PreLogRecoverdEvent;
- public event HarnessedLogRecoveredHandler PostLogRecoverdEvent;
-
- public event HarnessedGetRecoverablesHandler PreGetRecoverablesEvent;
- public event HarnessedGetRecoverablesHandler PostGetRecoverablesEvent;
-
- public event HarnessedEventHandler PrePurgeEvent;
- public event HarnessedEventHandler PostPurgeEvent;
-
- public RecoveryLoggerHarness()
- {
- this.containedLogger = new RecoveryFileLogger();
- }
-
- public string ResourceManagerId
- {
- get { return this.containedLogger.ResourceManagerId; }
- }
-
- public void Initialize(string resourceManagerId)
- {
- if(this.PreInitializeEvent != null)
- {
- this.PreInitializeEvent();
- }
-
- this.containedLogger.Initialize(resourceManagerId);
-
- if (this.PostInitializeEvent != null)
- {
- this.PostInitializeEvent();
- }
- }
-
- public void LogRecoveryInfo(XATransactionId xid, byte[] recoveryInformation)
- {
- if (recoveryInformation == null || recoveryInformation.Length == 0)
- {
- return;
- }
-
- if (this.PreLogRecoveryInfoEvent != null)
- {
- this.PreLogRecoveryInfoEvent(xid, recoveryInformation);
- }
-
- this.containedLogger.LogRecoveryInfo(xid, recoveryInformation);
-
- if (this.PostLogRecoveryInfoEvent != null)
- {
- this.PostLogRecoveryInfoEvent(xid, recoveryInformation);
- }
- }
-
- public KeyValuePair<XATransactionId, byte[]>[] GetRecoverables()
- {
- KeyValuePair<XATransactionId, byte[]>[] result = new KeyValuePair<XATransactionId, byte[]>[0];
-
- if (this.PreGetRecoverablesEvent != null)
- {
- this.PreGetRecoverablesEvent(result);
- }
-
- result = this.containedLogger.GetRecoverables();
-
- if (this.PostGetRecoverablesEvent != null)
- {
- this.PostGetRecoverablesEvent(result);
- }
-
- return result;
- }
-
- public void LogRecovered(XATransactionId xid)
- {
- if (this.PreLogRecoverdEvent != null)
- {
- this.PreLogRecoverdEvent(xid);
- }
-
- this.containedLogger.LogRecovered(xid);
-
- if (this.PostLogRecoverdEvent != null)
- {
- this.PostLogRecoverdEvent(xid);
- }
- }
-
- public void Purge()
- {
- if (this.PrePurgeEvent != null)
- {
- this.PrePurgeEvent();
- }
-
- this.containedLogger.Purge();
-
- if (this.PostPurgeEvent != null)
- {
- this.PostPurgeEvent();
- }
- }
-
- public string LoggerType
- {
- get { return this.containedLogger.LoggerType; }
- }
-
- #region Harness Methods
-
- public IRecoveryLogger Harnessed
- {
- get { return this.containedLogger; }
- }
-
- public string HarnessedType
- {
- get { return this.containedLogger != null ? this.containedLogger.LoggerType : ""; }
- set
- {
- if (string.IsNullOrEmpty(value))
- {
- throw new NMSException(String.Format("Recovery Logger name invalid: [{0}]", value));
- }
-
- IRecoveryLoggerFactory factory = null;
-
- try
- {
- factory = NewInstance(value.ToLower());
- }
- catch (NMSException)
- {
- throw;
- }
- catch (Exception e)
- {
- throw NMSExceptionSupport.Create("Error creating Recovery Logger", e);
- }
-
- this.containedLogger = factory.Create();
- }
- }
-
- private static IRecoveryLoggerFactory NewInstance(string scheme)
- {
- try
- {
- Type factoryType = FindLoggerFactory(scheme);
-
- if (factoryType == null)
- {
- throw new Exception("NewInstance failed to find a match for id = " + scheme);
- }
-
- return (IRecoveryLoggerFactory)Activator.CreateInstance(factoryType);
- }
- catch (Exception ex)
- {
- Tracer.WarnFormat("NewInstance failed to create an IRecoveryLoggerFactory with error: {1}", ex.Message);
- throw;
- }
- }
-
- private static Type FindLoggerFactory(string scheme)
- {
- try
- {
- return FACTORY_FINDER.FindFactoryType(scheme);
- }
- catch
- {
- throw new NMSException("Failed to find Factory for Recovery Logger type: " + scheme);
- }
- }
-
- public Object Clone()
- {
- return this.MemberwiseClone();
- }
-
- #endregion
- }
-}
-
+/*
+ * 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.Generic;
+
+using Apache.NMS.ActiveMQ.Commands;
+using Apache.NMS.ActiveMQ.Util;
+using Apache.NMS.Util;
+
+namespace Apache.NMS.ActiveMQ.Transactions
+{
+ public class RecoveryLoggerHarness : IRecoveryLogger
+ {
+ public delegate void HarnessedEventHandler();
+ public delegate void HarnessedLogRecoveryInfoHandler(XATransactionId xid, byte[] recoveryInfo);
+ public delegate void HarnessedLogRecoveredHandler(XATransactionId xid);
+ public delegate void HarnessedGetRecoverablesHandler(KeyValuePair<XATransactionId, byte[]>[] recoverables);
+
+ private static readonly FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory> FACTORY_FINDER =
+ new FactoryFinder<RecoveryLoggerFactoryAttribute, IRecoveryLoggerFactory>();
+
+ private IRecoveryLogger containedLogger;
+
+ public event HarnessedEventHandler PreInitializeEvent;
+ public event HarnessedEventHandler PostInitializeEvent;
+
+ public event HarnessedLogRecoveryInfoHandler PreLogRecoveryInfoEvent;
+ public event HarnessedLogRecoveryInfoHandler PostLogRecoveryInfoEvent;
+
+ public event HarnessedLogRecoveredHandler PreLogRecoverdEvent;
+ public event HarnessedLogRecoveredHandler PostLogRecoverdEvent;
+
+ public event HarnessedGetRecoverablesHandler PreGetRecoverablesEvent;
+ public event HarnessedGetRecoverablesHandler PostGetRecoverablesEvent;
+
+ public event HarnessedEventHandler PrePurgeEvent;
+ public event HarnessedEventHandler PostPurgeEvent;
+
+ public RecoveryLoggerHarness()
+ {
+ this.containedLogger = new RecoveryFileLogger();
+ }
+
+ public string ResourceManagerId
+ {
+ get { return this.containedLogger.ResourceManagerId; }
+ }
+
+ public void Initialize(string resourceManagerId)
+ {
+ if(this.PreInitializeEvent != null)
+ {
+ this.PreInitializeEvent();
+ }
+
+ this.containedLogger.Initialize(resourceManagerId);
+
+ if (this.PostInitializeEvent != null)
+ {
+ this.PostInitializeEvent();
+ }
+ }
+
+ public void LogRecoveryInfo(XATransactionId xid, byte[] recoveryInformation)
+ {
+ if (recoveryInformation == null || recoveryInformation.Length == 0)
+ {
+ return;
+ }
+
+ if (this.PreLogRecoveryInfoEvent != null)
+ {
+ this.PreLogRecoveryInfoEvent(xid, recoveryInformation);
+ }
+
+ this.containedLogger.LogRecoveryInfo(xid, recoveryInformation);
+
+ if (this.PostLogRecoveryInfoEvent != null)
+ {
+ this.PostLogRecoveryInfoEvent(xid, recoveryInformation);
+ }
+ }
+
+ public KeyValuePair<XATransactionId, byte[]>[] GetRecoverables()
+ {
+ KeyValuePair<XATransactionId, byte[]>[] result = new KeyValuePair<XATransactionId, byte[]>[0];
+
+ if (this.PreGetRecoverablesEvent != null)
+ {
+ this.PreGetRecoverablesEvent(result);
+ }
+
+ result = this.containedLogger.GetRecoverables();
+
+ if (this.PostGetRecoverablesEvent != null)
+ {
+ this.PostGetRecoverablesEvent(result);
+ }
+
+ return result;
+ }
+
+ public void LogRecovered(XATransactionId xid)
+ {
+ if (this.PreLogRecoverdEvent != null)
+ {
+ this.PreLogRecoverdEvent(xid);
+ }
+
+ this.containedLogger.LogRecovered(xid);
+
+ if (this.PostLogRecoverdEvent != null)
+ {
+ this.PostLogRecoverdEvent(xid);
+ }
+ }
+
+ public void Purge()
+ {
+ if (this.PrePurgeEvent != null)
+ {
+ this.PrePurgeEvent();
+ }
+
+ this.containedLogger.Purge();
+
+ if (this.PostPurgeEvent != null)
+ {
+ this.PostPurgeEvent();
+ }
+ }
+
+ public string LoggerType
+ {
+ get { return this.containedLogger.LoggerType; }
+ }
+
+ #region Harness Methods
+
+ public IRecoveryLogger Harnessed
+ {
+ get { return this.containedLogger; }
+ }
+
+ public string HarnessedType
+ {
+ get { return this.containedLogger != null ? this.containedLogger.LoggerType : ""; }
+ set
+ {
+ if (string.IsNullOrEmpty(value))
+ {
+ throw new NMSException(String.Format("Recovery Logger name invalid: [{0}]", value));
+ }
+
+ IRecoveryLoggerFactory factory = null;
+
+ try
+ {
+ factory = NewInstance(value.ToLower());
+ }
+ catch (NMSException)
+ {
+ throw;
+ }
+ catch (Exception e)
+ {
+ throw NMSExceptionSupport.Create("Error creating Recovery Logger", e);
+ }
+
+ this.containedLogger = factory.Create();
+ }
+ }
+
+ private static IRecoveryLoggerFactory NewInstance(string scheme)
+ {
+ try
+ {
+ Type factoryType = FindLoggerFactory(scheme);
+
+ if (factoryType == null)
+ {
+ throw new Exception("NewInstance failed to find a match for id = " + scheme);
+ }
+
+ return (IRecoveryLoggerFactory)Activator.CreateInstance(factoryType);
+ }
+ catch (Exception ex)
+ {
+ Tracer.WarnFormat("NewInstance failed to create an IRecoveryLoggerFactory with error: {1}", ex.Message);
+ throw;
+ }
+ }
+
+ private static Type FindLoggerFactory(string scheme)
+ {
+ try
+ {
+ return FACTORY_FINDER.FindFactoryType(scheme);
+ }
+ catch
+ {
+ throw new NMSException("Failed to find Factory for Recovery Logger type: " + scheme);
+ }
+ }
+
+ public Object Clone()
+ {
+ return this.MemberwiseClone();
+ }
+
+ #endregion
+ }
+}
+
diff --git a/src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs b/test/Transactions/RecoveryLoggerHarnessFactory.cs
similarity index 99%
rename from src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs
rename to test/Transactions/RecoveryLoggerHarnessFactory.cs
index 5bd530e..eebd6aa 100644
--- a/src/test/csharp/Transactions/RecoveryLoggerHarnessFactory.cs
+++ b/test/Transactions/RecoveryLoggerHarnessFactory.cs
@@ -1,29 +1,29 @@
-/*
- * 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.
- */
-
-namespace Apache.NMS.ActiveMQ.Transactions
-{
- [RecoveryLoggerFactory("harness")]
- public class RecoveryLoggerHarnessFactory : IRecoveryLoggerFactory
- {
- public IRecoveryLogger Create()
- {
- return new RecoveryLoggerHarness();
- }
- }
-}
-
+/*
+ * 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.
+ */
+
+namespace Apache.NMS.ActiveMQ.Transactions
+{
+ [RecoveryLoggerFactory("harness")]
+ public class RecoveryLoggerHarnessFactory : IRecoveryLoggerFactory
+ {
+ public IRecoveryLogger Create()
+ {
+ return new RecoveryLoggerHarness();
+ }
+ }
+}
+
diff --git a/src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs b/test/Transport/Inactivity/InactivityMonitorTest.cs
similarity index 100%
rename from src/test/csharp/Transport/Inactivity/InactivityMonitorTest.cs
rename to test/Transport/Inactivity/InactivityMonitorTest.cs
diff --git a/src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs b/test/Transport/Mock/MockTransportFactoryTest.cs
similarity index 96%
rename from src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs
rename to test/Transport/Mock/MockTransportFactoryTest.cs
index 661e731..db51188 100644
--- a/src/test/csharp/Transport/Mock/MockTransportFactoryTest.cs
+++ b/test/Transport/Mock/MockTransportFactoryTest.cs
@@ -57,7 +57,7 @@
}
[Test]
- [ExpectedException( "Apache.NMS.ActiveMQ.IOException" )]
+ [ExpectedException( typeof(IOException))]
public void CreationFailMockTransportTest()
{
MockTransportFactory factory = new MockTransportFactory();
diff --git a/src/test/csharp/Transport/Mock/MockTransportTest.cs b/test/Transport/Mock/MockTransportTest.cs
similarity index 98%
rename from src/test/csharp/Transport/Mock/MockTransportTest.cs
rename to test/Transport/Mock/MockTransportTest.cs
index f3c504c..958a7a2 100644
--- a/src/test/csharp/Transport/Mock/MockTransportTest.cs
+++ b/test/Transport/Mock/MockTransportTest.cs
@@ -52,7 +52,7 @@
}
[Test]
- [ExpectedException("System.InvalidOperationException")]
+ [ExpectedException(typeof(InvalidOperationException))]
public void StartUnitializedTransportTest()
{
MockTransport transport = new MockTransport(mockUri);
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransport.cs b/test/Transport/Tcp/TcpFaultyTransport.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransport.cs
rename to test/Transport/Tcp/TcpFaultyTransport.cs
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransportFactory.cs b/test/Transport/Tcp/TcpFaultyTransportFactory.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransportFactory.cs
rename to test/Transport/Tcp/TcpFaultyTransportFactory.cs
diff --git a/src/test/csharp/Transport/Tcp/TcpFaultyTransportTest.cs b/test/Transport/Tcp/TcpFaultyTransportTest.cs
similarity index 100%
rename from src/test/csharp/Transport/Tcp/TcpFaultyTransportTest.cs
rename to test/Transport/Tcp/TcpFaultyTransportTest.cs
diff --git a/src/test/csharp/Transport/failover/FailoverTransactionTest.cs b/test/Transport/failover/FailoverTransactionTest.cs
similarity index 100%
rename from src/test/csharp/Transport/failover/FailoverTransactionTest.cs
rename to test/Transport/failover/FailoverTransactionTest.cs
diff --git a/src/test/csharp/Transport/failover/FailoverTransportTest.cs b/test/Transport/failover/FailoverTransportTest.cs
similarity index 100%
rename from src/test/csharp/Transport/failover/FailoverTransportTest.cs
rename to test/Transport/failover/FailoverTransportTest.cs
diff --git a/src/test/csharp/Util/ActiveMQMessageAuditTest.cs b/test/Util/ActiveMQMessageAuditTest.cs
similarity index 100%
rename from src/test/csharp/Util/ActiveMQMessageAuditTest.cs
rename to test/Util/ActiveMQMessageAuditTest.cs
diff --git a/src/test/csharp/Util/ActiveMQMessageTransformationTest.cs b/test/Util/ActiveMQMessageTransformationTest.cs
similarity index 100%
rename from src/test/csharp/Util/ActiveMQMessageTransformationTest.cs
rename to test/Util/ActiveMQMessageTransformationTest.cs
diff --git a/src/test/csharp/Util/BitArrayBinTest.cs b/test/Util/BitArrayBinTest.cs
similarity index 100%
rename from src/test/csharp/Util/BitArrayBinTest.cs
rename to test/Util/BitArrayBinTest.cs
diff --git a/src/test/csharp/Util/ConnectionAuditTest.cs b/test/Util/ConnectionAuditTest.cs
similarity index 100%
rename from src/test/csharp/Util/ConnectionAuditTest.cs
rename to test/Util/ConnectionAuditTest.cs
diff --git a/src/test/csharp/Util/FifoMessageDispatchChannelTest.cs b/test/Util/FifoMessageDispatchChannelTest.cs
similarity index 100%
rename from src/test/csharp/Util/FifoMessageDispatchChannelTest.cs
rename to test/Util/FifoMessageDispatchChannelTest.cs
diff --git a/src/test/csharp/Util/LRUCacheTest.cs b/test/Util/LRUCacheTest.cs
similarity index 100%
rename from src/test/csharp/Util/LRUCacheTest.cs
rename to test/Util/LRUCacheTest.cs
diff --git a/src/test/csharp/Util/MemoryUsageTest.cs b/test/Util/MemoryUsageTest.cs
similarity index 100%
rename from src/test/csharp/Util/MemoryUsageTest.cs
rename to test/Util/MemoryUsageTest.cs
diff --git a/src/test/csharp/Util/SimplePriorityMessageDispatchChannelTest.cs b/test/Util/SimplePriorityMessageDispatchChannelTest.cs
similarity index 100%
rename from src/test/csharp/Util/SimplePriorityMessageDispatchChannelTest.cs
rename to test/Util/SimplePriorityMessageDispatchChannelTest.cs
diff --git a/src/test/csharp/VirtualTopicTest.cs b/test/VirtualTopicTest.cs
similarity index 99%
rename from src/test/csharp/VirtualTopicTest.cs
rename to test/VirtualTopicTest.cs
index b3ead36..93f668e 100644
--- a/src/test/csharp/VirtualTopicTest.cs
+++ b/test/VirtualTopicTest.cs
@@ -1,187 +1,187 @@
-/*
- * 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.Threading;
-using Apache.NMS.Test;
-using NUnit.Framework;
-
-namespace Apache.NMS.ActiveMQ.Test
-{
- [TestFixture]
- public class VirtualTopicTest : NMSTestSupport
- {
- protected static string DESTINATION_NAME = "TEST.VTopicDestination";
- protected static string PRODUCER_DESTINATION_NAME = "VirtualTopic." + DESTINATION_NAME;
- protected static string CONSUMER_A_DESTINATION_NAME = "Consumer.A." + PRODUCER_DESTINATION_NAME;
- protected static string CONSUMER_B_DESTINATION_NAME = "Consumer.B." + PRODUCER_DESTINATION_NAME;
- protected static string TEST_CLIENT_ID = "VirtualTopicTestClientId";
-
- protected const int totalMsgs = 5;
-
- [Test]
- public void SendReceiveVirtualTopicMessage(
- [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,
- AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]
- AcknowledgementMode ackMode,
- [Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
- MsgDeliveryMode deliveryMode)
- {
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(ackMode))
- {
- using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
- using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
- using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
- {
- producer.DeliveryMode = deliveryMode;
-
- for(int index = 0; index < totalMsgs; index++)
- {
- string msgText = "Message #" + index;
- Tracer.Info("Sending: " + msgText);
- producer.Send(session.CreateTextMessage(msgText));
- }
-
- if(AcknowledgementMode.Transactional == ackMode)
- {
- session.Commit();
- }
-
- for(int index = 0; index < totalMsgs; index++)
- {
- string msgText = "Message #" + index;
- ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage;
- Assert.IsNotNull(messageA, "Did not receive message for consumer A.");
- messageA.Acknowledge();
- Tracer.Info("Received A: " + msgText);
-
- ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage;
- Assert.IsNotNull(messageB, "Did not receive message for consumer B.");
- messageB.Acknowledge();
- Tracer.Info("Received B: " + msgText);
-
- Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
- Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
- }
-
- if(AcknowledgementMode.Transactional == ackMode)
- {
- session.Commit();
- }
- }
-
- // Give the Broker some time to remove the subscriptions.
- Thread.Sleep(2000);
-
- try
- {
- ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
- ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
- }
- catch
- {
- }
- }
- }
- }
-
- protected int receivedA;
- protected int receivedB;
-
- [Test]
- // Do not use listeners with transactional processing.
- public void AsyncSendReceiveVirtualTopicMessage(
- [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge)]
- AcknowledgementMode ackMode,
- [Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
- MsgDeliveryMode deliveryMode)
- {
- receivedA = 0;
- receivedB = 0;
-
- using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
- {
- connection.Start();
- using(ISession session = connection.CreateSession(ackMode))
- {
- using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
- using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
- using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
- {
- producer.DeliveryMode = deliveryMode;
-
- consumerA.Listener += MessageListenerA;
- consumerB.Listener += MessageListenerB;
-
- for(int index = 0; index < totalMsgs; index++)
- {
- string msgText = "Message #" + index;
- Tracer.Info("Sending: " + msgText);
- producer.Send(session.CreateTextMessage(msgText));
- }
-
- int waitCount = 0;
- while(receivedA < totalMsgs && receivedB < totalMsgs)
- {
- if(waitCount++ > 50)
- {
- Assert.Fail("Timed out waiting for message consumers. A = " + receivedA + ", B = " + receivedB);
- }
-
- Tracer.Info("Waiting... Received A = " + receivedA + ", Received B = " + receivedB);
- Thread.Sleep(250);
- }
- }
-
- // Give the Broker some time to remove the subscriptions.
- Thread.Sleep(2000);
-
- try
- {
- ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
- ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
- }
- catch
- {
- }
- }
- }
- }
-
- private void MessageListenerA(IMessage message)
- {
- message.Acknowledge();
- ITextMessage messageA = message as ITextMessage;
- string msgText = "Message #" + receivedA;
- Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
- Tracer.Info("Received Listener A: " + msgText);
- receivedA++;
- }
-
- private void MessageListenerB(IMessage message)
- {
- message.Acknowledge();
- ITextMessage messageB = message as ITextMessage;
- string msgText = "Message #" + receivedB;
- Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
- Tracer.Info("Received Listener B: " + msgText);
- receivedB++;
- }
- }
-}
+/*
+ * 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.Threading;
+using Apache.NMS.Test;
+using NUnit.Framework;
+
+namespace Apache.NMS.ActiveMQ.Test
+{
+ [TestFixture]
+ public class VirtualTopicTest : NMSTestSupport
+ {
+ protected static string DESTINATION_NAME = "TEST.VTopicDestination";
+ protected static string PRODUCER_DESTINATION_NAME = "VirtualTopic." + DESTINATION_NAME;
+ protected static string CONSUMER_A_DESTINATION_NAME = "Consumer.A." + PRODUCER_DESTINATION_NAME;
+ protected static string CONSUMER_B_DESTINATION_NAME = "Consumer.B." + PRODUCER_DESTINATION_NAME;
+ protected static string TEST_CLIENT_ID = "VirtualTopicTestClientId";
+
+ protected const int totalMsgs = 5;
+
+ [Test]
+ public void SendReceiveVirtualTopicMessage(
+ [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge,
+ AcknowledgementMode.DupsOkAcknowledge, AcknowledgementMode.Transactional)]
+ AcknowledgementMode ackMode,
+ [Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
+ MsgDeliveryMode deliveryMode)
+ {
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(ackMode))
+ {
+ using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
+ using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
+ using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
+ {
+ producer.DeliveryMode = deliveryMode;
+
+ for(int index = 0; index < totalMsgs; index++)
+ {
+ string msgText = "Message #" + index;
+ Tracer.Info("Sending: " + msgText);
+ producer.Send(session.CreateTextMessage(msgText));
+ }
+
+ if(AcknowledgementMode.Transactional == ackMode)
+ {
+ session.Commit();
+ }
+
+ for(int index = 0; index < totalMsgs; index++)
+ {
+ string msgText = "Message #" + index;
+ ITextMessage messageA = consumerA.Receive(receiveTimeout) as ITextMessage;
+ Assert.IsNotNull(messageA, "Did not receive message for consumer A.");
+ messageA.Acknowledge();
+ Tracer.Info("Received A: " + msgText);
+
+ ITextMessage messageB = consumerB.Receive(receiveTimeout) as ITextMessage;
+ Assert.IsNotNull(messageB, "Did not receive message for consumer B.");
+ messageB.Acknowledge();
+ Tracer.Info("Received B: " + msgText);
+
+ Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
+ Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
+ }
+
+ if(AcknowledgementMode.Transactional == ackMode)
+ {
+ session.Commit();
+ }
+ }
+
+ // Give the Broker some time to remove the subscriptions.
+ Thread.Sleep(2000);
+
+ try
+ {
+ ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
+ ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
+ }
+ catch
+ {
+ }
+ }
+ }
+ }
+
+ protected int receivedA;
+ protected int receivedB;
+
+ [Test]
+ // Do not use listeners with transactional processing.
+ public void AsyncSendReceiveVirtualTopicMessage(
+ [Values(AcknowledgementMode.AutoAcknowledge, AcknowledgementMode.ClientAcknowledge, AcknowledgementMode.DupsOkAcknowledge)]
+ AcknowledgementMode ackMode,
+ [Values(MsgDeliveryMode.NonPersistent, MsgDeliveryMode.Persistent)]
+ MsgDeliveryMode deliveryMode)
+ {
+ receivedA = 0;
+ receivedB = 0;
+
+ using(IConnection connection = CreateConnection(TEST_CLIENT_ID))
+ {
+ connection.Start();
+ using(ISession session = connection.CreateSession(ackMode))
+ {
+ using(IMessageConsumer consumerA = session.CreateConsumer(session.GetQueue(CONSUMER_A_DESTINATION_NAME)))
+ using(IMessageConsumer consumerB = session.CreateConsumer(session.GetQueue(CONSUMER_B_DESTINATION_NAME)))
+ using(IMessageProducer producer = session.CreateProducer(session.GetTopic(PRODUCER_DESTINATION_NAME)))
+ {
+ producer.DeliveryMode = deliveryMode;
+
+ consumerA.Listener += MessageListenerA;
+ consumerB.Listener += MessageListenerB;
+
+ for(int index = 0; index < totalMsgs; index++)
+ {
+ string msgText = "Message #" + index;
+ Tracer.Info("Sending: " + msgText);
+ producer.Send(session.CreateTextMessage(msgText));
+ }
+
+ int waitCount = 0;
+ while(receivedA < totalMsgs && receivedB < totalMsgs)
+ {
+ if(waitCount++ > 50)
+ {
+ Assert.Fail("Timed out waiting for message consumers. A = " + receivedA + ", B = " + receivedB);
+ }
+
+ Tracer.Info("Waiting... Received A = " + receivedA + ", Received B = " + receivedB);
+ Thread.Sleep(250);
+ }
+ }
+
+ // Give the Broker some time to remove the subscriptions.
+ Thread.Sleep(2000);
+
+ try
+ {
+ ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_A_DESTINATION_NAME));
+ ((Session) session).DeleteDestination(session.GetQueue(CONSUMER_B_DESTINATION_NAME));
+ }
+ catch
+ {
+ }
+ }
+ }
+ }
+
+ private void MessageListenerA(IMessage message)
+ {
+ message.Acknowledge();
+ ITextMessage messageA = message as ITextMessage;
+ string msgText = "Message #" + receivedA;
+ Assert.AreEqual(msgText, messageA.Text, "Message text A does not match.");
+ Tracer.Info("Received Listener A: " + msgText);
+ receivedA++;
+ }
+
+ private void MessageListenerB(IMessage message)
+ {
+ message.Acknowledge();
+ ITextMessage messageB = message as ITextMessage;
+ string msgText = "Message #" + receivedB;
+ Assert.AreEqual(msgText, messageB.Text, "Message text B does not match.");
+ Tracer.Info("Received Listener B: " + msgText);
+ receivedB++;
+ }
+ }
+}
diff --git a/src/test/csharp/ZeroPrefetchConsumerTest.cs b/test/ZeroPrefetchConsumerTest.cs
similarity index 100%
rename from src/test/csharp/ZeroPrefetchConsumerTest.cs
rename to test/ZeroPrefetchConsumerTest.cs
diff --git a/test/img/activemq_logo_icon.png b/test/img/activemq_logo_icon.png
new file mode 100644
index 0000000..c2b43f5
--- /dev/null
+++ b/test/img/activemq_logo_icon.png
Binary files differ
diff --git a/test/nms-openwire-test.csproj b/test/nms-openwire-test.csproj
new file mode 100644
index 0000000..147c848
--- /dev/null
+++ b/test/nms-openwire-test.csproj
@@ -0,0 +1,70 @@
+<Project Sdk="Microsoft.NET.Sdk">
+
+ <PropertyGroup>
+ <TargetFrameworks>net462;netcoreapp2.2</TargetFrameworks>
+ <RootNamespace>Apache.NMS.ActiveMQ.Test</RootNamespace>
+ <AssemblyName>Apache.NMS.ActiveMQ.Test</AssemblyName>
+ <ApplicationIcon />
+ <OutputType>Library</OutputType>
+ <StartupObject />
+ <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
+ <Company>Apache Software Foundation</Company>
+ <Authors>Apache ActiveMQ</Authors>
+ <Product>Apache NMS OpenWire Test</Product>
+ <Description>Apache NMS (.Net Standard Messaging Library) Test Suite</Description>
+ <Copyright>Copyright (C) 2005-2019 Apache Software Foundation</Copyright>
+ <PackageLicenseFile>LICENSE.txt</PackageLicenseFile>
+ <PackageProjectUrl>https://activemq.apache.org/components/nms/</PackageProjectUrl>
+ <PackageIcon>activemq_logo_icon.png</PackageIcon>
+ <RepositoryUrl>https://github.com/apache/activemq-nms-openwire</RepositoryUrl>
+ <RepositoryType>git</RepositoryType>
+ <PackageTags>apache;activemq;nms;api;net;test;messaging</PackageTags>
+ <Version>1.8.0</Version>
+ <SignAssembly>true</SignAssembly>
+ <AssemblyOriginatorKeyFile>NMSKey.snk</AssemblyOriginatorKeyFile>
+ </PropertyGroup>
+
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
+ <OutputPath>..\..\build\</OutputPath>
+ </PropertyGroup>
+
+ <ItemGroup>
+ <Content Include="..\LICENSE.txt" Link="LICENSE.txt" />
+ <Content Include="..\NOTICE.txt" Link="NOTICE.txt" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <PackageReference Include="Microsoft.NET.Test.Sdk" Version="16.2.0" />
+ <PackageReference Include="NUnit" Version="3.12.0" />
+ <PackageReference Include="NUnit3TestAdapter" Version="3.13.0" />
+ <PackageReference Include="System.Data.SqlClient" Version="4.6.1" />
+ </ItemGroup>
+
+ <ItemGroup Condition=" '$(TargetFramework)' == 'net462'">
+ <Reference Include="System.Web" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <ProjectReference Include="..\src\nms-openwire.csproj" />
+ </ItemGroup>
+
+ <ItemGroup>
+ <Reference Include="Apache.NMS.Test">
+ <HintPath>..\ext_bin\Apache.NMS.Test.dll</HintPath>
+ </Reference>
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Include="..\LICENSE.txt">
+ <Pack>True</Pack>
+ <PackagePath></PackagePath>
+ </None>
+ </ItemGroup>
+
+ <ItemGroup>
+ <None Update="nmsprovider-test.config">
+ <CopyToOutputDirectory>Always</CopyToOutputDirectory>
+ </None>
+ </ItemGroup>
+
+</Project>
diff --git a/nmsprovider-test.config b/test/nmsprovider-test.config
similarity index 100%
rename from nmsprovider-test.config
rename to test/nmsprovider-test.config
diff --git a/test/nsm-openwire-test-introduction.txt b/test/nsm-openwire-test-introduction.txt
new file mode 100644
index 0000000..87c7a1b
--- /dev/null
+++ b/test/nsm-openwire-test-introduction.txt
@@ -0,0 +1,15 @@
+How to correcty run nms-openwire-tests ?
+
+Requirements:
+- installed broker ActiveMQ 5 (https://activemq.apache.org/components/classic/download/)
+- installer SQL Server
+
+1) When the software listed above is installed,
+ log in to SQL Server(using Windows Authentication) and create new login e.g:
+ -Login name: "testuser"
+ -Password: "Password*01"
+ -Check option "SQL Server authentication"
+
+2) Open "TestDbConfig.xml" and go to "createDbConnectionString" and "createTableConnectionString".
+ Update "User ID" and "Password" like was set in new SQL Server login.
+ Update server name e.g value for "Data Source" is a computer name.
\ No newline at end of file
diff --git a/vs2008-activemq-test.csproj b/vs2008-activemq-test.csproj
deleted file mode 100644
index 88c55a0..0000000
--- a/vs2008-activemq-test.csproj
+++ /dev/null
@@ -1,168 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.30729</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{EB943C69-2C9B-45E7-B95B-FB916E7057ED}</ProjectGuid>
- <OutputType>Library</OutputType>
- <RootNamespace>Apache.NMS.ActiveMQ.Test</RootNamespace>
- <AssemblyName>Apache.NMS.ActiveMQ.Test</AssemblyName>
- <WarningLevel>4</WarningLevel>
- <StartupObject>
- </StartupObject>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>2.0</OldToolsVersion>
- <UpgradeBackupLocation>
- </UpgradeBackupLocation>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>keyfile\NMSKey.snk</AssemblyOriginatorKeyFile>
- <SccProjectName>Svn</SccProjectName>
- <SccLocalPath>Svn</SccLocalPath>
- <SccAuxPath>Svn</SccAuxPath>
- <SccProvider>SubversionScc</SccProvider>
- <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>build\net-2.0\debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG;NET,NET_2_0</DefineConstants>
- <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
- <NoWarn>3016</NoWarn>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <Optimize>true</Optimize>
- <OutputPath>build\net-2.0\release\</OutputPath>
- <DefineConstants>TRACE;NET,NET_2_0</DefineConstants>
- <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
- <DebugType>full</DebugType>
- <NoWarn>3016</NoWarn>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Apache.NMS, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>
- </Reference>
- <Reference Include="Apache.NMS.Test, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.Test.dll</HintPath>
- </Reference>
- <Reference Include="nunit.framework, Version=2.4.8.0, Culture=neutral, PublicKeyToken=96d09a1eb7f44a77, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>lib\NUnit\net-2.0\nunit.framework.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Transactions" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="src\test\csharp\AMQNET366Test.cs" />
- <Compile Include="src\test\csharp\AMQNET375Test.cs" />
- <Compile Include="src\test\csharp\AMQQueueTransactionTest.cs" />
- <Compile Include="src\test\csharp\AMQRedeliveryPolicyTest.cs" />
- <Compile Include="src\test\csharp\AMQTopicTransactionTest.cs" />
- <Compile Include="src\test\csharp\AMQTransactionTestSupport.cs" />
- <Compile Include="src\test\csharp\BrokerToNMSExceptionsTest.cs" />
- <Compile Include="src\test\csharp\Commands\ActiveMQBytesMessageTest.cs" />
- <Compile Include="src\test\csharp\Commands\ActiveMQMapMessageTest.cs" />
- <Compile Include="src\test\csharp\Commands\ActiveMQMessageTest.cs" />
- <Compile Include="src\test\csharp\Commands\ActiveMQStreamMessageTest.cs" />
- <Compile Include="src\test\csharp\Commands\ActiveMQTextMessageTest.cs" />
- <Compile Include="src\test\csharp\Commands\CommandTest.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\test\csharp\Commands\MessageCompressionTest.cs" />
- <Compile Include="src\test\csharp\CommonAssemblyInfo.cs" />
- <Compile Include="src\test\csharp\ConnectionFactoryTest.cs" />
- <Compile Include="src\test\csharp\ConnectionMetaDataTest.cs" />
- <Compile Include="src\test\csharp\InvalidCredentialsTest.cs" />
- <Compile Include="src\test\csharp\DtcBasicTransactionsTest.cs" />
- <Compile Include="src\test\csharp\DtcConsumerTransactionsTest.cs" />
- <Compile Include="src\test\csharp\DtcProducerTransactionsTest.cs" />
- <Compile Include="src\test\csharp\DtcTransactionsTestSupport.cs" />
- <Compile Include="src\test\csharp\MessageConsumerTest.cs" />
- <Compile Include="src\test\csharp\ExclusiveConsumerTest.cs" />
- <Compile Include="src\test\csharp\IndividualAckTest.cs" />
- <Compile Include="src\test\csharp\MessageListenerRedeliveryTest.cs" />
- <Compile Include="src\test\csharp\MessageProducerTest.cs" />
- <Compile Include="src\test\csharp\NetTxConnectionFactoryTest.cs" />
- <Compile Include="src\test\csharp\NetTxTransactionTest.cs" />
- <Compile Include="src\test\csharp\NMSConnectionFactoryTest.cs" />
- <Compile Include="src\test\csharp\NmsConsoleTracer.cs" />
- <Compile Include="src\test\csharp\NMSSessionRecoverTest.cs" />
- <Compile Include="src\test\csharp\NonBlockingConsumerRedeliveryTest.cs" />
- <Compile Include="src\test\csharp\OpenWire\BooleanStreamTest.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\test\csharp\OpenWire\MaxInactivityDurationTest.cs" />
- <Compile Include="src\test\csharp\OpenWire\PrefetchSizeZeroTest.cs" />
- <Compile Include="src\test\csharp\OptimizedAckTest.cs" />
- <Compile Include="src\test\csharp\QueueBrowserTests.cs" />
- <Compile Include="src\test\csharp\QueueConsumerPriorityTest.cs" />
- <Compile Include="src\test\csharp\RollbackRedeliveryTest.cs" />
- <Compile Include="src\test\csharp\State\ConnectionStateTest.cs" />
- <Compile Include="src\test\csharp\State\ConnectionStateTrackerTest.cs" />
- <Compile Include="src\test\csharp\State\ConsumerStateTest.cs" />
- <Compile Include="src\test\csharp\State\ProducerStateTest.cs" />
- <Compile Include="src\test\csharp\State\SessionStateTest.cs" />
- <Compile Include="src\test\csharp\State\TransactionStateTest.cs" />
- <Compile Include="src\test\csharp\TempDestinationTest.cs" />
- <Compile Include="src\test\csharp\TestMain.cs" />
- <Compile Include="src\test\csharp\TestMainAsync.cs" />
- <Compile Include="src\test\csharp\Threads\CompositeTaskRunnerTest.cs" />
- <Compile Include="src\test\csharp\Threads\DedicatedTaskRunnerTest.cs" />
- <Compile Include="src\test\csharp\Threads\SchedulerTest.cs" />
- <Compile Include="src\test\csharp\Threads\ThreadPoolExecutorTest.cs" />
- <Compile Include="src\test\csharp\Threads\TimerExTest.cs" />
- <Compile Include="src\test\csharp\Transactions\RecoveryFileLoggerTest.cs" />
- <Compile Include="src\test\csharp\Transactions\RecoveryLoggerHarness.cs" />
- <Compile Include="src\test\csharp\Transactions\RecoveryLoggerHarnessFactory.cs" />
- <Compile Include="src\test\csharp\Transport\failover\FailoverTransactionTest.cs" />
- <Compile Include="src\test\csharp\Transport\failover\FailoverTransportTest.cs" />
- <Compile Include="src\test\csharp\Transport\Inactivity\InactivityMonitorTest.cs" />
- <Compile Include="src\test\csharp\Transport\Mock\MockTransportFactoryTest.cs" />
- <Compile Include="src\test\csharp\Transport\Mock\MockTransportTest.cs" />
- <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransport.cs" />
- <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransportFactory.cs" />
- <Compile Include="src\test\csharp\Transport\Tcp\TcpFaultyTransportTest.cs" />
- <Compile Include="src\test\csharp\Util\ActiveMQMessageAuditTest.cs" />
- <Compile Include="src\test\csharp\Util\ActiveMQMessageTransformationTest.cs" />
- <Compile Include="src\test\csharp\Util\BitArrayBinTest.cs" />
- <Compile Include="src\test\csharp\Util\ConnectionAuditTest.cs" />
- <Compile Include="src\test\csharp\Util\FifoMessageDispatchChannelTest.cs" />
- <Compile Include="src\test\csharp\Util\LRUCacheTest.cs" />
- <Compile Include="src\test\csharp\Util\MemoryUsageTest.cs" />
- <Compile Include="src\test\csharp\Util\SimplePriorityMessageDispatchChannelTest.cs" />
- <Compile Include="src\test\csharp\VirtualTopicTest.cs" />
- <Compile Include="src\test\csharp\ZeroPrefetchConsumerTest.cs" />
- <Compile Include="src\test\csharp\OpenWire\BaseDataStreamMarshallerTest.cs" />
- <Compile Include="src\test\csharp\BatchedMessagePriorityConsumerTest.cs" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="nmsprovider-test.config">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- </ItemGroup>
- <ItemGroup>
- <ProjectReference Include="vs2008-activemq.csproj">
- <Project>{08321F42-4B3D-4815-B592-95962BAC3B9F}</Project>
- <Name>vs2008-activemq</Name>
- </ProjectReference>
- </ItemGroup>
- <ItemGroup>
- <None Include="Apache.NMS.ActiveMQ.Test.nunit">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </None>
- <None Include="keyfile\NMSKey.snk" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
- <PropertyGroup>
- <PostBuildEvent>cd $(ProjectDir)
-nant -nologo -q install-all -D:compile.skip=true</PostBuildEvent>
- </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/vs2008-activemq.csproj b/vs2008-activemq.csproj
deleted file mode 100644
index 1cfe906..0000000
--- a/vs2008-activemq.csproj
+++ /dev/null
@@ -1,1340 +0,0 @@
-<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="3.5">
- <PropertyGroup>
- <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
- <ProductVersion>9.0.21022</ProductVersion>
- <SchemaVersion>2.0</SchemaVersion>
- <ProjectGuid>{08321F42-4B3D-4815-B592-95962BAC3B9F}</ProjectGuid>
- <OutputType>Library</OutputType>
- <RootNamespace>Apache.NMS.ActiveMQ</RootNamespace>
- <AssemblyName>Apache.NMS.ActiveMQ</AssemblyName>
- <WarningLevel>4</WarningLevel>
- <SignAssembly>true</SignAssembly>
- <AssemblyOriginatorKeyFile>keyfile\NMSKey.snk</AssemblyOriginatorKeyFile>
- <FileUpgradeFlags>
- </FileUpgradeFlags>
- <OldToolsVersion>2.0</OldToolsVersion>
- <UpgradeBackupLocation>
- </UpgradeBackupLocation>
- <PublishUrl>publish\</PublishUrl>
- <Install>true</Install>
- <InstallFrom>Disk</InstallFrom>
- <UpdateEnabled>false</UpdateEnabled>
- <UpdateMode>Foreground</UpdateMode>
- <UpdateInterval>7</UpdateInterval>
- <UpdateIntervalUnits>Days</UpdateIntervalUnits>
- <UpdatePeriodically>false</UpdatePeriodically>
- <UpdateRequired>false</UpdateRequired>
- <MapFileExtensions>true</MapFileExtensions>
- <ApplicationRevision>0</ApplicationRevision>
- <ApplicationVersion>1.0.0.%2a</ApplicationVersion>
- <IsWebBootstrapper>false</IsWebBootstrapper>
- <UseApplicationTrust>false</UseApplicationTrust>
- <BootstrapperEnabled>true</BootstrapperEnabled>
- <SccProjectName>Svn</SccProjectName>
- <SccLocalPath>Svn</SccLocalPath>
- <SccAuxPath>Svn</SccAuxPath>
- <SccProvider>SubversionScc</SccProvider>
- <RunPostBuildEvent>OnOutputUpdated</RunPostBuildEvent>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <DebugType>full</DebugType>
- <Optimize>false</Optimize>
- <OutputPath>build\net-2.0\debug\</OutputPath>
- <DefineConstants>TRACE;DEBUG;NET,NET_2_0</DefineConstants>
- <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
- <DocumentationFile>
- </DocumentationFile>
- </PropertyGroup>
- <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
- <DebugSymbols>true</DebugSymbols>
- <Optimize>true</Optimize>
- <OutputPath>build\net-2.0\release\</OutputPath>
- <DefineConstants>TRACE;NET,NET_2_0</DefineConstants>
- <AllowUnsafeBlocks>false</AllowUnsafeBlocks>
- <DebugType>full</DebugType>
- </PropertyGroup>
- <ItemGroup>
- <Reference Include="Apache.NMS, Version=1.1.0.0, Culture=neutral, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>lib\Apache.NMS\net-2.0\Apache.NMS.dll</HintPath>
- </Reference>
- <Reference Include="Ionic.Zlib, Version=1.9.1.5, Culture=neutral, PublicKeyToken=edbe51ad942a3f5c, processorArchitecture=MSIL">
- <SpecificVersion>False</SpecificVersion>
- <HintPath>lib\DotNetZip\net-2.0\Ionic.Zlib.dll</HintPath>
- </Reference>
- <Reference Include="System" />
- <Reference Include="System.Data" />
- <Reference Include="System.Transactions" />
- <Reference Include="System.Web" />
- <Reference Include="System.Xml" />
- </ItemGroup>
- <ItemGroup>
- <Compile Include="src\main\csharp\AdvisoryConsumer.cs" />
- <Compile Include="src\main\csharp\BrokerException.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQBlobMessage.cs" />
- <Compile Include="src\main\csharp\Commands\ActiveMQBytesMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQDestination.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQMapMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQObjectMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQQueue.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQStreamMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQTempDestination.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQTempQueue.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQTempTopic.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQTextMessage.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ActiveMQTopic.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BaseCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BaseDataStructure.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BooleanExpression.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BrokerError.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BrokerId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\BrokerInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\Command.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConnectionControl.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConnectionError.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConnectionId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConnectionInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConsumerControl.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConsumerId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ConsumerInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ControlCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DataArrayResponse.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DataResponse.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DataStructure.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DataStructureSupport.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DestinationInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\DiscoveryEvent.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ExceptionResponse.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\FlushCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\IntegerResponse.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\JournalQueueAck.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\JournalTopicAck.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\JournalTrace.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\JournalTransaction.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\KeepAliveInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\LastPartialCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\LocalTransactionId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MarshallAware.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\Message.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessageAck.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessageDispatch.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessageDispatchNotification.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessageId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessagePull.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\MessageReference.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\NetworkBridgeFilter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\PartialCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ProducerAck.cs" />
- <Compile Include="src\main\csharp\Commands\ProducerId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ProducerInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\RemoveInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\RemoveSubscriptionInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ReplayCommand.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\Response.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\SessionId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\SessionInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\ShutdownInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\SubscriptionInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\TransactionId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\TransactionInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\WireFormatInfo.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\XATransactionId.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Commands\Xid.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\CommonAssemblyInfo.cs" />
- <Compile Include="src\main\csharp\CompressionPolicy.cs" />
- <Compile Include="src\main\csharp\Connection.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\ConnectionClosedException.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\ConnectionFactory.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\ConnectionFailedException.cs" />
- <Compile Include="src\main\csharp\ConnectionMetaData.cs" />
- <Compile Include="src\main\csharp\ConsumerClosedException.cs">
- <SubType>Code</SubType>
- <CustomToolNamespace>T</CustomToolNamespace>
- </Compile>
- <Compile Include="src\main\csharp\DestinationFilter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\ICompressionPolicy.cs" />
- <Compile Include="src\main\csharp\IDispatcher.cs" />
- <Compile Include="src\main\csharp\IOException.cs" />
- <Compile Include="src\main\csharp\ISynchronization.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\MessageConsumer.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\MessageProducer.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\NetTxConnection.cs" />
- <Compile Include="src\main\csharp\NetTxConnectionFactory.cs" />
- <Compile Include="src\main\csharp\NetTxMessageConsumer.cs" />
- <Compile Include="src\main\csharp\NetTxRecoveryPolicy.cs" />
- <Compile Include="src\main\csharp\NetTxSession.cs" />
- <Compile Include="src\main\csharp\NetTxTransactionContext.cs" />
- <Compile Include="src\main\csharp\OpenWire\BaseDataStreamMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\BooleanStream.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\IMarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\OpenWireFormat.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V10\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQBytesMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQDestinationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQMapMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQObjectMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQQueueMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQStreamMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempDestinationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempQueueMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTempTopicMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTextMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ActiveMQTopicMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\BaseCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\BrokerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\BrokerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConnectionControlMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConnectionErrorMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConnectionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConnectionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConsumerControlMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConsumerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ConsumerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ControlCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\DataArrayResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\DataResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\DataStructureSupportMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\DestinationInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\DiscoveryEventMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ExceptionResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\FlushCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\IntegerResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\JournalQueueAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\JournalTopicAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\JournalTraceMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\JournalTransactionMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\KeepAliveInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\LastPartialCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\LocalTransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MarshallerFactory.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessageAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessageDispatchMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessageDispatchNotificationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessageIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V1\NetworkBridgeFilterMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\PartialCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V1\ProducerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ProducerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\RemoveInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\RemoveSubscriptionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ReplayCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\SessionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\SessionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\ShutdownInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\SubscriptionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\TransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\TransactionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\WireFormatInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V1\XATransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQBytesMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQDestinationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQMapMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQObjectMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQQueueMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQStreamMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempDestinationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempQueueMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTempTopicMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTextMessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ActiveMQTopicMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\BaseCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\BrokerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\BrokerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConnectionControlMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConnectionErrorMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConnectionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConnectionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConsumerControlMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConsumerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ConsumerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ControlCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\DataArrayResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\DataResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\DestinationInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\DiscoveryEventMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ExceptionResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\FlushCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\IntegerResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\JournalQueueAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\JournalTopicAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\JournalTraceMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\JournalTransactionMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\KeepAliveInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\LastPartialCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\LocalTransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MarshallerFactory.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessageAckMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessageDispatchMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessageDispatchNotificationMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessageIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessageMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\MessagePullMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\NetworkBridgeFilterMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\PartialCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V2\ProducerIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ProducerInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\RemoveInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\RemoveSubscriptionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ReplayCommandMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ResponseMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\SessionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\SessionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\ShutdownInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\SubscriptionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\TransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\TransactionInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\WireFormatInfoMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V2\XATransactionIdMarshaller.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V3\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V4\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V5\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V6\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V7\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V8\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQBlobMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQBytesMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQMapMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQObjectMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQStreamMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempDestinationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempQueueMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTempTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTextMessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ActiveMQTopicMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\BaseCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\BrokerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\BrokerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConnectionControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConnectionErrorMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConnectionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConnectionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConsumerControlMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConsumerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ConsumerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ControlCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\DataArrayResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\DataResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\DestinationInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\DiscoveryEventMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ExceptionResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\FlushCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\IntegerResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\JournalQueueAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\JournalTopicAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\JournalTraceMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\JournalTransactionMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\KeepAliveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\LastPartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\LocalTransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MarshallerFactory.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessageAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessageDispatchMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessageDispatchNotificationMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessageIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessageMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\MessagePullMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\NetworkBridgeFilterMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\PartialCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ProducerAckMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ProducerIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ProducerInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\RemoveInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\RemoveSubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ReplayCommandMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ResponseMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\SessionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\SessionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\ShutdownInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\SubscriptionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\TransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\TransactionInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\WireFormatInfoMarshaller.cs" />
- <Compile Include="src\main\csharp\OpenWire\V9\XATransactionIdMarshaller.cs" />
- <Compile Include="src\main\csharp\PrefetchPolicy.cs" />
- <Compile Include="src\main\csharp\QueueBrowser.cs" />
- <Compile Include="src\main\csharp\RequestTimedOutException.cs" />
- <Compile Include="src\main\csharp\Session.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\SessionExecutor.cs" />
- <Compile Include="src\main\csharp\State\CommandVisitorAdapter.cs" />
- <Compile Include="src\main\csharp\State\ConnectionState.cs" />
- <Compile Include="src\main\csharp\State\ConnectionStateTracker.cs" />
- <Compile Include="src\main\csharp\State\ConsumerState.cs" />
- <Compile Include="src\main\csharp\State\ICommandVisitor.cs" />
- <Compile Include="src\main\csharp\State\ProducerState.cs" />
- <Compile Include="src\main\csharp\State\ResponseHandler.cs" />
- <Compile Include="src\main\csharp\State\SessionState.cs" />
- <Compile Include="src\main\csharp\State\SynchronizedObjects.cs" />
- <Compile Include="src\main\csharp\State\Tracked.cs" />
- <Compile Include="src\main\csharp\State\TransactionState.cs" />
- <Compile Include="src\main\csharp\Threads\CompositeTask.cs" />
- <Compile Include="src\main\csharp\Threads\CompositeTaskRunner.cs" />
- <Compile Include="src\main\csharp\Threads\DedicatedTaskRunner.cs" />
- <Compile Include="src\main\csharp\Threads\DefaultThreadPools.cs" />
- <Compile Include="src\main\csharp\Threads\PooledTaskRunner.cs" />
- <Compile Include="src\main\csharp\Threads\Scheduler.cs" />
- <Compile Include="src\main\csharp\Threads\Task.cs" />
- <Compile Include="src\main\csharp\Threads\TaskRunner.cs" />
- <Compile Include="src\main\csharp\Threads\TaskRunnerFactory.cs" />
- <Compile Include="src\main\csharp\Threads\ThreadPoolExecutor.cs" />
- <Compile Include="src\main\csharp\Threads\TimerEx.cs" />
- <Compile Include="src\main\csharp\Threads\TimerTask.cs" />
- <Compile Include="src\main\csharp\TransactionContext.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transactions\IRecoveryLogger.cs" />
- <Compile Include="src\main\csharp\Transactions\IRecoveryLoggerFactory.cs" />
- <Compile Include="src\main\csharp\Transactions\RecoveryFileLogger.cs" />
- <Compile Include="src\main\csharp\Transactions\RecoveryFileLoggerFactory.cs" />
- <Compile Include="src\main\csharp\Transactions\RecoveryLoggerFactoryAttribute.cs" />
- <Compile Include="src\main\csharp\Transport\ActiveMQTransportFactoryAttribute.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\AbstractDiscoveryAgent.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\ActiveMQDiscoveryAgentFactoryAttribute.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\DiscoveredServiceData.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryAgentFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryTransport.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\DiscoveryTransportFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\http\HttpDiscoveryAgent.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\http\HttpDiscoveryAgentFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\IDiscoveryAgent.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\IDiscoveryAgentFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\Multicast\MulticastDiscoveryAgent.cs" />
- <Compile Include="src\main\csharp\Transport\Discovery\Multicast\MulticastDiscoveryAgentFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Failover\BackupTransport.cs" />
- <Compile Include="src\main\csharp\Transport\Failover\FailoverTransport.cs" />
- <Compile Include="src\main\csharp\Transport\Failover\FailoverTransportFactory.cs" />
- <Compile Include="src\main\csharp\Transport\FutureResponse.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\ICompositeTransport.cs" />
- <Compile Include="src\main\csharp\Transport\InactivityMonitor.cs" />
- <Compile Include="src\main\csharp\Transport\ITransport.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\ITransportFactory.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\IWireFormat.cs" />
- <Compile Include="src\main\csharp\Transport\LoggingTransport.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\Mock\IResponseBuilder.cs" />
- <Compile Include="src\main\csharp\Transport\Mock\MockTransport.cs" />
- <Compile Include="src\main\csharp\Transport\Mock\MockTransportFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Mock\OpenWireResponseBuilder.cs" />
- <Compile Include="src\main\csharp\Transport\MutexTransport.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\ResponseCorrelator.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\Tcp\SslTransport.cs" />
- <Compile Include="src\main\csharp\Transport\Tcp\SslTransportFactory.cs" />
- <Compile Include="src\main\csharp\Transport\Tcp\TcpTransport.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\Tcp\TcpTransportFactory.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\TransportFactory.cs" />
- <Compile Include="src\main\csharp\Transport\TransportFilter.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Transport\WireFormatNegotiator.cs">
- <SubType>Code</SubType>
- </Compile>
- <Compile Include="src\main\csharp\Util\ActiveMQMessageAudit.cs" />
- <Compile Include="src\main\csharp\Util\ActiveMQMessageTransformation.cs" />
- <Compile Include="src\main\csharp\Util\AdvisorySupport.cs" />
- <Compile Include="src\main\csharp\Util\BitArray.cs" />
- <Compile Include="src\main\csharp\Util\BitArrayBin.cs" />
- <Compile Include="src\main\csharp\Util\ConnectionAudit.cs" />
- <Compile Include="src\main\csharp\Util\FactoryAttribute.cs" />
- <Compile Include="src\main\csharp\Util\FactoryFinder.cs" />
- <Compile Include="src\main\csharp\Util\FifoMessageDispatchChannel.cs" />
- <Compile Include="src\main\csharp\Util\IdGenerator.cs" />
- <Compile Include="src\main\csharp\Util\IntrospectionSupport.cs" />
- <Compile Include="src\main\csharp\Util\ISuspendable.cs" />
- <Compile Include="src\main\csharp\Util\LRUCache.cs" />
- <Compile Include="src\main\csharp\Util\MemoryUsage.cs" />
- <Compile Include="src\main\csharp\Util\MessageDispatchChannel.cs" />
- <Compile Include="src\main\csharp\Util\ServiceStopper.cs" />
- <Compile Include="src\main\csharp\Util\SimplePriorityMessageDispatchChannel.cs" />
- </ItemGroup>
- <ItemGroup>
- <Content Include="LICENSE.txt">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- <Content Include="NOTICE.txt">
- <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
- </Content>
- </ItemGroup>
- <ItemGroup>
- <BootstrapperPackage Include="Microsoft.Net.Framework.2.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 2.0 %28x86%29</ProductName>
- <Install>true</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.0">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.0 %28x86%29</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- <BootstrapperPackage Include="Microsoft.Net.Framework.3.5">
- <Visible>False</Visible>
- <ProductName>.NET Framework 3.5</ProductName>
- <Install>false</Install>
- </BootstrapperPackage>
- </ItemGroup>
- <ItemGroup>
- <None Include="keyfile\NMSKey.snk" />
- </ItemGroup>
- <Import Project="$(MSBuildBinPath)\Microsoft.CSHARP.Targets" />
- <PropertyGroup>
- <PostBuildEvent>cd $(ProjectDir)
-nant -nologo -q install-all -D:compile.skip=true</PostBuildEvent>
- <PreBuildEvent>cd $(ProjectDir)
-nant -nologo download-vendor -D:vendor.build.config=$(ConfigurationName) -D:vendor.build.framework=net-2.0</PreBuildEvent>
- </PropertyGroup>
-</Project>
\ No newline at end of file
diff --git a/vs2008-activemq.sln b/vs2008-activemq.sln
deleted file mode 100644
index 3c8a608..0000000
--- a/vs2008-activemq.sln
+++ /dev/null
@@ -1,30 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 10.00
-# Visual Studio 2008
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vs2008-activemq", "vs2008-activemq.csproj", "{08321F42-4B3D-4815-B592-95962BAC3B9F}"
-EndProject
-Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "vs2008-activemq-test", "vs2008-activemq-test.csproj", "{EB943C69-2C9B-45E7-B95B-FB916E7057ED}"
-EndProject
-Global
- GlobalSection(SubversionScc) = preSolution
- Svn-Managed = True
- Manager = AnkhSVN - Subversion Support for Visual Studio
- EndGlobalSection
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|Any CPU = Debug|Any CPU
- Release|Any CPU = Release|Any CPU
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {08321F42-4B3D-4815-B592-95962BAC3B9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {08321F42-4B3D-4815-B592-95962BAC3B9F}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {08321F42-4B3D-4815-B592-95962BAC3B9F}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {08321F42-4B3D-4815-B592-95962BAC3B9F}.Release|Any CPU.Build.0 = Release|Any CPU
- {EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
- {EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Debug|Any CPU.Build.0 = Debug|Any CPU
- {EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Release|Any CPU.ActiveCfg = Release|Any CPU
- {EB943C69-2C9B-45E7-B95B-FB916E7057ED}.Release|Any CPU.Build.0 = Release|Any CPU
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal